[{"data":1,"prerenderedAt":173127},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch03-html-wen-ben-yu-rong-qi-biao-qian":3,"wiki-doc-nav":186},{"id":4,"title":5,"body":6,"description":178,"extension":179,"meta":180,"navigation":181,"path":182,"seo":183,"stem":184,"__hash__":185},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":8,"toc":168},"minimark",[9,13,18,30,36,43,47,56,60,65,68,71,75,78,89,98,107,116,128,136,141,146,159],[10,11,5],"h1",{"id":12},"_3-html文本与容器标签",[14,15,17],"h2",{"id":16},"_31-标题标签","3.1 标题标签",[19,20,21,25,26,29],"p",{},[22,23,24],"code",{},"\u003Ch1>","我是一级标签",[22,27,28],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,31,32,25,34],{},[22,33,24],{},[22,35,28],{},[19,37,38,39,42],{},"在",[22,40,41],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,44,46],{"id":45},"_32-段落标签","3.2 段落标签",[19,48,49,52,53],{},[22,50,51],{},"\u003Cp>","....",[22,54,55],{},"\u003C\u002Fp>",[14,57,59],{"id":58},"_33-换行标签","3.3 换行标签",[19,61,62],{},[22,63,64],{},"\u003Cbr \u002F>",[19,66,67],{},"具有强制换行的作用",[19,69,70],{},"单标签",[14,72,74],{"id":73},"_34-文本格式化标签","3.4 文本格式化标签",[19,76,77],{},"提供粗体、斜体和下划线等效果",[19,79,80,81,84,85,88],{},"加粗：",[22,82,83],{},"\u003Cstrong>...\u003C\u002Fstrong>"," 或 ",[22,86,87],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,90,91,92,84,95,88],{},"斜体：",[22,93,94],{},"\u003Cem>...\u003C\u002Fem>",[22,96,97],{},"\u003Ci>...\u003C\u002Fi>",[19,99,100,101,84,104,88],{},"删除线：",[22,102,103],{},"\u003Cdel>...\u003C\u002Fdel>",[22,105,106],{},"\u003Cs>...\u003C\u002Fs>",[19,108,109,110,84,113,88],{},"下划线：",[22,111,112],{},"\u003Cins>...\u003C\u002Fins>",[22,114,115],{},"\u003Cu>...\u003C\u002Fu>",[14,117,119,120,123,124,127],{"id":118},"_35-div和span标签","3.5 ",[22,121,122],{},"\u003Cdiv>","和",[22,125,126],{},"\u003Cspan>","标签",[19,129,130,132,133,135],{},[22,131,122],{}," 和 ",[22,134,126],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,137,138],{},[22,139,140],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,142,143],{},[22,144,145],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,147,148,149,151,152,154,155,158],{},"两者特点：①",[22,150,122],{}," 标签用来布局，但一行通常只放一个 ",[22,153,122],{},"。可以理解为一个大盒子，独占一行，在 ",[22,156,157],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,160,161,162,164,165,167],{},"②",[22,163,126],{}," 标签也可用于布局，一行可以放多个 ",[22,166,126],{},"，可理解为小盒子。",{"title":169,"searchDepth":170,"depth":170,"links":171},"",2,[172,173,174,175,176],{"id":16,"depth":170,"text":17},{"id":45,"depth":170,"text":46},{"id":58,"depth":170,"text":59},{"id":73,"depth":170,"text":74},{"id":118,"depth":170,"text":177},"3.5 \u003Cdiv>和\u003Cspan>标签",null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":5,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",[187,5302,6410,7830,10819,12170,13659,14748,23510,23522,24121,24147,24271,24512,24577,24595,24608,24655,24779,24948,25147,25327,25532,25668,25763,25800,25813,26123,26864,27572,27593,28613,30244,30395,30408,30420,30721,50533,50548,50565,50598,53470,76818,92961,92982,93095,93216,93986,94649,95010,95048,95154,95254,95297,95323,95384,97038,97139,97164,97655,98155,99235,99518,100260,100762,100774,102789,104452,105955,107653,109570,111489,113511,116981,117413,117876,118625,121569,121917,121939,122295,125601,125613,126016,126039,126186,126298,126503,126804,127361,128018,129949,131547,132196,133690,135121,136356,138050,139802,142212,142328,143263,143474,144359,145594,145822,145835,146990,149402,151770,155091,157568,159212,160989,163002,166054,168234,170761,172955],{"id":188,"title":189,"body":190,"description":169,"extension":179,"meta":5297,"navigation":181,"path":5298,"seo":5299,"stem":5300,"__hash__":5301},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":191,"toc":5269},[192,195,199,202,206,219,223,228,231,234,237,240,243,277,281,284,287,290,293,346,350,369,371,385,388,396,399,1262,1269,1286,1290,1381,1385,1391,1480,1484,1522,1526,1590,1594,1598,1605,1616,1620,1625,1629,1634,1638,1643,1647,1651,1656,1926,1931,2069,2074,2331,2334,2342,2346,2351,2454,2457,2763,2772,2873,2876,2879,2882,2885,3145,3150,3290,3293,3472,3475,3603,3606,3758,3762,3767,3770,3781,3789,3792,3899,3903,3907,3912,3962,3967,3972,3996,4001,4054,4057,4062,4239,4244,4529,4534,4931,4935,4940,4997,5002,5010,5013,5153,5156,5265],[10,193,189],{"id":194},"_1基础入门",[14,196,198],{"id":197},"_11注释","1.1注释",[19,200,201],{},"\u002F\u002F或者\u002F* *\u002F",[14,203,205],{"id":204},"_12命名","1.2命名",[207,208,209,213,216],"ol",{},[210,211,212],"li",{},"字母数字下划线",[210,214,215],{},"开头必须是字母或_",[210,217,218],{},"不能使用关键词",[14,220,222],{"id":221},"_13数据类型","1.3数据类型",[224,225,227],"h3",{"id":226},"_131整形","1.3.1整形",[19,229,230],{},"short 短整形 2",[19,232,233],{},"int 整形 4",[19,235,236],{},"long 长整形 win4 linux32位4 linux64位8",[19,238,239],{},"long long 长长整形 8",[19,241,242],{},"利用sizeof可以求数据类型占用的内存空间大小",[244,245,249],"pre",{"className":246,"code":247,"language":248,"meta":169,"style":169},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[22,250,251,270],{"__ignoreMap":169},[252,253,256,260,264,267],"span",{"class":254,"line":255},"line",1,[252,257,259],{"class":258},"szBVR","sizeof",[252,261,263],{"class":262},"sVt8B","(",[252,265,266],{"class":258},"int",[252,268,269],{"class":262},")\n",[252,271,272,274],{"class":254,"line":170},[252,273,259],{"class":258},[252,275,276],{"class":262},"(num)\n",[224,278,280],{"id":279},"_132浮点型","1.3.2浮点型",[19,282,283],{},"float 单精度 4节 7位有效数字",[19,285,286],{},"double 双精度 8节 15-16有效数字",[19,288,289],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,291,292],{},"注意点：",[244,294,296],{"className":246,"code":295,"language":248,"meta":169,"style":169},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[22,297,298,323],{"__ignoreMap":169},[252,299,300,303,306,309,313,316,319],{"class":254,"line":255},[252,301,302],{"class":258},"float",[252,304,305],{"class":262}," f1",[252,307,308],{"class":258},"=",[252,310,312],{"class":311},"sj4cs","3.14",[252,314,315],{"class":258},"f",[252,317,318],{"class":262},";",[252,320,322],{"class":321},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[252,324,325,327,330,332,335,338,341,343],{"class":254,"line":170},[252,326,302],{"class":258},[252,328,329],{"class":262}," f2",[252,331,308],{"class":258},[252,333,334],{"class":311},"3",[252,336,337],{"class":258},"e",[252,339,340],{"class":311},"2",[252,342,318],{"class":262},[252,344,345],{"class":321}," \u002F\u002F科学记数法\n",[224,347,349],{"id":348},"_133字符型","1.3.3字符型",[244,351,353],{"className":246,"code":352,"language":248,"meta":169,"style":169},"char ch='a'\n",[22,354,355],{"__ignoreMap":169},[252,356,357,360,363,365],{"class":254,"line":255},[252,358,359],{"class":258},"char",[252,361,362],{"class":262}," ch",[252,364,308],{"class":258},[252,366,368],{"class":367},"sZZnC","'a'\n",[19,370,292],{},[207,372,373,376,379,382],{},[210,374,375],{},"在显示字符型变量时，只能单引号，双引号x",[210,377,378],{},"单引号内只能一个字符，不能字符串",[210,380,381],{},"c和c++字符型变量只占用一个字符",[210,383,384],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,386,387],{},"ASCII码大致由以下两部分组成：",[207,389,390,393],{},[210,391,392],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[210,394,395],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,397,398],{},"ASCII码表格：",[400,401,402,446],"table",{},[403,404,405],"thead",{},[406,407,408,416,421,425,430,434,438,442],"tr",{},[409,410,411,415],"th",{},[412,413,414],"strong",{},"ASCII","值",[409,417,418],{},[412,419,420],{},"控制字符",[409,422,423,415],{},[412,424,414],{},[409,426,427],{},[412,428,429],{},"字符",[409,431,432,415],{},[412,433,414],{},[409,435,436],{},[412,437,429],{},[409,439,440,415],{},[412,441,414],{},[409,443,444],{},[412,445,429],{},[447,448,449,476,502,527,552,578,603,628,654,679,705,731,757,782,808,834,860,884,909,934,959,984,1009,1034,1059,1084,1109,1135,1160,1185,1210,1236],"tbody",{},[406,450,451,455,458,461,464,467,470,473],{},[452,453,454],"td",{},"0",[452,456,457],{},"NUT",[452,459,460],{},"32",[452,462,463],{},"(space)",[452,465,466],{},"64",[452,468,469],{},"@",[452,471,472],{},"96",[452,474,475],{},"、",[406,477,478,481,484,487,490,493,496,499],{},[452,479,480],{},"1",[452,482,483],{},"SOH",[452,485,486],{},"33",[452,488,489],{},"!",[452,491,492],{},"65",[452,494,495],{},"A",[452,497,498],{},"97",[452,500,501],{},"a",[406,503,504,506,509,512,515,518,521,524],{},[452,505,340],{},[452,507,508],{},"STX",[452,510,511],{},"34",[452,513,514],{},"\"",[452,516,517],{},"66",[452,519,520],{},"B",[452,522,523],{},"98",[452,525,526],{},"b",[406,528,529,531,534,537,540,543,546,549],{},[452,530,334],{},[452,532,533],{},"ETX",[452,535,536],{},"35",[452,538,539],{},"#",[452,541,542],{},"67",[452,544,545],{},"C",[452,547,548],{},"99",[452,550,551],{},"c",[406,553,554,557,560,563,566,569,572,575],{},[452,555,556],{},"4",[452,558,559],{},"EOT",[452,561,562],{},"36",[452,564,565],{},"$",[452,567,568],{},"68",[452,570,571],{},"D",[452,573,574],{},"100",[452,576,577],{},"d",[406,579,580,583,586,589,592,595,598,601],{},[452,581,582],{},"5",[452,584,585],{},"ENQ",[452,587,588],{},"37",[452,590,591],{},"%",[452,593,594],{},"69",[452,596,597],{},"E",[452,599,600],{},"101",[452,602,337],{},[406,604,605,608,611,614,617,620,623,626],{},[452,606,607],{},"6",[452,609,610],{},"ACK",[452,612,613],{},"38",[452,615,616],{},"&",[452,618,619],{},"70",[452,621,622],{},"F",[452,624,625],{},"102",[452,627,315],{},[406,629,630,633,636,639,642,645,648,651],{},[452,631,632],{},"7",[452,634,635],{},"BEL",[452,637,638],{},"39",[452,640,641],{},",",[452,643,644],{},"71",[452,646,647],{},"G",[452,649,650],{},"103",[452,652,653],{},"g",[406,655,656,659,662,665,667,670,673,676],{},[452,657,658],{},"8",[452,660,661],{},"BS",[452,663,664],{},"40",[452,666,263],{},[452,668,669],{},"72",[452,671,672],{},"H",[452,674,675],{},"104",[452,677,678],{},"h",[406,680,681,684,687,690,693,696,699,702],{},[452,682,683],{},"9",[452,685,686],{},"HT",[452,688,689],{},"41",[452,691,692],{},")",[452,694,695],{},"73",[452,697,698],{},"I",[452,700,701],{},"105",[452,703,704],{},"i",[406,706,707,710,713,716,719,722,725,728],{},[452,708,709],{},"10",[452,711,712],{},"LF",[452,714,715],{},"42",[452,717,718],{},"*",[452,720,721],{},"74",[452,723,724],{},"J",[452,726,727],{},"106",[452,729,730],{},"j",[406,732,733,736,739,742,745,748,751,754],{},[452,734,735],{},"11",[452,737,738],{},"VT",[452,740,741],{},"43",[452,743,744],{},"+",[452,746,747],{},"75",[452,749,750],{},"K",[452,752,753],{},"107",[452,755,756],{},"k",[406,758,759,762,765,768,770,773,776,779],{},[452,760,761],{},"12",[452,763,764],{},"FF",[452,766,767],{},"44",[452,769,641],{},[452,771,772],{},"76",[452,774,775],{},"L",[452,777,778],{},"108",[452,780,781],{},"l",[406,783,784,787,790,793,796,799,802,805],{},[452,785,786],{},"13",[452,788,789],{},"CR",[452,791,792],{},"45",[452,794,795],{},"-",[452,797,798],{},"77",[452,800,801],{},"M",[452,803,804],{},"109",[452,806,807],{},"m",[406,809,810,813,816,819,822,825,828,831],{},[452,811,812],{},"14",[452,814,815],{},"SO",[452,817,818],{},"46",[452,820,821],{},".",[452,823,824],{},"78",[452,826,827],{},"N",[452,829,830],{},"110",[452,832,833],{},"n",[406,835,836,839,842,845,848,851,854,857],{},[452,837,838],{},"15",[452,840,841],{},"SI",[452,843,844],{},"47",[452,846,847],{},"\u002F",[452,849,850],{},"79",[452,852,853],{},"O",[452,855,856],{},"111",[452,858,859],{},"o",[406,861,862,865,868,871,873,876,879,882],{},[452,863,864],{},"16",[452,866,867],{},"DLE",[452,869,870],{},"48",[452,872,454],{},[452,874,875],{},"80",[452,877,878],{},"P",[452,880,881],{},"112",[452,883,19],{},[406,885,886,889,892,895,897,900,903,906],{},[452,887,888],{},"17",[452,890,891],{},"DCI",[452,893,894],{},"49",[452,896,480],{},[452,898,899],{},"81",[452,901,902],{},"Q",[452,904,905],{},"113",[452,907,908],{},"q",[406,910,911,914,917,920,922,925,928,931],{},[452,912,913],{},"18",[452,915,916],{},"DC2",[452,918,919],{},"50",[452,921,340],{},[452,923,924],{},"82",[452,926,927],{},"R",[452,929,930],{},"114",[452,932,933],{},"r",[406,935,936,939,942,945,947,950,953,956],{},[452,937,938],{},"19",[452,940,941],{},"DC3",[452,943,944],{},"51",[452,946,334],{},[452,948,949],{},"83",[452,951,952],{},"S",[452,954,955],{},"115",[452,957,958],{},"s",[406,960,961,964,967,970,972,975,978,981],{},[452,962,963],{},"20",[452,965,966],{},"DC4",[452,968,969],{},"52",[452,971,556],{},[452,973,974],{},"84",[452,976,977],{},"T",[452,979,980],{},"116",[452,982,983],{},"t",[406,985,986,989,992,995,997,1000,1003,1006],{},[452,987,988],{},"21",[452,990,991],{},"NAK",[452,993,994],{},"53",[452,996,582],{},[452,998,999],{},"85",[452,1001,1002],{},"U",[452,1004,1005],{},"117",[452,1007,1008],{},"u",[406,1010,1011,1014,1017,1020,1022,1025,1028,1031],{},[452,1012,1013],{},"22",[452,1015,1016],{},"SYN",[452,1018,1019],{},"54",[452,1021,607],{},[452,1023,1024],{},"86",[452,1026,1027],{},"V",[452,1029,1030],{},"118",[452,1032,1033],{},"v",[406,1035,1036,1039,1042,1045,1047,1050,1053,1056],{},[452,1037,1038],{},"23",[452,1040,1041],{},"TB",[452,1043,1044],{},"55",[452,1046,632],{},[452,1048,1049],{},"87",[452,1051,1052],{},"W",[452,1054,1055],{},"119",[452,1057,1058],{},"w",[406,1060,1061,1064,1067,1070,1072,1075,1078,1081],{},[452,1062,1063],{},"24",[452,1065,1066],{},"CAN",[452,1068,1069],{},"56",[452,1071,658],{},[452,1073,1074],{},"88",[452,1076,1077],{},"X",[452,1079,1080],{},"120",[452,1082,1083],{},"x",[406,1085,1086,1089,1092,1095,1097,1100,1103,1106],{},[452,1087,1088],{},"25",[452,1090,1091],{},"EM",[452,1093,1094],{},"57",[452,1096,683],{},[452,1098,1099],{},"89",[452,1101,1102],{},"Y",[452,1104,1105],{},"121",[452,1107,1108],{},"y",[406,1110,1111,1114,1117,1120,1123,1126,1129,1132],{},[452,1112,1113],{},"26",[452,1115,1116],{},"SUB",[452,1118,1119],{},"58",[452,1121,1122],{},":",[452,1124,1125],{},"90",[452,1127,1128],{},"Z",[452,1130,1131],{},"122",[452,1133,1134],{},"z",[406,1136,1137,1140,1143,1146,1148,1151,1154,1157],{},[452,1138,1139],{},"27",[452,1141,1142],{},"ESC",[452,1144,1145],{},"59",[452,1147,318],{},[452,1149,1150],{},"91",[452,1152,1153],{},"[",[452,1155,1156],{},"123",[452,1158,1159],{},"{",[406,1161,1162,1165,1168,1171,1174,1177,1179,1182],{},[452,1163,1164],{},"28",[452,1166,1167],{},"FS",[452,1169,1170],{},"60",[452,1172,1173],{},"\u003C",[452,1175,1176],{},"92",[452,1178,847],{},[452,1180,1181],{},"124",[452,1183,1184],{},"|",[406,1186,1187,1190,1193,1196,1198,1201,1204,1207],{},[452,1188,1189],{},"29",[452,1191,1192],{},"GS",[452,1194,1195],{},"61",[452,1197,308],{},[452,1199,1200],{},"93",[452,1202,1203],{},"]",[452,1205,1206],{},"125",[452,1208,1209],{},"}",[406,1211,1212,1215,1218,1221,1224,1227,1230,1233],{},[452,1213,1214],{},"30",[452,1216,1217],{},"RS",[452,1219,1220],{},"62",[452,1222,1223],{},">",[452,1225,1226],{},"94",[452,1228,1229],{},"^",[452,1231,1232],{},"126",[452,1234,1235],{},"`",[406,1237,1238,1241,1244,1247,1250,1253,1256,1259],{},[452,1239,1240],{},"31",[452,1242,1243],{},"US",[452,1245,1246],{},"63",[452,1248,1249],{},"?",[452,1251,1252],{},"95",[452,1254,1255],{},"_",[452,1257,1258],{},"127",[452,1260,1261],{},"DEL",[19,1263,1264,1265,1268],{},"ASCII 码大致由以下",[412,1266,1267],{},"两部分组","成：",[1270,1271,1272,1279],"ul",{},[210,1273,1274,1275,1278],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[412,1276,1277],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[210,1280,1281,1282,1285],{},"ASCII 打印字符：数字 ",[412,1283,1284],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[224,1287,1289],{"id":1288},"_134转义字符","1.3.4转义字符",[244,1291,1293],{"className":246,"code":1292,"language":248,"meta":169,"style":169},"\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",[22,1294,1295,1300,1316,1331,1337,1351,1357],{"__ignoreMap":169},[252,1296,1297],{"class":254,"line":255},[252,1298,1299],{"class":321},"\u002F\u002F换行符\n",[252,1301,1302,1305,1308,1311,1313],{"class":254,"line":170},[252,1303,1304],{"class":262},"cout ",[252,1306,1307],{"class":258},"\u003C\u003C",[252,1309,1310],{"class":367},"\"hello world\u002Fn\"",[252,1312,318],{"class":262},[252,1314,1315],{"class":321}," \u002F\u002F就等同于如下：\n",[252,1317,1319,1321,1323,1326,1328],{"class":254,"line":1318},3,[252,1320,1304],{"class":262},[252,1322,1307],{"class":258},[252,1324,1325],{"class":367},"\"hello world\"",[252,1327,1307],{"class":258},[252,1329,1330],{"class":262},"endl;\n",[252,1332,1334],{"class":254,"line":1333},4,[252,1335,1336],{"class":321},"\u002F\u002F反斜杠\n",[252,1338,1340,1342,1344,1347,1349],{"class":254,"line":1339},5,[252,1341,1304],{"class":262},[252,1343,1307],{"class":258},[252,1345,1346],{"class":367},"\"\u002F\u002F\"",[252,1348,1307],{"class":258},[252,1350,1330],{"class":262},[252,1352,1354],{"class":254,"line":1353},6,[252,1355,1356],{"class":321},"\u002F\u002F水平制表符\n",[252,1358,1360,1362,1364,1367,1370,1373,1375,1378],{"class":254,"line":1359},7,[252,1361,1304],{"class":262},[252,1363,1307],{"class":258},[252,1365,1366],{"class":367},"\"aaaa",[252,1368,1369],{"class":311},"\\t",[252,1371,1372],{"class":367},"helloworld\"",[252,1374,1307],{"class":258},[252,1376,1377],{"class":262},"endl;",[252,1379,1380],{"class":321}," \u002F\u002F输出窗口时有对齐效果\n",[224,1382,1384],{"id":1383},"_135字符串型","1.3.5字符串型",[19,1386,1387,1388,1390],{},"char 变量名",[252,1389],{},"=\"字符串值\"",[244,1392,1394],{"className":246,"code":1393,"language":248,"meta":169,"style":169},"\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",[22,1395,1396,1401,1406,1411,1416,1430,1443,1448,1454,1466],{"__ignoreMap":169},[252,1397,1398],{"class":254,"line":255},[252,1399,1400],{"class":321},"\u002F\u002Fc风格字符串\n",[252,1402,1403],{"class":254,"line":170},[252,1404,1405],{"class":321},"\u002F\u002F注意事项：\n",[252,1407,1408],{"class":254,"line":1318},[252,1409,1410],{"class":321},"\u002F\u002F1.char字符串名[]\n",[252,1412,1413],{"class":254,"line":1333},[252,1414,1415],{"class":321},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[252,1417,1418,1420,1423,1425,1427],{"class":254,"line":1339},[252,1419,359],{"class":258},[252,1421,1422],{"class":262}," str[]",[252,1424,308],{"class":258},[252,1426,1325],{"class":367},[252,1428,1429],{"class":262},";\n",[252,1431,1432,1434,1436,1439,1441],{"class":254,"line":1353},[252,1433,1304],{"class":262},[252,1435,1307],{"class":258},[252,1437,1438],{"class":262},"str",[252,1440,1307],{"class":258},[252,1442,1330],{"class":262},[252,1444,1445],{"class":254,"line":1359},[252,1446,1447],{"class":321},"\u002F\u002Fc++风格字符串\n",[252,1449,1451],{"class":254,"line":1450},8,[252,1452,1453],{"class":321},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[252,1455,1457,1460,1462,1464],{"class":254,"line":1456},9,[252,1458,1459],{"class":262},"string str2",[252,1461,308],{"class":258},[252,1463,1325],{"class":367},[252,1465,1429],{"class":262},[252,1467,1469,1471,1473,1476,1478],{"class":254,"line":1468},10,[252,1470,1304],{"class":262},[252,1472,1307],{"class":258},[252,1474,1475],{"class":262},"str2",[252,1477,1307],{"class":258},[252,1479,1330],{"class":262},[224,1481,1483],{"id":1482},"_136布尔类型bool","1.3.6布尔类型bool",[244,1485,1487],{"className":246,"code":1486,"language":248,"meta":169,"style":169},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[22,1488,1489,1504],{"__ignoreMap":169},[252,1490,1491,1494,1497,1499,1502],{"class":254,"line":255},[252,1492,1493],{"class":258},"bool",[252,1495,1496],{"class":262}," flag",[252,1498,308],{"class":258},[252,1500,1501],{"class":311},"true",[252,1503,1429],{"class":262},[252,1505,1506,1509,1512,1515,1517,1519],{"class":254,"line":170},[252,1507,1508],{"class":262},"cout",[252,1510,1511],{"class":258},"\u003C\u003Csizeof",[252,1513,1514],{"class":262},"(flag)",[252,1516,1307],{"class":258},[252,1518,1377],{"class":262},[252,1520,1521],{"class":321}," \u002F\u002F查看布尔占内存空间\n",[14,1523,1525],{"id":1524},"_14键盘输入cin","1.4键盘输入cin",[244,1527,1529],{"className":246,"code":1528,"language":248,"meta":169,"style":169},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[22,1530,1531,1544,1561,1572],{"__ignoreMap":169},[252,1532,1533,1535,1538,1540,1542],{"class":254,"line":255},[252,1534,266],{"class":258},[252,1536,1537],{"class":262}," a",[252,1539,308],{"class":258},[252,1541,454],{"class":311},[252,1543,1429],{"class":262},[252,1545,1546,1548,1550,1553,1555,1557,1559],{"class":254,"line":170},[252,1547,1508],{"class":262},[252,1549,1307],{"class":258},[252,1551,1552],{"class":367},"\"请给整型变量a赋值\"",[252,1554,1307],{"class":258},[252,1556,501],{"class":262},[252,1558,1307],{"class":258},[252,1560,1330],{"class":262},[252,1562,1563,1566,1569],{"class":254,"line":1318},[252,1564,1565],{"class":262},"cin ",[252,1567,1568],{"class":258},">>",[252,1570,1571],{"class":262}," a;\n",[252,1573,1574,1576,1578,1581,1584,1586,1588],{"class":254,"line":1333},[252,1575,1304],{"class":262},[252,1577,1307],{"class":258},[252,1579,1580],{"class":367}," \"整型变量a=\"",[252,1582,1583],{"class":258}," \u003C\u003C",[252,1585,501],{"class":262},[252,1587,1307],{"class":258},[252,1589,1330],{"class":262},[14,1591,1593],{"id":1592},"_15运算符","1.5运算符",[224,1595,1597],{"id":1596},"_151算术运算符","1.5.1算术运算符",[19,1599,1600,1604],{},[1601,1602],"img",{"alt":169,"src":1603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[207,1606,1607,1610,1613],{},[210,1608,1609],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[210,1611,1612],{},"两个小数不可以做取模运算",[210,1614,1615],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[224,1617,1619],{"id":1618},"_152赋值运算符","1.5.2赋值运算符",[19,1621,1622],{},[1601,1623],{"alt":169,"src":1624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[224,1626,1628],{"id":1627},"_153比较运算符","1.5.3比较运算符",[19,1630,1631],{},[1601,1632],{"alt":169,"src":1633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[224,1635,1637],{"id":1636},"_154逻辑运算符","1.5.4逻辑运算符",[19,1639,1640],{},[1601,1641],{"alt":169,"src":1642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1644,1646],{"id":1645},"_16程序流程结构","1.6程序流程结构",[224,1648,1650],{"id":1649},"_161选择结构","1.6.1选择结构",[207,1652,1653],{},[210,1654,1655],{},"if语句\n单行、多行、多条件if语句",[244,1657,1659],{"className":246,"code":1658,"language":248,"meta":169,"style":169},"\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",[22,1660,1661,1666,1681,1686,1700,1705,1710,1719,1732,1736,1749,1754,1760,1765,1779,1784,1790,1811,1816,1830,1835,1864,1869,1886,1891,1896,1901,1915,1920],{"__ignoreMap":169},[252,1662,1663],{"class":254,"line":255},[252,1664,1665],{"class":321},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[252,1667,1668,1671,1674,1676,1679],{"class":254,"line":170},[252,1669,1670],{"class":258},"if",[252,1672,1673],{"class":262},"(score",[252,1675,1223],{"class":258},[252,1677,1678],{"class":311},"600",[252,1680,269],{"class":262},[252,1682,1683],{"class":254,"line":1318},[252,1684,1685],{"class":262},"{\n",[252,1687,1688,1691,1693,1696,1698],{"class":254,"line":1333},[252,1689,1690],{"class":262},"    cout",[252,1692,1307],{"class":258},[252,1694,1695],{"class":367},"'这是单行if语句'",[252,1697,1307],{"class":258},[252,1699,1330],{"class":262},[252,1701,1702],{"class":254,"line":1339},[252,1703,1704],{"class":262},"}\n",[252,1706,1707],{"class":254,"line":1353},[252,1708,1709],{"class":321},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[252,1711,1712,1714,1716],{"class":254,"line":1359},[252,1713,1565],{"class":262},[252,1715,1568],{"class":258},[252,1717,1718],{"class":262}," score\n",[252,1720,1721,1723,1725,1728,1730],{"class":254,"line":1450},[252,1722,1670],{"class":258},[252,1724,1673],{"class":262},[252,1726,1727],{"class":258},"\u003C=",[252,1729,1678],{"class":311},[252,1731,269],{"class":262},[252,1733,1734],{"class":254,"line":1456},[252,1735,1685],{"class":262},[252,1737,1738,1740,1742,1745,1747],{"class":254,"line":1468},[252,1739,1690],{"class":262},[252,1741,1568],{"class":258},[252,1743,1744],{"class":367},"\"小于等于600\"",[252,1746,1307],{"class":258},[252,1748,1330],{"class":262},[252,1750,1752],{"class":254,"line":1751},11,[252,1753,1704],{"class":262},[252,1755,1757],{"class":254,"line":1756},12,[252,1758,1759],{"class":258},"else\n",[252,1761,1763],{"class":254,"line":1762},13,[252,1764,1685],{"class":262},[252,1766,1768,1770,1772,1775,1777],{"class":254,"line":1767},14,[252,1769,1690],{"class":262},[252,1771,1568],{"class":258},[252,1773,1774],{"class":367},"\"大于600\"",[252,1776,1568],{"class":258},[252,1778,1330],{"class":262},[252,1780,1782],{"class":254,"line":1781},15,[252,1783,1704],{"class":262},[252,1785,1787],{"class":254,"line":1786},16,[252,1788,1789],{"class":321},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[252,1791,1793,1795,1798,1800,1802,1805,1807,1809],{"class":254,"line":1792},17,[252,1794,1670],{"class":258},[252,1796,1797],{"class":262}," (",[252,1799,454],{"class":311},[252,1801,1173],{"class":258},[252,1803,1804],{"class":262},"num",[252,1806,1173],{"class":258},[252,1808,574],{"class":311},[252,1810,269],{"class":262},[252,1812,1814],{"class":254,"line":1813},18,[252,1815,1685],{"class":262},[252,1817,1819,1821,1823,1826,1828],{"class":254,"line":1818},19,[252,1820,1690],{"class":262},[252,1822,1307],{"class":258},[252,1824,1825],{"class":367},"\"小于100\"",[252,1827,1307],{"class":258},[252,1829,1330],{"class":262},[252,1831,1833],{"class":254,"line":1832},20,[252,1834,1704],{"class":262},[252,1836,1838,1841,1844,1847,1850,1852,1855,1857,1859,1862],{"class":254,"line":1837},21,[252,1839,1840],{"class":258},"else",[252,1842,1843],{"class":258}," if",[252,1845,1846],{"class":262}," (nmu",[252,1848,1849],{"class":258},">=",[252,1851,574],{"class":311},[252,1853,1854],{"class":258},"&&",[252,1856,1804],{"class":262},[252,1858,1173],{"class":258},[252,1860,1861],{"class":311},"200",[252,1863,269],{"class":262},[252,1865,1867],{"class":254,"line":1866},22,[252,1868,1685],{"class":262},[252,1870,1872,1874,1876,1879,1881,1883],{"class":254,"line":1871},23,[252,1873,1690],{"class":262},[252,1875,1307],{"class":258},[252,1877,1878],{"class":367},"\"不小于100且小于200\"",[252,1880,1307],{"class":258},[252,1882,1377],{"class":262},[252,1884,1885],{"class":321}," \u002F\u002F可以无限else if,python中是elif：\n",[252,1887,1889],{"class":254,"line":1888},24,[252,1890,1704],{"class":262},[252,1892,1894],{"class":254,"line":1893},25,[252,1895,1759],{"class":258},[252,1897,1899],{"class":254,"line":1898},26,[252,1900,1685],{"class":262},[252,1902,1904,1906,1908,1911,1913],{"class":254,"line":1903},27,[252,1905,1690],{"class":262},[252,1907,1307],{"class":258},[252,1909,1910],{"class":367},"\"不小于200\"",[252,1912,1307],{"class":258},[252,1914,1330],{"class":262},[252,1916,1918],{"class":254,"line":1917},28,[252,1919,1704],{"class":262},[252,1921,1923],{"class":254,"line":1922},29,[252,1924,1925],{"class":321},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[207,1927,1928],{"start":170},[210,1929,1930],{},"三目运算符",[244,1932,1934],{"className":246,"code":1933,"language":248,"meta":169,"style":169},"\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",[22,1935,1936,1941,1946,1972,1994,2011,2016,2039,2054],{"__ignoreMap":169},[252,1937,1938],{"class":254,"line":255},[252,1939,1940],{"class":321},"\u002F\u002F创建三个变量a,b,c\n",[252,1942,1943],{"class":254,"line":170},[252,1944,1945],{"class":321},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[252,1947,1948,1950,1952,1954,1956,1959,1961,1963,1966,1968,1970],{"class":254,"line":1318},[252,1949,266],{"class":258},[252,1951,1537],{"class":262},[252,1953,308],{"class":258},[252,1955,963],{"class":311},[252,1957,1958],{"class":262},",b",[252,1960,308],{"class":258},[252,1962,709],{"class":311},[252,1964,1965],{"class":262},",c",[252,1967,308],{"class":258},[252,1969,454],{"class":311},[252,1971,1429],{"class":262},[252,1973,1974,1976,1978,1981,1983,1985,1987,1989,1991],{"class":254,"line":1333},[252,1975,551],{"class":262},[252,1977,308],{"class":258},[252,1979,1980],{"class":262},"(a",[252,1982,1223],{"class":258},[252,1984,526],{"class":262},[252,1986,1249],{"class":258},[252,1988,501],{"class":262},[252,1990,1122],{"class":258},[252,1992,1993],{"class":262},"b)\n",[252,1995,1996,1998,2000,2003,2005,2007,2009],{"class":254,"line":1339},[252,1997,1508],{"class":262},[252,1999,1307],{"class":258},[252,2001,2002],{"class":367},"\"c=\"",[252,2004,1307],{"class":258},[252,2006,551],{"class":262},[252,2008,1307],{"class":258},[252,2010,1330],{"class":262},[252,2012,2013],{"class":254,"line":1353},[252,2014,2015],{"class":321},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[252,2017,2018,2020,2022,2024,2026,2028,2030,2033,2035,2037],{"class":254,"line":1359},[252,2019,1980],{"class":262},[252,2021,1223],{"class":258},[252,2023,526],{"class":262},[252,2025,1249],{"class":258},[252,2027,501],{"class":262},[252,2029,1122],{"class":258},[252,2031,2032],{"class":262},"b)",[252,2034,308],{"class":258},[252,2036,574],{"class":311},[252,2038,1429],{"class":262},[252,2040,2041,2043,2045,2047,2049,2051],{"class":254,"line":1450},[252,2042,1508],{"class":262},[252,2044,1307],{"class":258},[252,2046,501],{"class":262},[252,2048,1307],{"class":258},[252,2050,1377],{"class":262},[252,2052,2053],{"class":321}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[252,2055,2056,2058,2060,2062,2064,2066],{"class":254,"line":1456},[252,2057,1508],{"class":262},[252,2059,1307],{"class":258},[252,2061,526],{"class":262},[252,2063,1307],{"class":258},[252,2065,1377],{"class":262},[252,2067,2068],{"class":321}," \u002F\u002F10   a>b,b还是原值\n",[207,2070,2071],{"start":1318},[210,2072,2073],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[244,2075,2077],{"className":246,"code":2076,"language":248,"meta":169,"style":169},"\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",[22,2078,2079,2084,2092,2106,2116,2120,2134,2147,2157,2165,2170,2195,2216,2238,2259,2281,2302,2322,2327],{"__ignoreMap":169},[252,2080,2081],{"class":254,"line":255},[252,2082,2083],{"class":321},"\u002F\u002F案例-电影打分\n",[252,2085,2086,2089],{"class":254,"line":170},[252,2087,2088],{"class":258},"#include",[252,2090,2091],{"class":367},"\u003Ciostream>\n",[252,2093,2094,2097,2100,2104],{"class":254,"line":1318},[252,2095,2096],{"class":258},"using",[252,2098,2099],{"class":258}," namespace",[252,2101,2103],{"class":2102},"sScJk"," std",[252,2105,1429],{"class":262},[252,2107,2108,2110,2113],{"class":254,"line":1333},[252,2109,266],{"class":258},[252,2111,2112],{"class":2102}," main",[252,2114,2115],{"class":262},"()\n",[252,2117,2118],{"class":254,"line":1339},[252,2119,1685],{"class":262},[252,2121,2122,2125,2128,2130,2132],{"class":254,"line":1353},[252,2123,2124],{"class":258},"    int",[252,2126,2127],{"class":262}," score",[252,2129,308],{"class":258},[252,2131,454],{"class":311},[252,2133,1429],{"class":262},[252,2135,2136,2138,2140,2143,2145],{"class":254,"line":1359},[252,2137,1690],{"class":262},[252,2139,1307],{"class":258},[252,2141,2142],{"class":367},"\"电影打分：\"",[252,2144,1307],{"class":258},[252,2146,1330],{"class":262},[252,2148,2149,2152,2154],{"class":254,"line":1450},[252,2150,2151],{"class":262},"    cin",[252,2153,1568],{"class":258},[252,2155,2156],{"class":262},"score;\n",[252,2158,2159,2162],{"class":254,"line":1456},[252,2160,2161],{"class":258},"    switch",[252,2163,2164],{"class":262},"(score)\n",[252,2166,2167],{"class":254,"line":1468},[252,2168,2169],{"class":262},"    {\n",[252,2171,2172,2175,2178,2181,2183,2186,2188,2190,2193],{"class":254,"line":1751},[252,2173,2174],{"class":258},"        case",[252,2176,2177],{"class":311}," 10",[252,2179,2180],{"class":262},":cout",[252,2182,1307],{"class":258},[252,2184,2185],{"class":367},"\"经典\"",[252,2187,1307],{"class":258},[252,2189,1377],{"class":262},[252,2191,2192],{"class":258},"break",[252,2194,1429],{"class":262},[252,2196,2197,2199,2202,2204,2206,2208,2210,2212,2214],{"class":254,"line":1756},[252,2198,2174],{"class":258},[252,2200,2201],{"class":311}," 9",[252,2203,2180],{"class":262},[252,2205,1307],{"class":258},[252,2207,2185],{"class":367},[252,2209,1307],{"class":258},[252,2211,1377],{"class":262},[252,2213,2192],{"class":258},[252,2215,1429],{"class":262},[252,2217,2218,2220,2223,2225,2227,2230,2232,2234,2236],{"class":254,"line":1762},[252,2219,2174],{"class":258},[252,2221,2222],{"class":311}," 8",[252,2224,2180],{"class":262},[252,2226,1307],{"class":258},[252,2228,2229],{"class":367},"\"非常好\"",[252,2231,1307],{"class":258},[252,2233,1377],{"class":262},[252,2235,2192],{"class":258},[252,2237,1429],{"class":262},[252,2239,2240,2242,2245,2247,2249,2251,2253,2255,2257],{"class":254,"line":1767},[252,2241,2174],{"class":258},[252,2243,2244],{"class":311}," 7",[252,2246,2180],{"class":262},[252,2248,1307],{"class":258},[252,2250,2229],{"class":367},[252,2252,1307],{"class":258},[252,2254,1377],{"class":262},[252,2256,2192],{"class":258},[252,2258,1429],{"class":262},[252,2260,2261,2263,2266,2268,2270,2273,2275,2277,2279],{"class":254,"line":1781},[252,2262,2174],{"class":258},[252,2264,2265],{"class":311}," 6",[252,2267,2180],{"class":262},[252,2269,1307],{"class":258},[252,2271,2272],{"class":367},"\"一般\"",[252,2274,1307],{"class":258},[252,2276,1377],{"class":262},[252,2278,2192],{"class":258},[252,2280,1429],{"class":262},[252,2282,2283,2285,2288,2290,2292,2294,2296,2298,2300],{"class":254,"line":1786},[252,2284,2174],{"class":258},[252,2286,2287],{"class":311}," 5",[252,2289,2180],{"class":262},[252,2291,1307],{"class":258},[252,2293,2272],{"class":367},[252,2295,1307],{"class":258},[252,2297,1377],{"class":262},[252,2299,2192],{"class":258},[252,2301,1429],{"class":262},[252,2303,2304,2307,2309,2311,2314,2316,2318,2320],{"class":254,"line":1792},[252,2305,2306],{"class":258},"        default",[252,2308,2180],{"class":262},[252,2310,1307],{"class":258},[252,2312,2313],{"class":367},"\"烂片\"",[252,2315,1307],{"class":258},[252,2317,1377],{"class":262},[252,2319,2192],{"class":258},[252,2321,1429],{"class":262},[252,2323,2324],{"class":254,"line":1813},[252,2325,2326],{"class":262},"    }\n",[252,2328,2329],{"class":254,"line":1818},[252,2330,1704],{"class":262},[19,2332,2333],{},"if和switch区别：",[1270,2335,2336,2339],{},[210,2337,2338],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[210,2340,2341],{},"switch优点：结构清晰，执行效率高",[224,2343,2345],{"id":2344},"_162循环结构","1.6.2循环结构",[207,2347,2348],{},[210,2349,2350],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[244,2352,2354],{"className":246,"code":2353,"language":248,"meta":169,"style":169},"\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",[22,2355,2356,2361,2369,2373,2386,2400,2404,2424,2434,2438,2450],{"__ignoreMap":169},[252,2357,2358],{"class":254,"line":255},[252,2359,2360],{"class":321},"\u002F\u002F打印0-9数字\n",[252,2362,2363,2365,2367],{"class":254,"line":170},[252,2364,266],{"class":258},[252,2366,2112],{"class":2102},[252,2368,2115],{"class":262},[252,2370,2371],{"class":254,"line":1318},[252,2372,1685],{"class":262},[252,2374,2375,2377,2380,2382,2384],{"class":254,"line":1333},[252,2376,2124],{"class":258},[252,2378,2379],{"class":262}," num",[252,2381,308],{"class":258},[252,2383,454],{"class":311},[252,2385,1429],{"class":262},[252,2387,2388,2391,2394,2396,2398],{"class":254,"line":1339},[252,2389,2390],{"class":258},"    while",[252,2392,2393],{"class":262},"(num",[252,2395,1173],{"class":258},[252,2397,709],{"class":311},[252,2399,269],{"class":262},[252,2401,2402],{"class":254,"line":1353},[252,2403,2169],{"class":262},[252,2405,2406,2409,2412,2414,2416,2418,2421],{"class":254,"line":1359},[252,2407,2408],{"class":2102},"       std",[252,2410,2411],{"class":262},"::cout",[252,2413,1307],{"class":258},[252,2415,1804],{"class":262},[252,2417,1307],{"class":258},[252,2419,2420],{"class":2102},"std",[252,2422,2423],{"class":262},"::endl;\n",[252,2425,2426,2429,2432],{"class":254,"line":1450},[252,2427,2428],{"class":262},"        num",[252,2430,2431],{"class":258},"++",[252,2433,1429],{"class":262},[252,2435,2436],{"class":254,"line":1456},[252,2437,2326],{"class":262},[252,2439,2440,2443,2445,2448],{"class":254,"line":1468},[252,2441,2442],{"class":2102},"    system",[252,2444,263],{"class":262},[252,2446,2447],{"class":367},"\"pause\"",[252,2449,269],{"class":262},[252,2451,2452],{"class":254,"line":1751},[252,2453,1704],{"class":262},[19,2455,2456],{},"注意：写好循环条件，避免死循环情况",[244,2458,2460],{"className":246,"code":2459,"language":248,"meta":169,"style":169},"\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",[22,2461,2462,2467,2474,2481,2491,2499,2503,2508,2535,2540,2545,2553,2580,2585,2590,2603,2613,2617,2627,2632,2645,2650,2664,2669,2684,2688,2701,2705,2710,2714,2728,2736,2741,2747,2753,2758],{"__ignoreMap":169},[252,2463,2464],{"class":254,"line":255},[252,2465,2466],{"class":321},"\u002F\u002F循环结构-猜数字\n",[252,2468,2469,2471],{"class":254,"line":170},[252,2470,2088],{"class":258},[252,2472,2473],{"class":367}," \u003Ciostream>\n",[252,2475,2476,2478],{"class":254,"line":1318},[252,2477,2088],{"class":258},[252,2479,2480],{"class":367}," \u003Cctime>\n",[252,2482,2483,2485,2487,2489],{"class":254,"line":1333},[252,2484,2096],{"class":258},[252,2486,2099],{"class":258},[252,2488,2103],{"class":2102},[252,2490,1429],{"class":262},[252,2492,2493,2495,2497],{"class":254,"line":1339},[252,2494,266],{"class":258},[252,2496,2112],{"class":2102},[252,2498,2115],{"class":262},[252,2500,2501],{"class":254,"line":1353},[252,2502,1685],{"class":262},[252,2504,2505],{"class":254,"line":1359},[252,2506,2507],{"class":321},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[252,2509,2510,2513,2516,2519,2522,2524,2527,2529,2532],{"class":254,"line":1450},[252,2511,2512],{"class":2102},"    srand",[252,2514,2515],{"class":262},"((",[252,2517,2518],{"class":258},"unsigned",[252,2520,2521],{"class":258}," int",[252,2523,692],{"class":262},[252,2525,2526],{"class":2102},"time",[252,2528,263],{"class":262},[252,2530,2531],{"class":311},"NULL",[252,2533,2534],{"class":262},"));\n",[252,2536,2537],{"class":254,"line":1456},[252,2538,2539],{"emptyLinePlaceholder":181},"\n",[252,2541,2542],{"class":254,"line":1468},[252,2543,2544],{"class":321},"    \u002F\u002F1.系统生成随机数\n",[252,2546,2547,2550],{"class":254,"line":1751},[252,2548,2549],{"class":321},"    \u002F\u002Frand()%100",[252,2551,2552],{"class":321}," \u002F\u002F生成0-99的随机数\n",[252,2554,2555,2557,2559,2561,2564,2567,2569,2571,2573,2575,2577],{"class":254,"line":1756},[252,2556,2124],{"class":258},[252,2558,2379],{"class":262},[252,2560,308],{"class":258},[252,2562,2563],{"class":2102},"rand",[252,2565,2566],{"class":262},"()",[252,2568,591],{"class":258},[252,2570,574],{"class":311},[252,2572,744],{"class":258},[252,2574,480],{"class":311},[252,2576,318],{"class":262},[252,2578,2579],{"class":321}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[252,2581,2582],{"class":254,"line":1762},[252,2583,2584],{"class":321},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[252,2586,2587],{"class":254,"line":1767},[252,2588,2589],{"class":321},"    \u002F\u002F2.玩家猜测\n",[252,2591,2592,2594,2597,2599,2601],{"class":254,"line":1781},[252,2593,2124],{"class":258},[252,2595,2596],{"class":262}," val",[252,2598,308],{"class":258},[252,2600,454],{"class":311},[252,2602,1429],{"class":262},[252,2604,2605,2607,2609,2611],{"class":254,"line":1786},[252,2606,2390],{"class":258},[252,2608,1797],{"class":262},[252,2610,480],{"class":311},[252,2612,269],{"class":262},[252,2614,2615],{"class":254,"line":1792},[252,2616,2169],{"class":262},[252,2618,2619,2622,2624],{"class":254,"line":1813},[252,2620,2621],{"class":262},"        cin",[252,2623,1568],{"class":258},[252,2625,2626],{"class":262},"val;\n",[252,2628,2629],{"class":254,"line":1818},[252,2630,2631],{"class":321},"        \u002F\u002F3.判断玩家猜测\n",[252,2633,2634,2637,2640,2642],{"class":254,"line":1832},[252,2635,2636],{"class":258},"        if",[252,2638,2639],{"class":262},"(val",[252,2641,1173],{"class":258},[252,2643,2644],{"class":262},"num) \n",[252,2646,2647],{"class":254,"line":1837},[252,2648,2649],{"class":262},"        {\n",[252,2651,2652,2655,2657,2660,2662],{"class":254,"line":1866},[252,2653,2654],{"class":262},"            cout",[252,2656,1307],{"class":258},[252,2658,2659],{"class":367},"\"猜小了！\"",[252,2661,1307],{"class":258},[252,2663,1330],{"class":262},[252,2665,2666],{"class":254,"line":1871},[252,2667,2668],{"class":262},"        }\n",[252,2670,2671,2674,2676,2679,2681],{"class":254,"line":1888},[252,2672,2673],{"class":258},"        else",[252,2675,1843],{"class":258},[252,2677,2678],{"class":262}," (val",[252,2680,1223],{"class":258},[252,2682,2683],{"class":262},"num)\n",[252,2685,2686],{"class":254,"line":1893},[252,2687,2649],{"class":262},[252,2689,2690,2692,2694,2697,2699],{"class":254,"line":1898},[252,2691,2654],{"class":262},[252,2693,1307],{"class":258},[252,2695,2696],{"class":367},"\"猜大了！\"",[252,2698,1307],{"class":258},[252,2700,1330],{"class":262},[252,2702,2703],{"class":254,"line":1903},[252,2704,2668],{"class":262},[252,2706,2707],{"class":254,"line":1917},[252,2708,2709],{"class":258},"        else\n",[252,2711,2712],{"class":254,"line":1922},[252,2713,2649],{"class":262},[252,2715,2717,2719,2721,2724,2726],{"class":254,"line":2716},30,[252,2718,2654],{"class":262},[252,2720,1307],{"class":258},[252,2722,2723],{"class":367},"\"猜对了！\"",[252,2725,1307],{"class":258},[252,2727,1330],{"class":262},[252,2729,2731,2734],{"class":254,"line":2730},31,[252,2732,2733],{"class":258},"            break",[252,2735,1429],{"class":262},[252,2737,2739],{"class":254,"line":2738},32,[252,2740,2668],{"class":262},[252,2742,2744],{"class":254,"line":2743},33,[252,2745,2746],{"class":321},"        \u002F\u002F猜对 退出游戏\n",[252,2748,2750],{"class":254,"line":2749},34,[252,2751,2752],{"class":321},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[252,2754,2756],{"class":254,"line":2755},35,[252,2757,2326],{"class":262},[252,2759,2761],{"class":254,"line":2760},36,[252,2762,1704],{"class":262},[207,2764,2765],{"start":170},[210,2766,2767,2768,2771],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[412,2769,2770],{},"do...while会先执行一次循环语句","，在判断循环语句",[244,2773,2775],{"className":246,"code":2774,"language":248,"meta":169,"style":169},"\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",[22,2776,2777,2782,2790,2794,2806,2814,2818,2835,2842,2846,2859,2869],{"__ignoreMap":169},[252,2778,2779],{"class":254,"line":255},[252,2780,2781],{"class":321},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[252,2783,2784,2786,2788],{"class":254,"line":170},[252,2785,266],{"class":258},[252,2787,2112],{"class":2102},[252,2789,2115],{"class":262},[252,2791,2792],{"class":254,"line":1318},[252,2793,1685],{"class":262},[252,2795,2796,2798,2800,2802,2804],{"class":254,"line":1333},[252,2797,2124],{"class":258},[252,2799,2379],{"class":262},[252,2801,308],{"class":258},[252,2803,454],{"class":311},[252,2805,1429],{"class":262},[252,2807,2808,2811],{"class":254,"line":1339},[252,2809,2810],{"class":258},"    do",[252,2812,2813],{"class":262}," \n",[252,2815,2816],{"class":254,"line":1353},[252,2817,2169],{"class":262},[252,2819,2820,2823,2825,2827,2829,2831,2833],{"class":254,"line":1359},[252,2821,2822],{"class":2102},"        std",[252,2824,2411],{"class":262},[252,2826,1307],{"class":258},[252,2828,1804],{"class":262},[252,2830,1307],{"class":258},[252,2832,2420],{"class":2102},[252,2834,2423],{"class":262},[252,2836,2837,2839],{"class":254,"line":1450},[252,2838,2428],{"class":262},[252,2840,2841],{"class":258},"++\n",[252,2843,2844],{"class":254,"line":1456},[252,2845,2326],{"class":262},[252,2847,2848,2850,2852,2854,2856],{"class":254,"line":1468},[252,2849,2390],{"class":258},[252,2851,2393],{"class":262},[252,2853,1173],{"class":258},[252,2855,709],{"class":311},[252,2857,2858],{"class":262},");\n",[252,2860,2861,2863,2865,2867],{"class":254,"line":1751},[252,2862,2442],{"class":2102},[252,2864,263],{"class":262},[252,2866,2447],{"class":367},[252,2868,2858],{"class":262},[252,2870,2871],{"class":254,"line":1756},[252,2872,1704],{"class":262},[19,2874,2875],{},"案例-水仙花数",[19,2877,2878],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,2880,2881],{},"例如：1^3+5^3+3^3=153",[19,2883,2884],{},"请用do...while语句，求出所有3位数的水仙花数",[244,2886,2888],{"className":246,"code":2887,"language":248,"meta":169,"style":169},"#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",[22,2889,2890,2896,2906,2914,2918,2923,2935,2941,2945,2950,2966,2982,2998,3013,3032,3047,3095,3099,3111,3115,3123,3127,3141],{"__ignoreMap":169},[252,2891,2892,2894],{"class":254,"line":255},[252,2893,2088],{"class":258},[252,2895,2473],{"class":367},[252,2897,2898,2900,2902,2904],{"class":254,"line":170},[252,2899,2096],{"class":258},[252,2901,2099],{"class":258},[252,2903,2103],{"class":2102},[252,2905,1429],{"class":262},[252,2907,2908,2910,2912],{"class":254,"line":1318},[252,2909,266],{"class":258},[252,2911,2112],{"class":2102},[252,2913,2115],{"class":262},[252,2915,2916],{"class":254,"line":1333},[252,2917,1685],{"class":262},[252,2919,2920],{"class":254,"line":1339},[252,2921,2922],{"class":321},"    \u002F\u002F1.先打印所有三位数字\n",[252,2924,2925,2927,2929,2931,2933],{"class":254,"line":1353},[252,2926,2124],{"class":258},[252,2928,2379],{"class":262},[252,2930,308],{"class":258},[252,2932,574],{"class":311},[252,2934,1429],{"class":262},[252,2936,2937,2939],{"class":254,"line":1359},[252,2938,2810],{"class":258},[252,2940,2813],{"class":262},[252,2942,2943],{"class":254,"line":1450},[252,2944,2169],{"class":262},[252,2946,2947],{"class":254,"line":1456},[252,2948,2949],{"class":321},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[252,2951,2952,2955,2957,2959,2961,2963],{"class":254,"line":1468},[252,2953,2954],{"class":258},"        int",[252,2956,1537],{"class":262},[252,2958,308],{"class":258},[252,2960,454],{"class":311},[252,2962,318],{"class":262},[252,2964,2965],{"class":321}," \u002F\u002F个位\n",[252,2967,2968,2970,2973,2975,2977,2979],{"class":254,"line":1751},[252,2969,2954],{"class":258},[252,2971,2972],{"class":262}," b",[252,2974,308],{"class":258},[252,2976,454],{"class":311},[252,2978,318],{"class":262},[252,2980,2981],{"class":321}," \u002F\u002F十位\n",[252,2983,2984,2986,2989,2991,2993,2995],{"class":254,"line":1756},[252,2985,2954],{"class":258},[252,2987,2988],{"class":262}," c",[252,2990,308],{"class":258},[252,2992,454],{"class":311},[252,2994,318],{"class":262},[252,2996,2997],{"class":321}," \u002F\u002F百位\n",[252,2999,3000,3003,3005,3007,3009,3011],{"class":254,"line":1762},[252,3001,3002],{"class":262},"        a",[252,3004,308],{"class":258},[252,3006,1804],{"class":262},[252,3008,591],{"class":258},[252,3010,709],{"class":311},[252,3012,1429],{"class":262},[252,3014,3015,3018,3020,3022,3024,3026,3028,3030],{"class":254,"line":1767},[252,3016,3017],{"class":262},"        b",[252,3019,308],{"class":258},[252,3021,1804],{"class":262},[252,3023,847],{"class":258},[252,3025,709],{"class":311},[252,3027,591],{"class":258},[252,3029,709],{"class":311},[252,3031,1429],{"class":262},[252,3033,3034,3037,3039,3041,3043,3045],{"class":254,"line":1781},[252,3035,3036],{"class":262},"        c",[252,3038,308],{"class":258},[252,3040,1804],{"class":262},[252,3042,847],{"class":258},[252,3044,574],{"class":311},[252,3046,1429],{"class":262},[252,3048,3049,3051,3053,3055,3057,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3086,3089,3092],{"class":254,"line":1786},[252,3050,2636],{"class":258},[252,3052,1980],{"class":262},[252,3054,718],{"class":258},[252,3056,501],{"class":262},[252,3058,718],{"class":258},[252,3060,501],{"class":262},[252,3062,744],{"class":258},[252,3064,526],{"class":262},[252,3066,718],{"class":258},[252,3068,526],{"class":262},[252,3070,718],{"class":258},[252,3072,526],{"class":262},[252,3074,744],{"class":258},[252,3076,551],{"class":262},[252,3078,718],{"class":258},[252,3080,551],{"class":262},[252,3082,718],{"class":258},[252,3084,3085],{"class":262},"c ",[252,3087,3088],{"class":258},"==",[252,3090,3091],{"class":262}," num)",[252,3093,3094],{"class":321}," \u002F\u002F如果是水仙花数，才打印\n",[252,3096,3097],{"class":254,"line":1792},[252,3098,2649],{"class":262},[252,3100,3101,3103,3105,3107,3109],{"class":254,"line":1813},[252,3102,2654],{"class":262},[252,3104,1307],{"class":258},[252,3106,1804],{"class":262},[252,3108,1307],{"class":258},[252,3110,1330],{"class":262},[252,3112,3113],{"class":254,"line":1818},[252,3114,2668],{"class":262},[252,3116,3117,3119,3121],{"class":254,"line":1832},[252,3118,2428],{"class":262},[252,3120,2431],{"class":258},[252,3122,1429],{"class":262},[252,3124,3125],{"class":254,"line":1837},[252,3126,2326],{"class":262},[252,3128,3129,3131,3134,3136,3139],{"class":254,"line":1866},[252,3130,2390],{"class":258},[252,3132,3133],{"class":262}," (num ",[252,3135,1173],{"class":258},[252,3137,3138],{"class":311}," 1000",[252,3140,2858],{"class":262},[252,3142,3143],{"class":254,"line":1871},[252,3144,1704],{"class":262},[207,3146,3147],{"start":1318},[210,3148,3149],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[244,3151,3153],{"className":246,"code":3152,"language":248,"meta":169,"style":169},"\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",[22,3154,3155,3160,3189,3193,3205,3209,3214,3225,3232,3236,3250,3254,3261,3265,3277,3286],{"__ignoreMap":169},[252,3156,3157],{"class":254,"line":255},[252,3158,3159],{"class":321},"\u002F\u002F从数字0-9打印\n",[252,3161,3162,3165,3167,3169,3172,3174,3176,3179,3181,3183,3185,3187],{"class":254,"line":170},[252,3163,3164],{"class":258},"for",[252,3166,263],{"class":262},[252,3168,266],{"class":258},[252,3170,3171],{"class":262}," i",[252,3173,308],{"class":258},[252,3175,454],{"class":311},[252,3177,3178],{"class":262},";i",[252,3180,1173],{"class":258},[252,3182,709],{"class":311},[252,3184,3178],{"class":262},[252,3186,2431],{"class":258},[252,3188,269],{"class":262},[252,3190,3191],{"class":254,"line":1318},[252,3192,1685],{"class":262},[252,3194,3195,3197,3199,3201,3203],{"class":254,"line":1333},[252,3196,1690],{"class":262},[252,3198,1307],{"class":258},[252,3200,704],{"class":262},[252,3202,1307],{"class":258},[252,3204,1330],{"class":262},[252,3206,3207],{"class":254,"line":1339},[252,3208,1704],{"class":262},[252,3210,3211],{"class":254,"line":1353},[252,3212,3213],{"class":321},"\u002F\u002F上式可以进行拆分\n",[252,3215,3216,3218,3220,3222],{"class":254,"line":1359},[252,3217,266],{"class":258},[252,3219,3171],{"class":262},[252,3221,308],{"class":258},[252,3223,3224],{"class":311},"0\n",[252,3226,3227,3229],{"class":254,"line":1450},[252,3228,3164],{"class":258},[252,3230,3231],{"class":262},"(;;;)\n",[252,3233,3234],{"class":254,"line":1456},[252,3235,1685],{"class":262},[252,3237,3238,3241,3244,3246,3248],{"class":254,"line":1468},[252,3239,3240],{"class":258},"    if",[252,3242,3243],{"class":262},"(i",[252,3245,1849],{"class":258},[252,3247,709],{"class":311},[252,3249,269],{"class":262},[252,3251,3252],{"class":254,"line":1751},[252,3253,2169],{"class":262},[252,3255,3256,3259],{"class":254,"line":1756},[252,3257,3258],{"class":258},"        break",[252,3260,1429],{"class":262},[252,3262,3263],{"class":254,"line":1762},[252,3264,2326],{"class":262},[252,3266,3267,3269,3271,3273,3275],{"class":254,"line":1767},[252,3268,1690],{"class":262},[252,3270,1307],{"class":258},[252,3272,704],{"class":262},[252,3274,1307],{"class":258},[252,3276,1330],{"class":262},[252,3278,3279,3282,3284],{"class":254,"line":1781},[252,3280,3281],{"class":262},"    i",[252,3283,2431],{"class":258},[252,3285,1429],{"class":262},[252,3287,3288],{"class":254,"line":1786},[252,3289,1704],{"class":262},[19,3291,3292],{},"小练习",[244,3294,3296],{"className":246,"code":3295,"language":248,"meta":169,"style":169},"#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",[22,3297,3298,3304,3314,3322,3326,3331,3336,3364,3368,3373,3378,3419,3423,3436,3440,3444,3448,3460,3464,3468],{"__ignoreMap":169},[252,3299,3300,3302],{"class":254,"line":255},[252,3301,2088],{"class":258},[252,3303,2091],{"class":367},[252,3305,3306,3308,3310,3312],{"class":254,"line":170},[252,3307,2096],{"class":258},[252,3309,2099],{"class":258},[252,3311,2103],{"class":2102},[252,3313,1429],{"class":262},[252,3315,3316,3318,3320],{"class":254,"line":1318},[252,3317,266],{"class":258},[252,3319,2112],{"class":2102},[252,3321,2115],{"class":262},[252,3323,3324],{"class":254,"line":1333},[252,3325,1685],{"class":262},[252,3327,3328],{"class":254,"line":1339},[252,3329,3330],{"class":321},"    \u002F\u002F敲桌子案例\n",[252,3332,3333],{"class":254,"line":1353},[252,3334,3335],{"class":321},"    \u002F\u002F1.先输出1-100的数字\n",[252,3337,3338,3341,3343,3345,3347,3349,3351,3354,3356,3358,3360,3362],{"class":254,"line":1359},[252,3339,3340],{"class":258},"    for",[252,3342,263],{"class":262},[252,3344,266],{"class":258},[252,3346,3171],{"class":262},[252,3348,308],{"class":258},[252,3350,480],{"class":311},[252,3352,3353],{"class":262},"; i",[252,3355,1727],{"class":258},[252,3357,574],{"class":311},[252,3359,3353],{"class":262},[252,3361,2431],{"class":258},[252,3363,269],{"class":262},[252,3365,3366],{"class":254,"line":1450},[252,3367,2169],{"class":262},[252,3369,3370],{"class":254,"line":1456},[252,3371,3372],{"class":321},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[252,3374,3375],{"class":254,"line":1468},[252,3376,3377],{"class":321},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[252,3379,3380,3382,3384,3386,3388,3390,3392,3395,3397,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417],{"class":254,"line":1751},[252,3381,2636],{"class":258},[252,3383,3243],{"class":262},[252,3385,591],{"class":258},[252,3387,632],{"class":311},[252,3389,3088],{"class":258},[252,3391,454],{"class":311},[252,3393,3394],{"class":258}," ||",[252,3396,3171],{"class":262},[252,3398,591],{"class":258},[252,3400,709],{"class":311},[252,3402,3088],{"class":258},[252,3404,632],{"class":311},[252,3406,3394],{"class":258},[252,3408,3171],{"class":262},[252,3410,847],{"class":258},[252,3412,709],{"class":311},[252,3414,3088],{"class":258},[252,3416,632],{"class":311},[252,3418,269],{"class":262},[252,3420,3421],{"class":254,"line":1756},[252,3422,2649],{"class":262},[252,3424,3425,3427,3429,3432,3434],{"class":254,"line":1762},[252,3426,2654],{"class":262},[252,3428,1307],{"class":258},[252,3430,3431],{"class":367},"\"敲桌子\"",[252,3433,1307],{"class":258},[252,3435,1330],{"class":262},[252,3437,3438],{"class":254,"line":1767},[252,3439,2668],{"class":262},[252,3441,3442],{"class":254,"line":1781},[252,3443,2709],{"class":258},[252,3445,3446],{"class":254,"line":1786},[252,3447,2649],{"class":262},[252,3449,3450,3452,3454,3456,3458],{"class":254,"line":1792},[252,3451,2654],{"class":262},[252,3453,1307],{"class":258},[252,3455,704],{"class":262},[252,3457,1307],{"class":258},[252,3459,1330],{"class":262},[252,3461,3462],{"class":254,"line":1813},[252,3463,2668],{"class":262},[252,3465,3466],{"class":254,"line":1818},[252,3467,2326],{"class":262},[252,3469,3470],{"class":254,"line":1832},[252,3471,1704],{"class":262},[19,3473,3474],{},"嵌套实现星图",[244,3476,3478],{"className":246,"code":3477,"language":248,"meta":169,"style":169},"#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",[22,3479,3480,3486,3496,3504,3508,3534,3538,3567,3571,3582,3586,3595,3599],{"__ignoreMap":169},[252,3481,3482,3484],{"class":254,"line":255},[252,3483,2088],{"class":258},[252,3485,2091],{"class":367},[252,3487,3488,3490,3492,3494],{"class":254,"line":170},[252,3489,2096],{"class":258},[252,3491,2099],{"class":258},[252,3493,2103],{"class":2102},[252,3495,1429],{"class":262},[252,3497,3498,3500,3502],{"class":254,"line":1318},[252,3499,266],{"class":258},[252,3501,2112],{"class":2102},[252,3503,2115],{"class":262},[252,3505,3506],{"class":254,"line":1333},[252,3507,1685],{"class":262},[252,3509,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3532],{"class":254,"line":1339},[252,3511,3340],{"class":258},[252,3513,1797],{"class":262},[252,3515,266],{"class":258},[252,3517,3171],{"class":262},[252,3519,308],{"class":258},[252,3521,454],{"class":311},[252,3523,3178],{"class":262},[252,3525,1173],{"class":258},[252,3527,709],{"class":311},[252,3529,3178],{"class":262},[252,3531,2431],{"class":258},[252,3533,269],{"class":262},[252,3535,3536],{"class":254,"line":1353},[252,3537,2169],{"class":262},[252,3539,3540,3543,3545,3547,3550,3552,3554,3557,3559,3561,3563,3565],{"class":254,"line":1359},[252,3541,3542],{"class":258},"        for",[252,3544,1797],{"class":262},[252,3546,266],{"class":258},[252,3548,3549],{"class":262}," j",[252,3551,308],{"class":258},[252,3553,454],{"class":311},[252,3555,3556],{"class":262},";j",[252,3558,1173],{"class":258},[252,3560,709],{"class":311},[252,3562,3556],{"class":262},[252,3564,2431],{"class":258},[252,3566,269],{"class":262},[252,3568,3569],{"class":254,"line":1450},[252,3570,2649],{"class":262},[252,3572,3573,3575,3577,3580],{"class":254,"line":1456},[252,3574,2654],{"class":262},[252,3576,1307],{"class":258},[252,3578,3579],{"class":367},"\"*\"",[252,3581,1429],{"class":262},[252,3583,3584],{"class":254,"line":1468},[252,3585,2668],{"class":262},[252,3587,3588,3591,3593],{"class":254,"line":1751},[252,3589,3590],{"class":262},"        cout",[252,3592,1307],{"class":258},[252,3594,1330],{"class":262},[252,3596,3597],{"class":254,"line":1756},[252,3598,2326],{"class":262},[252,3600,3601],{"class":254,"line":1762},[252,3602,1704],{"class":262},[19,3604,3605],{},"乘法口诀表",[244,3607,3609],{"className":246,"code":3608,"language":248,"meta":169,"style":169},"#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",[22,3610,3611,3617,3627,3635,3639,3665,3669,3694,3698,3738,3742,3750,3754],{"__ignoreMap":169},[252,3612,3613,3615],{"class":254,"line":255},[252,3614,2088],{"class":258},[252,3616,2473],{"class":367},[252,3618,3619,3621,3623,3625],{"class":254,"line":170},[252,3620,2096],{"class":258},[252,3622,2099],{"class":258},[252,3624,2103],{"class":2102},[252,3626,1429],{"class":262},[252,3628,3629,3631,3633],{"class":254,"line":1318},[252,3630,266],{"class":258},[252,3632,2112],{"class":2102},[252,3634,2115],{"class":262},[252,3636,3637],{"class":254,"line":1333},[252,3638,1685],{"class":262},[252,3640,3641,3643,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663],{"class":254,"line":1339},[252,3642,3340],{"class":258},[252,3644,263],{"class":262},[252,3646,266],{"class":258},[252,3648,3171],{"class":262},[252,3650,308],{"class":258},[252,3652,480],{"class":311},[252,3654,3178],{"class":262},[252,3656,1173],{"class":258},[252,3658,709],{"class":311},[252,3660,3178],{"class":262},[252,3662,2431],{"class":258},[252,3664,269],{"class":262},[252,3666,3667],{"class":254,"line":1353},[252,3668,2169],{"class":262},[252,3670,3671,3673,3675,3677,3679,3681,3683,3685,3687,3690,3692],{"class":254,"line":1359},[252,3672,3542],{"class":258},[252,3674,263],{"class":262},[252,3676,266],{"class":258},[252,3678,3549],{"class":262},[252,3680,308],{"class":258},[252,3682,480],{"class":311},[252,3684,3556],{"class":262},[252,3686,1727],{"class":258},[252,3688,3689],{"class":262},"i;j",[252,3691,2431],{"class":258},[252,3693,269],{"class":262},[252,3695,3696],{"class":254,"line":1450},[252,3697,2649],{"class":262},[252,3699,3700,3702,3704,3706,3708,3710,3712,3714,3716,3719,3721,3723,3725,3727,3729,3732,3734,3736],{"class":254,"line":1456},[252,3701,2654],{"class":262},[252,3703,1307],{"class":258},[252,3705,730],{"class":262},[252,3707,1307],{"class":258},[252,3709,3579],{"class":367},[252,3711,1307],{"class":258},[252,3713,704],{"class":262},[252,3715,1307],{"class":258},[252,3717,3718],{"class":367},"\"=\"",[252,3720,1307],{"class":258},[252,3722,704],{"class":262},[252,3724,718],{"class":258},[252,3726,730],{"class":262},[252,3728,1307],{"class":258},[252,3730,3731],{"class":367},"'",[252,3733,1369],{"class":311},[252,3735,3731],{"class":367},[252,3737,1429],{"class":262},[252,3739,3740],{"class":254,"line":1468},[252,3741,2668],{"class":262},[252,3743,3744,3746,3748],{"class":254,"line":1751},[252,3745,3590],{"class":262},[252,3747,1307],{"class":258},[252,3749,1330],{"class":262},[252,3751,3752],{"class":254,"line":1756},[252,3753,2326],{"class":262},[252,3755,3756],{"class":254,"line":1762},[252,3757,1704],{"class":262},[224,3759,3761],{"id":3760},"_163跳出语句","1.6.3跳出语句",[207,3763,3764],{},[210,3765,3766],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3768,3769],{},"break使用时机：",[1270,3771,3772,3775,3778],{},[210,3773,3774],{},"出现在switch条件语句中，作用是终止case并跳出switch",[210,3776,3777],{},"出现在循环结构中，作用是跳出当前的循环结构",[210,3779,3780],{},"出现在嵌套循环中，跳出最近的内层循环语句",[207,3782,3783,3786],{"start":170},[210,3784,3785],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[210,3787,3788],{},"goto语句\n语法：goto 标记;",[19,3790,3791],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[244,3793,3795],{"className":246,"code":3794,"language":248,"meta":169,"style":169},"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",[22,3796,3797,3805,3809,3822,3832,3845,3858,3871,3879,3895],{"__ignoreMap":169},[252,3798,3799,3801,3803],{"class":254,"line":255},[252,3800,266],{"class":258},[252,3802,2112],{"class":2102},[252,3804,2115],{"class":262},[252,3806,3807],{"class":254,"line":170},[252,3808,1685],{"class":262},[252,3810,3811,3813,3815,3818,3820],{"class":254,"line":1318},[252,3812,1690],{"class":262},[252,3814,1307],{"class":258},[252,3816,3817],{"class":367},"\"1\"",[252,3819,1307],{"class":258},[252,3821,1330],{"class":262},[252,3823,3824,3827,3830],{"class":254,"line":1333},[252,3825,3826],{"class":258},"    goto",[252,3828,3829],{"class":2102}," FLAG",[252,3831,1429],{"class":262},[252,3833,3834,3836,3838,3841,3843],{"class":254,"line":1339},[252,3835,1690],{"class":262},[252,3837,1307],{"class":258},[252,3839,3840],{"class":367},"\"2\"",[252,3842,1307],{"class":258},[252,3844,1330],{"class":262},[252,3846,3847,3849,3851,3854,3856],{"class":254,"line":1353},[252,3848,1690],{"class":262},[252,3850,1307],{"class":258},[252,3852,3853],{"class":367},"\"3\"",[252,3855,1307],{"class":258},[252,3857,1330],{"class":262},[252,3859,3860,3862,3864,3867,3869],{"class":254,"line":1359},[252,3861,1690],{"class":262},[252,3863,1307],{"class":258},[252,3865,3866],{"class":367},"\"4\"",[252,3868,1307],{"class":258},[252,3870,1330],{"class":262},[252,3872,3873,3876],{"class":254,"line":1450},[252,3874,3875],{"class":2102},"    FLAG",[252,3877,3878],{"class":262},":\n",[252,3880,3881,3883,3885,3888,3890,3892],{"class":254,"line":1456},[252,3882,1690],{"class":262},[252,3884,1307],{"class":258},[252,3886,3887],{"class":367},"\"5\"",[252,3889,1307],{"class":258},[252,3891,1377],{"class":262},[252,3893,3894],{"class":321},"\u002F\u002F跳过了2,3,4,直接到5\n",[252,3896,3897],{"class":254,"line":1468},[252,3898,1704],{"class":262},[14,3900,3902],{"id":3901},"_17数组","1.7数组",[224,3904,3906],{"id":3905},"_171一维数组","1.7.1一维数组",[207,3908,3909],{},[210,3910,3911],{},"一维数组定义方式",[400,3913,3914,3924],{},[403,3915,3916],{},[406,3917,3918,3921],{},[409,3919,3920],{},"方式",[409,3922,3923],{},"注意事项",[447,3925,3926,3940,3950],{},[406,3927,3928,3934],{},[452,3929,3930,3931,318],{},"数据类型 数组名",[252,3932,3933],{},"数组长度",[452,3935,3936,3937,3939],{},"这种方式是先定义再arr",[252,3938,704],{},"赋值",[406,3941,3942,3947],{},[452,3943,3930,3944,3946],{},[252,3945,3933],{},"={值1,值2....};",[452,3948,3949],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[406,3951,3952,3956],{},[452,3953,3930,3954,3946],{},[252,3955],{},[452,3957,3958,3959,3961],{},"int arr",[252,3960],{},";这是不正确的，按照这样的方式定义必须有初始长度",[207,3963,3964],{"start":170},[210,3965,3966],{},"一维数组数组名\n用途：",[1270,3968,3969],{},[210,3970,3971],{},"1.可以统计整个数组在内存中的长度：",[244,3973,3975],{"className":246,"code":3974,"language":248,"meta":169,"style":169},"sizeof(arr);\nsizeof(arr[0]);\n",[22,3976,3977,3984],{"__ignoreMap":169},[252,3978,3979,3981],{"class":254,"line":255},[252,3980,259],{"class":258},[252,3982,3983],{"class":262},"(arr);\n",[252,3985,3986,3988,3991,3993],{"class":254,"line":170},[252,3987,259],{"class":258},[252,3989,3990],{"class":262},"(arr[",[252,3992,454],{"class":311},[252,3994,3995],{"class":262},"]);\n",[1270,3997,3998],{},[210,3999,4000],{},"2.可以获取数组在内存中的首地址:",[244,4002,4004],{"className":246,"code":4003,"language":248,"meta":169,"style":169},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[22,4005,4006,4011,4024,4029],{"__ignoreMap":169},[252,4007,4008],{"class":254,"line":255},[252,4009,4010],{"class":321},"\u002F\u002F查看16进制的首地址\n",[252,4012,4013,4015,4017,4020,4022],{"class":254,"line":170},[252,4014,1508],{"class":262},[252,4016,1307],{"class":258},[252,4018,4019],{"class":262},"arr",[252,4021,1307],{"class":258},[252,4023,1330],{"class":262},[252,4025,4026],{"class":254,"line":1318},[252,4027,4028],{"class":321},"\u002F\u002F看10进制数\n",[252,4030,4031,4033,4035,4037,4039,4041,4043,4046,4048,4050,4052],{"class":254,"line":1333},[252,4032,1508],{"class":262},[252,4034,1307],{"class":258},[252,4036,263],{"class":262},[252,4038,266],{"class":258},[252,4040,692],{"class":262},[252,4042,616],{"class":258},[252,4044,4045],{"class":262},"arr[",[252,4047,454],{"class":311},[252,4049,1203],{"class":262},[252,4051,1307],{"class":258},[252,4053,1330],{"class":262},[19,4055,4056],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1270,4058,4059],{},[210,4060,4061],{},"1️⃣五只小猪称体重",[244,4063,4065],{"className":246,"code":4064,"language":248,"meta":169,"style":169},"#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",[22,4066,4067,4073,4083,4091,4095,4135,4148,4174,4178,4190,4194,4204,4208,4212,4225,4235],{"__ignoreMap":169},[252,4068,4069,4071],{"class":254,"line":255},[252,4070,2088],{"class":258},[252,4072,2091],{"class":367},[252,4074,4075,4077,4079,4081],{"class":254,"line":170},[252,4076,2096],{"class":258},[252,4078,2099],{"class":258},[252,4080,2103],{"class":2102},[252,4082,1429],{"class":262},[252,4084,4085,4087,4089],{"class":254,"line":1318},[252,4086,266],{"class":258},[252,4088,2112],{"class":2102},[252,4090,2115],{"class":262},[252,4092,4093],{"class":254,"line":1333},[252,4094,1685],{"class":262},[252,4096,4097,4099,4102,4104,4106,4108,4110,4113,4115,4118,4120,4122,4124,4127,4129,4132],{"class":254,"line":1339},[252,4098,2124],{"class":258},[252,4100,4101],{"class":262}," arr[",[252,4103,582],{"class":311},[252,4105,1203],{"class":262},[252,4107,308],{"class":258},[252,4109,1159],{"class":262},[252,4111,4112],{"class":311},"300",[252,4114,641],{"class":262},[252,4116,4117],{"class":311},"350",[252,4119,641],{"class":262},[252,4121,1861],{"class":311},[252,4123,641],{"class":262},[252,4125,4126],{"class":311},"400",[252,4128,641],{"class":262},[252,4130,4131],{"class":311},"250",[252,4133,4134],{"class":262},"};\n",[252,4136,4137,4139,4142,4144,4146],{"class":254,"line":1353},[252,4138,2124],{"class":258},[252,4140,4141],{"class":262}," tmp",[252,4143,308],{"class":258},[252,4145,454],{"class":311},[252,4147,1429],{"class":262},[252,4149,4150,4152,4154,4156,4158,4160,4162,4164,4166,4168,4170,4172],{"class":254,"line":1359},[252,4151,3340],{"class":258},[252,4153,1797],{"class":262},[252,4155,266],{"class":258},[252,4157,3171],{"class":262},[252,4159,308],{"class":258},[252,4161,454],{"class":311},[252,4163,3178],{"class":262},[252,4165,1173],{"class":258},[252,4167,582],{"class":311},[252,4169,3178],{"class":262},[252,4171,2431],{"class":258},[252,4173,269],{"class":262},[252,4175,4176],{"class":254,"line":1450},[252,4177,2169],{"class":262},[252,4179,4180,4182,4185,4187],{"class":254,"line":1456},[252,4181,2636],{"class":258},[252,4183,4184],{"class":262},"(tmp",[252,4186,1173],{"class":258},[252,4188,4189],{"class":262},"arr[i])\n",[252,4191,4192],{"class":254,"line":1468},[252,4193,2649],{"class":262},[252,4195,4196,4199,4201],{"class":254,"line":1751},[252,4197,4198],{"class":262},"            tmp",[252,4200,308],{"class":258},[252,4202,4203],{"class":262},"arr[i];\n",[252,4205,4206],{"class":254,"line":1756},[252,4207,2668],{"class":262},[252,4209,4210],{"class":254,"line":1762},[252,4211,2326],{"class":262},[252,4213,4214,4216,4218,4221,4223],{"class":254,"line":1767},[252,4215,1690],{"class":262},[252,4217,1307],{"class":258},[252,4219,4220],{"class":262},"tmp",[252,4222,1307],{"class":258},[252,4224,1330],{"class":262},[252,4226,4227,4230,4233],{"class":254,"line":1781},[252,4228,4229],{"class":258},"    return",[252,4231,4232],{"class":311}," 0",[252,4234,1429],{"class":262},[252,4236,4237],{"class":254,"line":1786},[252,4238,1704],{"class":262},[1270,4240,4241],{},[210,4242,4243],{},"2️⃣数组元素逆置",[244,4245,4247],{"className":246,"code":4246,"language":248,"meta":169,"style":169},"\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",[22,4248,4249,4254,4260,4270,4278,4282,4317,4333,4365,4378,4383,4388,4400,4410,4420,4425,4434,4444,4449,4454,4481,4485,4501,4505,4516,4525],{"__ignoreMap":169},[252,4250,4251],{"class":254,"line":255},[252,4252,4253],{"class":321},"\u002F\u002F元素逆置\n",[252,4255,4256,4258],{"class":254,"line":170},[252,4257,2088],{"class":258},[252,4259,2091],{"class":367},[252,4261,4262,4264,4266,4268],{"class":254,"line":1318},[252,4263,2096],{"class":258},[252,4265,2099],{"class":258},[252,4267,2103],{"class":2102},[252,4269,1429],{"class":262},[252,4271,4272,4274,4276],{"class":254,"line":1333},[252,4273,266],{"class":258},[252,4275,2112],{"class":2102},[252,4277,2115],{"class":262},[252,4279,4280],{"class":254,"line":1339},[252,4281,1685],{"class":262},[252,4283,4284,4287,4289,4291,4293,4295,4297,4299,4301,4303,4305,4307,4309,4311,4313,4315],{"class":254,"line":1353},[252,4285,4286],{"class":258},"   int",[252,4288,4101],{"class":262},[252,4290,582],{"class":311},[252,4292,1203],{"class":262},[252,4294,308],{"class":258},[252,4296,1159],{"class":262},[252,4298,480],{"class":311},[252,4300,641],{"class":262},[252,4302,340],{"class":311},[252,4304,641],{"class":262},[252,4306,334],{"class":311},[252,4308,641],{"class":262},[252,4310,556],{"class":311},[252,4312,641],{"class":262},[252,4314,582],{"class":311},[252,4316,4134],{"class":262},[252,4318,4319,4321,4324,4326,4328,4330],{"class":254,"line":1359},[252,4320,4286],{"class":258},[252,4322,4323],{"class":262}," start",[252,4325,308],{"class":258},[252,4327,454],{"class":311},[252,4329,318],{"class":262},[252,4331,4332],{"class":321},"\u002F\u002F起始下标\n",[252,4334,4335,4337,4340,4343,4346,4349,4351,4353,4356,4358,4360,4362],{"class":254,"line":1450},[252,4336,4286],{"class":258},[252,4338,4339],{"class":262}," end",[252,4341,4342],{"class":258},"=sizeof",[252,4344,4345],{"class":262},"(arr)",[252,4347,4348],{"class":258},"\u002Fsizeof",[252,4350,3990],{"class":262},[252,4352,454],{"class":311},[252,4354,4355],{"class":262},"])",[252,4357,795],{"class":258},[252,4359,480],{"class":311},[252,4361,318],{"class":262},[252,4363,4364],{"class":321},"\u002F\u002F结束下标\n",[252,4366,4367,4370,4373,4375],{"class":254,"line":1456},[252,4368,4369],{"class":258},"   while",[252,4371,4372],{"class":262}," (start",[252,4374,1173],{"class":258},[252,4376,4377],{"class":262},"end)\n",[252,4379,4380],{"class":254,"line":1468},[252,4381,4382],{"class":262},"   {\n",[252,4384,4385],{"class":254,"line":1751},[252,4386,4387],{"class":321},"    \u002F\u002F实现元素互换代码\n",[252,4389,4390,4392,4395,4397],{"class":254,"line":1756},[252,4391,2124],{"class":258},[252,4393,4394],{"class":262}," temp",[252,4396,308],{"class":258},[252,4398,4399],{"class":262},"arr[start];\n",[252,4401,4402,4405,4407],{"class":254,"line":1762},[252,4403,4404],{"class":262},"    arr[start]",[252,4406,308],{"class":258},[252,4408,4409],{"class":262},"arr[end];\n",[252,4411,4412,4415,4417],{"class":254,"line":1767},[252,4413,4414],{"class":262},"    arr[end]",[252,4416,308],{"class":258},[252,4418,4419],{"class":262},"temp;\n",[252,4421,4422],{"class":254,"line":1781},[252,4423,4424],{"class":321},"    \u002F\u002F下标更新\n",[252,4426,4427,4430,4432],{"class":254,"line":1786},[252,4428,4429],{"class":262},"    start",[252,4431,2431],{"class":258},[252,4433,1429],{"class":262},[252,4435,4436,4439,4442],{"class":254,"line":1792},[252,4437,4438],{"class":262},"    end",[252,4440,4441],{"class":258},"--",[252,4443,1429],{"class":262},[252,4445,4446],{"class":254,"line":1813},[252,4447,4448],{"class":262},"   }\n",[252,4450,4451],{"class":254,"line":1818},[252,4452,4453],{"class":321},"   \u002F\u002F输出逆置后的数组\n",[252,4455,4456,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477,4479],{"class":254,"line":1832},[252,4457,4458],{"class":258},"   for",[252,4460,1797],{"class":262},[252,4462,266],{"class":258},[252,4464,3171],{"class":262},[252,4466,308],{"class":258},[252,4468,454],{"class":311},[252,4470,3178],{"class":262},[252,4472,1173],{"class":258},[252,4474,582],{"class":311},[252,4476,3178],{"class":262},[252,4478,2431],{"class":258},[252,4480,269],{"class":262},[252,4482,4483],{"class":254,"line":1837},[252,4484,4382],{"class":262},[252,4486,4487,4489,4491,4494,4496,4499],{"class":254,"line":1866},[252,4488,1690],{"class":262},[252,4490,1307],{"class":258},[252,4492,4493],{"class":262},"arr[i]",[252,4495,1307],{"class":258},[252,4497,4498],{"class":367},"\" \"",[252,4500,1429],{"class":262},[252,4502,4503],{"class":254,"line":1871},[252,4504,4448],{"class":262},[252,4506,4507,4510,4512,4514],{"class":254,"line":1888},[252,4508,4509],{"class":2102},"   system",[252,4511,263],{"class":262},[252,4513,2447],{"class":367},[252,4515,2858],{"class":262},[252,4517,4518,4521,4523],{"class":254,"line":1893},[252,4519,4520],{"class":258},"   return",[252,4522,4232],{"class":311},[252,4524,1429],{"class":262},[252,4526,4527],{"class":254,"line":1898},[252,4528,1704],{"class":262},[1270,4530,4531],{},[210,4532,4533],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[244,4535,4537],{"className":246,"code":4536,"language":248,"meta":169,"style":169},"\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",[22,4538,4539,4544,4550,4560,4568,4572,4624,4637,4663,4667,4681,4685,4690,4695,4725,4729,4734,4768,4772,4777,4797,4802,4814,4830,4845,4850,4854,4858,4871,4897,4901,4915,4919,4927],{"__ignoreMap":169},[252,4540,4541],{"class":254,"line":255},[252,4542,4543],{"class":321},"\u002F\u002F冒泡排序,升序\n",[252,4545,4546,4548],{"class":254,"line":170},[252,4547,2088],{"class":258},[252,4549,2091],{"class":367},[252,4551,4552,4554,4556,4558],{"class":254,"line":1318},[252,4553,2096],{"class":258},[252,4555,2099],{"class":258},[252,4557,2103],{"class":2102},[252,4559,1429],{"class":262},[252,4561,4562,4564,4566],{"class":254,"line":1333},[252,4563,266],{"class":258},[252,4565,2112],{"class":2102},[252,4567,2115],{"class":262},[252,4569,4570],{"class":254,"line":1339},[252,4571,1685],{"class":262},[252,4573,4574,4576,4578,4580,4583,4585,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616,4618,4620,4622],{"class":254,"line":1353},[252,4575,2124],{"class":258},[252,4577,4101],{"class":262},[252,4579,683],{"class":311},[252,4581,4582],{"class":262},"] ",[252,4584,308],{"class":258},[252,4586,4587],{"class":262}," {",[252,4589,556],{"class":311},[252,4591,641],{"class":262},[252,4593,340],{"class":311},[252,4595,641],{"class":262},[252,4597,658],{"class":311},[252,4599,641],{"class":262},[252,4601,454],{"class":311},[252,4603,641],{"class":262},[252,4605,582],{"class":311},[252,4607,641],{"class":262},[252,4609,632],{"class":311},[252,4611,641],{"class":262},[252,4613,480],{"class":311},[252,4615,641],{"class":262},[252,4617,334],{"class":311},[252,4619,641],{"class":262},[252,4621,683],{"class":311},[252,4623,4134],{"class":262},[252,4625,4626,4628,4630,4633,4635],{"class":254,"line":1359},[252,4627,1690],{"class":262},[252,4629,1307],{"class":258},[252,4631,4632],{"class":367},"\"排序前：\"",[252,4634,1307],{"class":258},[252,4636,1330],{"class":262},[252,4638,4639,4641,4643,4645,4647,4649,4651,4653,4655,4657,4659,4661],{"class":254,"line":1450},[252,4640,3340],{"class":258},[252,4642,1797],{"class":262},[252,4644,266],{"class":258},[252,4646,3171],{"class":262},[252,4648,308],{"class":258},[252,4650,454],{"class":311},[252,4652,3178],{"class":262},[252,4654,1173],{"class":258},[252,4656,683],{"class":311},[252,4658,3178],{"class":262},[252,4660,2431],{"class":258},[252,4662,269],{"class":262},[252,4664,4665],{"class":254,"line":1456},[252,4666,2169],{"class":262},[252,4668,4669,4671,4673,4675,4677,4679],{"class":254,"line":1468},[252,4670,3590],{"class":262},[252,4672,1307],{"class":258},[252,4674,4493],{"class":262},[252,4676,1307],{"class":258},[252,4678,4498],{"class":367},[252,4680,1429],{"class":262},[252,4682,4683],{"class":254,"line":1751},[252,4684,2326],{"class":262},[252,4686,4687],{"class":254,"line":1756},[252,4688,4689],{"class":321},"    \u002F\u002F开始冒泡排序\n",[252,4691,4692],{"class":254,"line":1762},[252,4693,4694],{"class":321},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[252,4696,4697,4699,4701,4703,4705,4707,4709,4711,4713,4715,4717,4719,4721,4723],{"class":254,"line":1767},[252,4698,3340],{"class":258},[252,4700,1797],{"class":262},[252,4702,266],{"class":258},[252,4704,3171],{"class":262},[252,4706,308],{"class":258},[252,4708,454],{"class":311},[252,4710,3178],{"class":262},[252,4712,1173],{"class":258},[252,4714,683],{"class":311},[252,4716,795],{"class":258},[252,4718,480],{"class":311},[252,4720,3178],{"class":262},[252,4722,2431],{"class":258},[252,4724,269],{"class":262},[252,4726,4727],{"class":254,"line":1781},[252,4728,2169],{"class":262},[252,4730,4731],{"class":254,"line":1786},[252,4732,4733],{"class":321},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[252,4735,4736,4738,4740,4742,4744,4746,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766],{"class":254,"line":1792},[252,4737,3542],{"class":258},[252,4739,1797],{"class":262},[252,4741,266],{"class":258},[252,4743,3549],{"class":262},[252,4745,308],{"class":258},[252,4747,454],{"class":311},[252,4749,3556],{"class":262},[252,4751,1173],{"class":258},[252,4753,683],{"class":311},[252,4755,795],{"class":258},[252,4757,704],{"class":262},[252,4759,795],{"class":258},[252,4761,480],{"class":311},[252,4763,3556],{"class":262},[252,4765,2431],{"class":258},[252,4767,269],{"class":262},[252,4769,4770],{"class":254,"line":1813},[252,4771,2649],{"class":262},[252,4773,4774],{"class":254,"line":1818},[252,4775,4776],{"class":321},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[252,4778,4779,4782,4785,4787,4790,4792,4794],{"class":254,"line":1832},[252,4780,4781],{"class":258},"            if",[252,4783,4784],{"class":262},"(arr[j]",[252,4786,1223],{"class":258},[252,4788,4789],{"class":262},"arr[j",[252,4791,744],{"class":258},[252,4793,480],{"class":311},[252,4795,4796],{"class":262},"])\n",[252,4798,4799],{"class":254,"line":1837},[252,4800,4801],{"class":262},"            {\n",[252,4803,4804,4807,4809,4811],{"class":254,"line":1866},[252,4805,4806],{"class":258},"                int",[252,4808,4394],{"class":262},[252,4810,308],{"class":258},[252,4812,4813],{"class":262},"arr[j];\n",[252,4815,4816,4819,4821,4823,4825,4827],{"class":254,"line":1871},[252,4817,4818],{"class":262},"                arr[j]",[252,4820,308],{"class":258},[252,4822,4789],{"class":262},[252,4824,744],{"class":258},[252,4826,480],{"class":311},[252,4828,4829],{"class":262},"];\n",[252,4831,4832,4835,4837,4839,4841,4843],{"class":254,"line":1888},[252,4833,4834],{"class":262},"                arr[j",[252,4836,744],{"class":258},[252,4838,480],{"class":311},[252,4840,1203],{"class":262},[252,4842,308],{"class":258},[252,4844,4419],{"class":262},[252,4846,4847],{"class":254,"line":1893},[252,4848,4849],{"class":262},"            }\n",[252,4851,4852],{"class":254,"line":1898},[252,4853,2668],{"class":262},[252,4855,4856],{"class":254,"line":1903},[252,4857,2326],{"class":262},[252,4859,4860,4862,4864,4867,4869],{"class":254,"line":1917},[252,4861,1690],{"class":262},[252,4863,1307],{"class":258},[252,4865,4866],{"class":367},"\"排序后：\"",[252,4868,1307],{"class":258},[252,4870,1330],{"class":262},[252,4872,4873,4875,4877,4879,4881,4883,4885,4887,4889,4891,4893,4895],{"class":254,"line":1922},[252,4874,3340],{"class":258},[252,4876,1797],{"class":262},[252,4878,266],{"class":258},[252,4880,3171],{"class":262},[252,4882,308],{"class":258},[252,4884,454],{"class":311},[252,4886,3178],{"class":262},[252,4888,1173],{"class":258},[252,4890,683],{"class":311},[252,4892,3178],{"class":262},[252,4894,2431],{"class":258},[252,4896,269],{"class":262},[252,4898,4899],{"class":254,"line":2716},[252,4900,2169],{"class":262},[252,4902,4903,4905,4907,4909,4911,4913],{"class":254,"line":2730},[252,4904,3590],{"class":262},[252,4906,1307],{"class":258},[252,4908,4493],{"class":262},[252,4910,1307],{"class":258},[252,4912,4498],{"class":367},[252,4914,1429],{"class":262},[252,4916,4917],{"class":254,"line":2738},[252,4918,2326],{"class":262},[252,4920,4921,4923,4925],{"class":254,"line":2743},[252,4922,4229],{"class":258},[252,4924,4232],{"class":311},[252,4926,1429],{"class":262},[252,4928,4929],{"class":254,"line":2749},[252,4930,1704],{"class":262},[224,4932,4934],{"id":4933},"_172二维数组","1.7.2二维数组",[207,4936,4937],{},[210,4938,4939],{},"二维数组的四种定义方式",[400,4941,4942,4951],{},[403,4943,4944],{},[406,4945,4946,4949],{},[409,4947,4948],{},"序号",[409,4950,3920],{},[447,4952,4953,4963,4972,4981,4990],{},[406,4954,4955,4957],{},[452,4956,480],{},[452,4958,4959,4960,318],{},"数据类型 数组名[行数]",[252,4961,4962],{},"列数",[406,4964,4965,4967],{},[452,4966,340],{},[452,4968,4959,4969,4971],{},[252,4970,4962],{},"={ {数据1,数据2}，{数据3，数据4}... }",[406,4973,4974,4976],{},[452,4975,334],{},[452,4977,4959,4978,4980],{},[252,4979,4962],{},"={数据1,数据2,数据3...}",[406,4982,4983,4985],{},[452,4984,556],{},[452,4986,4987,4988,4980],{},"数据类型 数组名[]",[252,4989,4962],{},[406,4991,4992,4995],{},[452,4993,4994],{},"注意：不能只省略列数",[452,4996],{},[207,4998,4999],{"start":170},[210,5000,5001],{},"二维数组数组名",[1270,5003,5004,5007],{},[210,5005,5006],{},"1.查看二维数组所占内存空间",[210,5008,5009],{},"2.获取二维数组首地址",[19,5011,5012],{},"已知二维数组，求二维数组的行数与列数",[244,5014,5016],{"className":246,"code":5015,"language":248,"meta":169,"style":169},"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",[22,5017,5018,5026,5030,5048,5052,5070,5086,5091,5116,5149],{"__ignoreMap":169},[252,5019,5020,5022,5024],{"class":254,"line":255},[252,5021,266],{"class":258},[252,5023,2112],{"class":2102},[252,5025,2115],{"class":262},[252,5027,5028],{"class":254,"line":170},[252,5029,1685],{"class":262},[252,5031,5032,5034,5036,5038,5041,5043,5045],{"class":254,"line":1318},[252,5033,2124],{"class":258},[252,5035,4101],{"class":262},[252,5037,340],{"class":311},[252,5039,5040],{"class":262},"][",[252,5042,334],{"class":311},[252,5044,1203],{"class":262},[252,5046,5047],{"class":258},"=\n",[252,5049,5050],{"class":254,"line":1333},[252,5051,2169],{"class":262},[252,5053,5054,5057,5059,5061,5063,5065,5067],{"class":254,"line":1339},[252,5055,5056],{"class":262},"        {",[252,5058,480],{"class":311},[252,5060,641],{"class":262},[252,5062,340],{"class":311},[252,5064,641],{"class":262},[252,5066,334],{"class":311},[252,5068,5069],{"class":262},"},\n",[252,5071,5072,5074,5076,5078,5080,5082,5084],{"class":254,"line":1353},[252,5073,5056],{"class":262},[252,5075,556],{"class":311},[252,5077,641],{"class":262},[252,5079,582],{"class":311},[252,5081,641],{"class":262},[252,5083,607],{"class":311},[252,5085,1704],{"class":262},[252,5087,5088],{"class":254,"line":1359},[252,5089,5090],{"class":262},"    };\n",[252,5092,5093,5095,5097,5100,5102,5104,5106,5108,5110,5112,5114],{"class":254,"line":1450},[252,5094,1690],{"class":262},[252,5096,1307],{"class":258},[252,5098,5099],{"class":367},"\"二维数组的行数\"",[252,5101,1511],{"class":258},[252,5103,4345],{"class":262},[252,5105,4348],{"class":258},[252,5107,3990],{"class":262},[252,5109,454],{"class":311},[252,5111,4355],{"class":262},[252,5113,1307],{"class":258},[252,5115,1330],{"class":262},[252,5117,5118,5120,5122,5125,5127,5129,5131,5133,5135,5137,5139,5141,5143,5145,5147],{"class":254,"line":1456},[252,5119,1690],{"class":262},[252,5121,1307],{"class":258},[252,5123,5124],{"class":367},"\"二维数组的列数\"",[252,5126,1511],{"class":258},[252,5128,3990],{"class":262},[252,5130,454],{"class":311},[252,5132,4355],{"class":262},[252,5134,4348],{"class":258},[252,5136,3990],{"class":262},[252,5138,454],{"class":311},[252,5140,5040],{"class":262},[252,5142,454],{"class":311},[252,5144,4355],{"class":262},[252,5146,1307],{"class":258},[252,5148,1330],{"class":262},[252,5150,5151],{"class":254,"line":1468},[252,5152,1704],{"class":262},[19,5154,5155],{},"查看二维数组首地址",[244,5157,5159],{"className":246,"code":5158,"language":248,"meta":169,"style":169},"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",[22,5160,5161,5178,5204,5229],{"__ignoreMap":169},[252,5162,5163,5165,5167,5170,5172,5174,5176],{"class":254,"line":255},[252,5164,1508],{"class":262},[252,5166,1307],{"class":258},[252,5168,5169],{"class":367},"\"二维数组首地址：\"",[252,5171,1307],{"class":258},[252,5173,4019],{"class":262},[252,5175,1307],{"class":258},[252,5177,1330],{"class":262},[252,5179,5180,5182,5184,5187,5189,5191,5193,5196,5198,5200,5202],{"class":254,"line":170},[252,5181,1508],{"class":262},[252,5183,1307],{"class":258},[252,5185,5186],{"class":367},"\"二维数组第一行的首地址：\"",[252,5188,1307],{"class":258},[252,5190,263],{"class":262},[252,5192,266],{"class":258},[252,5194,5195],{"class":262},")arr[",[252,5197,454],{"class":311},[252,5199,1203],{"class":262},[252,5201,1307],{"class":258},[252,5203,1330],{"class":262},[252,5205,5206,5208,5210,5213,5215,5217,5219,5221,5223,5225,5227],{"class":254,"line":1318},[252,5207,1508],{"class":262},[252,5209,1307],{"class":258},[252,5211,5212],{"class":367},"\"二维数组第二行的首地址：\"",[252,5214,1307],{"class":258},[252,5216,263],{"class":262},[252,5218,266],{"class":258},[252,5220,5195],{"class":262},[252,5222,480],{"class":311},[252,5224,1203],{"class":262},[252,5226,1307],{"class":258},[252,5228,1330],{"class":262},[252,5230,5231,5233,5235,5238,5240,5242,5244,5246,5248,5250,5252,5254,5256,5258,5260,5262],{"class":254,"line":1333},[252,5232,1508],{"class":262},[252,5234,1307],{"class":258},[252,5236,5237],{"class":367},"\"二维数组第一个元素的首地址:\"",[252,5239,1307],{"class":258},[252,5241,263],{"class":262},[252,5243,266],{"class":258},[252,5245,692],{"class":262},[252,5247,616],{"class":258},[252,5249,4045],{"class":262},[252,5251,454],{"class":311},[252,5253,5040],{"class":262},[252,5255,454],{"class":311},[252,5257,1203],{"class":262},[252,5259,1307],{"class":258},[252,5261,1377],{"class":262},[252,5263,5264],{"class":321},"\u002F\u002F对于数，要加取址符\n",[5266,5267,5268],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":169,"searchDepth":170,"depth":170,"links":5270},[5271,5272,5273,5281,5282,5288,5293],{"id":197,"depth":170,"text":198},{"id":204,"depth":170,"text":205},{"id":221,"depth":170,"text":222,"children":5274},[5275,5276,5277,5278,5279,5280],{"id":226,"depth":1318,"text":227},{"id":279,"depth":1318,"text":280},{"id":348,"depth":1318,"text":349},{"id":1288,"depth":1318,"text":1289},{"id":1383,"depth":1318,"text":1384},{"id":1482,"depth":1318,"text":1483},{"id":1524,"depth":170,"text":1525},{"id":1592,"depth":170,"text":1593,"children":5283},[5284,5285,5286,5287],{"id":1596,"depth":1318,"text":1597},{"id":1618,"depth":1318,"text":1619},{"id":1627,"depth":1318,"text":1628},{"id":1636,"depth":1318,"text":1637},{"id":1645,"depth":170,"text":1646,"children":5289},[5290,5291,5292],{"id":1649,"depth":1318,"text":1650},{"id":2344,"depth":1318,"text":2345},{"id":3760,"depth":1318,"text":3761},{"id":3901,"depth":170,"text":3902,"children":5294},[5295,5296],{"id":3905,"depth":1318,"text":3906},{"id":4933,"depth":1318,"text":4934},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":189,"description":169},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5303,"title":5304,"body":5305,"description":169,"extension":179,"meta":6405,"navigation":181,"path":6406,"seo":6407,"stem":6408,"__hash__":6409},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5306,"toc":6397},[5307,5310,5314,5322,5330,5333,5399,5403,5406,5482,5486,5489,5492,5495,5708,5712,5717,5781,5786,5853,5858,5949,5952,6057,6061,6064,6070,6214,6218,6221,6235,6238,6283,6286,6394],[10,5308,5304],{"id":5309},"_2函数",[14,5311,5313],{"id":5312},"_21函数概述","2.1函数概述",[207,5315,5316,5319],{},[210,5317,5318],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[210,5320,5321],{},"语法：",[244,5323,5328],{"className":5324,"code":5326,"language":5327,"meta":169},[5325],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[22,5329,5326],{"__ignoreMap":169},[19,5331,5332],{},"小案例",[244,5334,5336],{"className":246,"code":5335,"language":248,"meta":169,"style":169},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[22,5337,5338,5343,5367,5371,5388,5395],{"__ignoreMap":169},[252,5339,5340],{"class":254,"line":255},[252,5341,5342],{"class":321},"\u002F\u002Fnum1,num2形参\n",[252,5344,5345,5347,5350,5352,5354,5358,5360,5362,5365],{"class":254,"line":170},[252,5346,266],{"class":258},[252,5348,5349],{"class":2102}," add",[252,5351,263],{"class":262},[252,5353,266],{"class":258},[252,5355,5357],{"class":5356},"s4XuR"," num1",[252,5359,641],{"class":262},[252,5361,266],{"class":258},[252,5363,5364],{"class":5356}," num2",[252,5366,269],{"class":262},[252,5368,5369],{"class":254,"line":1318},[252,5370,1685],{"class":262},[252,5372,5373,5375,5378,5380,5383,5385],{"class":254,"line":1333},[252,5374,2124],{"class":258},[252,5376,5377],{"class":262}," sum",[252,5379,308],{"class":258},[252,5381,5382],{"class":262},"num1",[252,5384,744],{"class":258},[252,5386,5387],{"class":262},"num2;\n",[252,5389,5390,5392],{"class":254,"line":1339},[252,5391,4229],{"class":258},[252,5393,5394],{"class":262}," sum;\n",[252,5396,5397],{"class":254,"line":1353},[252,5398,1704],{"class":262},[14,5400,5402],{"id":5401},"_22函数调用","2.2函数调用",[19,5404,5405],{},"调用刚刚写的求和函数",[244,5407,5409],{"className":246,"code":5408,"language":248,"meta":169,"style":169},"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",[22,5410,5411,5419,5423,5428,5440,5452,5461,5466,5478],{"__ignoreMap":169},[252,5412,5413,5415,5417],{"class":254,"line":255},[252,5414,266],{"class":258},[252,5416,2112],{"class":2102},[252,5418,2115],{"class":262},[252,5420,5421],{"class":254,"line":170},[252,5422,1685],{"class":262},[252,5424,5425],{"class":254,"line":1318},[252,5426,5427],{"class":321},"    \u002F\u002Fa,b实参\n",[252,5429,5430,5432,5434,5436,5438],{"class":254,"line":1333},[252,5431,2124],{"class":258},[252,5433,1537],{"class":262},[252,5435,308],{"class":258},[252,5437,454],{"class":311},[252,5439,1429],{"class":262},[252,5441,5442,5444,5446,5448,5450],{"class":254,"line":1339},[252,5443,2124],{"class":258},[252,5445,2972],{"class":262},[252,5447,308],{"class":258},[252,5449,454],{"class":311},[252,5451,1429],{"class":262},[252,5453,5454,5456,5458],{"class":254,"line":1353},[252,5455,2151],{"class":262},[252,5457,1568],{"class":258},[252,5459,5460],{"class":262},"a,b;\n",[252,5462,5463],{"class":254,"line":1359},[252,5464,5465],{"class":321},"    \u002F\u002F调用函数时，实参值传给了形参\n",[252,5467,5468,5470,5472,5475],{"class":254,"line":1450},[252,5469,1690],{"class":262},[252,5471,1307],{"class":258},[252,5473,5474],{"class":2102},"add",[252,5476,5477],{"class":262},"(a,b);\n",[252,5479,5480],{"class":254,"line":1456},[252,5481,1704],{"class":262},[14,5483,5485],{"id":5484},"_23值传递","2.3值传递",[19,5487,5488],{},"值传递就是函数调用时实参将数值传给形参",[19,5490,5491],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5493,5494],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[244,5496,5498],{"className":246,"code":5497,"language":248,"meta":169,"style":169},"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",[22,5499,5500,5522,5526,5539,5556,5574,5585,5594,5603,5616,5632,5648,5657,5661,5669,5673,5685,5697,5704],{"__ignoreMap":169},[252,5501,5502,5505,5508,5510,5512,5514,5516,5518,5520],{"class":254,"line":255},[252,5503,5504],{"class":258},"void",[252,5506,5507],{"class":2102}," swap",[252,5509,263],{"class":262},[252,5511,266],{"class":258},[252,5513,5357],{"class":5356},[252,5515,641],{"class":262},[252,5517,266],{"class":258},[252,5519,5364],{"class":5356},[252,5521,269],{"class":262},[252,5523,5524],{"class":254,"line":170},[252,5525,1685],{"class":262},[252,5527,5528,5530,5532,5535,5537],{"class":254,"line":1318},[252,5529,1690],{"class":262},[252,5531,1307],{"class":258},[252,5533,5534],{"class":367},"\"交换前：\"",[252,5536,1307],{"class":258},[252,5538,1330],{"class":262},[252,5540,5541,5543,5545,5548,5550,5552,5554],{"class":254,"line":1333},[252,5542,1690],{"class":262},[252,5544,1307],{"class":258},[252,5546,5547],{"class":367},"\"num1=\"",[252,5549,1307],{"class":258},[252,5551,5382],{"class":262},[252,5553,1307],{"class":258},[252,5555,1330],{"class":262},[252,5557,5558,5560,5562,5565,5567,5570,5572],{"class":254,"line":1339},[252,5559,1690],{"class":262},[252,5561,1307],{"class":258},[252,5563,5564],{"class":367},"\"num2=\"",[252,5566,1307],{"class":258},[252,5568,5569],{"class":262},"num2",[252,5571,1307],{"class":258},[252,5573,1330],{"class":262},[252,5575,5576,5578,5580,5582],{"class":254,"line":1353},[252,5577,2124],{"class":258},[252,5579,4394],{"class":262},[252,5581,308],{"class":258},[252,5583,5584],{"class":262},"num1;\n",[252,5586,5587,5590,5592],{"class":254,"line":1359},[252,5588,5589],{"class":262},"    num1",[252,5591,308],{"class":258},[252,5593,5387],{"class":262},[252,5595,5596,5599,5601],{"class":254,"line":1450},[252,5597,5598],{"class":262},"    num2",[252,5600,308],{"class":258},[252,5602,4419],{"class":262},[252,5604,5605,5607,5609,5612,5614],{"class":254,"line":1456},[252,5606,1690],{"class":262},[252,5608,1307],{"class":258},[252,5610,5611],{"class":367},"\"交换后：\"",[252,5613,1307],{"class":258},[252,5615,1330],{"class":262},[252,5617,5618,5620,5622,5624,5626,5628,5630],{"class":254,"line":1468},[252,5619,1690],{"class":262},[252,5621,1307],{"class":258},[252,5623,5547],{"class":367},[252,5625,1307],{"class":258},[252,5627,5382],{"class":262},[252,5629,1307],{"class":258},[252,5631,1330],{"class":262},[252,5633,5634,5636,5638,5640,5642,5644,5646],{"class":254,"line":1751},[252,5635,1690],{"class":262},[252,5637,1307],{"class":258},[252,5639,5564],{"class":367},[252,5641,1307],{"class":258},[252,5643,5569],{"class":262},[252,5645,1307],{"class":258},[252,5647,1330],{"class":262},[252,5649,5650,5652,5654],{"class":254,"line":1756},[252,5651,4229],{"class":258},[252,5653,318],{"class":262},[252,5655,5656],{"class":321},"\u002F\u002F或者不写\n",[252,5658,5659],{"class":254,"line":1762},[252,5660,1704],{"class":262},[252,5662,5663,5665,5667],{"class":254,"line":1767},[252,5664,266],{"class":258},[252,5666,2112],{"class":2102},[252,5668,2115],{"class":262},[252,5670,5671],{"class":254,"line":1781},[252,5672,1685],{"class":262},[252,5674,5675,5677,5679,5681,5683],{"class":254,"line":1786},[252,5676,2124],{"class":258},[252,5678,1537],{"class":262},[252,5680,308],{"class":258},[252,5682,709],{"class":311},[252,5684,1429],{"class":262},[252,5686,5687,5689,5691,5693,5695],{"class":254,"line":1792},[252,5688,2124],{"class":258},[252,5690,2972],{"class":262},[252,5692,308],{"class":258},[252,5694,963],{"class":311},[252,5696,1429],{"class":262},[252,5698,5699,5702],{"class":254,"line":1813},[252,5700,5701],{"class":2102},"    swap",[252,5703,5477],{"class":262},[252,5705,5706],{"class":254,"line":1818},[252,5707,1704],{"class":262},[14,5709,5711],{"id":5710},"_24函数的常见形式","2.4函数的常见形式",[207,5713,5714],{},[210,5715,5716],{},"无参无返",[244,5718,5720],{"className":246,"code":5719,"language":248,"meta":169,"style":169},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[22,5721,5722,5731,5735,5748,5752,5760,5764,5769,5777],{"__ignoreMap":169},[252,5723,5724,5726,5729],{"class":254,"line":255},[252,5725,5504],{"class":258},[252,5727,5728],{"class":2102}," test01",[252,5730,2115],{"class":262},[252,5732,5733],{"class":254,"line":170},[252,5734,1685],{"class":262},[252,5736,5737,5739,5741,5744,5746],{"class":254,"line":1318},[252,5738,1690],{"class":262},[252,5740,1307],{"class":258},[252,5742,5743],{"class":367},"\"你好\"",[252,5745,1307],{"class":258},[252,5747,1330],{"class":262},[252,5749,5750],{"class":254,"line":1333},[252,5751,1704],{"class":262},[252,5753,5754,5756,5758],{"class":254,"line":1339},[252,5755,266],{"class":258},[252,5757,2112],{"class":2102},[252,5759,2115],{"class":262},[252,5761,5762],{"class":254,"line":1353},[252,5763,1685],{"class":262},[252,5765,5766],{"class":254,"line":1359},[252,5767,5768],{"class":321},"    \u002F\u002F函数调用\n",[252,5770,5771,5774],{"class":254,"line":1450},[252,5772,5773],{"class":2102},"    test01",[252,5775,5776],{"class":262},"();\n",[252,5778,5779],{"class":254,"line":1456},[252,5780,1704],{"class":262},[207,5782,5783],{"start":170},[210,5784,5785],{},"有参无返",[244,5787,5789],{"className":246,"code":5788,"language":248,"meta":169,"style":169},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[22,5790,5791,5806,5810,5822,5826,5834,5838,5849],{"__ignoreMap":169},[252,5792,5793,5795,5798,5800,5802,5804],{"class":254,"line":255},[252,5794,5504],{"class":258},[252,5796,5797],{"class":2102}," test02",[252,5799,263],{"class":262},[252,5801,266],{"class":258},[252,5803,1537],{"class":5356},[252,5805,269],{"class":262},[252,5807,5808],{"class":254,"line":170},[252,5809,1685],{"class":262},[252,5811,5812,5814,5816,5818,5820],{"class":254,"line":1318},[252,5813,1690],{"class":262},[252,5815,1307],{"class":258},[252,5817,5743],{"class":367},[252,5819,1307],{"class":258},[252,5821,1330],{"class":262},[252,5823,5824],{"class":254,"line":1333},[252,5825,1704],{"class":262},[252,5827,5828,5830,5832],{"class":254,"line":1339},[252,5829,266],{"class":258},[252,5831,2112],{"class":2102},[252,5833,2115],{"class":262},[252,5835,5836],{"class":254,"line":1353},[252,5837,1685],{"class":262},[252,5839,5840,5843,5845,5847],{"class":254,"line":1359},[252,5841,5842],{"class":2102},"    test02",[252,5844,263],{"class":262},[252,5846,574],{"class":311},[252,5848,2858],{"class":262},[252,5850,5851],{"class":254,"line":1450},[252,5852,1704],{"class":262},[207,5854,5855],{"start":1318},[210,5856,5857],{},"无参有返",[244,5859,5861],{"className":246,"code":5860,"language":248,"meta":169,"style":169},"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",[22,5862,5863,5872,5876,5888,5897,5901,5909,5913,5926,5945],{"__ignoreMap":169},[252,5864,5865,5867,5870],{"class":254,"line":255},[252,5866,266],{"class":258},[252,5868,5869],{"class":2102}," test03",[252,5871,2115],{"class":262},[252,5873,5874],{"class":254,"line":170},[252,5875,1685],{"class":262},[252,5877,5878,5880,5882,5884,5886],{"class":254,"line":1318},[252,5879,1690],{"class":262},[252,5881,1307],{"class":258},[252,5883,5743],{"class":367},[252,5885,1307],{"class":258},[252,5887,1330],{"class":262},[252,5889,5890,5892,5895],{"class":254,"line":1333},[252,5891,4229],{"class":258},[252,5893,5894],{"class":311}," 100",[252,5896,1429],{"class":262},[252,5898,5899],{"class":254,"line":1339},[252,5900,1704],{"class":262},[252,5902,5903,5905,5907],{"class":254,"line":1353},[252,5904,266],{"class":258},[252,5906,2112],{"class":2102},[252,5908,2115],{"class":262},[252,5910,5911],{"class":254,"line":1359},[252,5912,1685],{"class":262},[252,5914,5915,5917,5919,5921,5924],{"class":254,"line":1450},[252,5916,2124],{"class":258},[252,5918,5357],{"class":262},[252,5920,308],{"class":258},[252,5922,5923],{"class":2102},"test03",[252,5925,5776],{"class":262},[252,5927,5928,5930,5932,5934,5936,5938,5940,5942],{"class":254,"line":1456},[252,5929,1690],{"class":262},[252,5931,1307],{"class":258},[252,5933,5547],{"class":367},[252,5935,1307],{"class":258},[252,5937,5382],{"class":262},[252,5939,1307],{"class":258},[252,5941,1377],{"class":262},[252,5943,5944],{"class":321}," \u002F\u002F100\n",[252,5946,5947],{"class":254,"line":1468},[252,5948,1704],{"class":262},[19,5950,5951],{},"4.有参有返",[244,5953,5955],{"className":246,"code":5954,"language":248,"meta":169,"style":169},"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",[22,5956,5957,5972,5976,5989,5995,5999,6008,6012,6024,6038,6053],{"__ignoreMap":169},[252,5958,5959,5961,5964,5966,5968,5970],{"class":254,"line":255},[252,5960,266],{"class":258},[252,5962,5963],{"class":2102}," test04",[252,5965,263],{"class":262},[252,5967,266],{"class":258},[252,5969,1537],{"class":5356},[252,5971,269],{"class":262},[252,5973,5974],{"class":254,"line":170},[252,5975,1685],{"class":262},[252,5977,5978,5980,5982,5985,5987],{"class":254,"line":1318},[252,5979,1690],{"class":262},[252,5981,1307],{"class":258},[252,5983,5984],{"class":367},"\"hello\"",[252,5986,1307],{"class":258},[252,5988,1330],{"class":262},[252,5990,5991,5993],{"class":254,"line":1333},[252,5992,4229],{"class":258},[252,5994,1571],{"class":262},[252,5996,5997],{"class":254,"line":1339},[252,5998,1704],{"class":262},[252,6000,6001,6003,6006],{"class":254,"line":1353},[252,6002,266],{"class":258},[252,6004,6005],{"class":2102}," mian",[252,6007,2115],{"class":262},[252,6009,6010],{"class":254,"line":1359},[252,6011,1685],{"class":262},[252,6013,6014,6016,6018,6020,6022],{"class":254,"line":1450},[252,6015,2124],{"class":258},[252,6017,2972],{"class":262},[252,6019,308],{"class":258},[252,6021,480],{"class":311},[252,6023,1429],{"class":262},[252,6025,6026,6028,6030,6032,6035],{"class":254,"line":1456},[252,6027,2124],{"class":258},[252,6029,2988],{"class":262},[252,6031,308],{"class":258},[252,6033,6034],{"class":2102},"test04",[252,6036,6037],{"class":262},"(b);\n",[252,6039,6040,6042,6044,6046,6048,6050],{"class":254,"line":1468},[252,6041,1690],{"class":262},[252,6043,1307],{"class":258},[252,6045,551],{"class":262},[252,6047,1307],{"class":258},[252,6049,1377],{"class":262},[252,6051,6052],{"class":321}," \u002F\u002F1\n",[252,6054,6055],{"class":254,"line":1751},[252,6056,1704],{"class":262},[14,6058,6060],{"id":6059},"_25函数的声明","2.5函数的声明",[19,6062,6063],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6065,6066,6067],{},"函数的",[412,6068,6069],{},"声明可以多次，但是函数的定义只能有一次",[244,6071,6073],{"className":246,"code":6072,"language":248,"meta":169,"style":169},"\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",[22,6074,6075,6080,6085,6110,6119,6123,6135,6147,6163,6167,6187,6191,6210],{"__ignoreMap":169},[252,6076,6077],{"class":254,"line":255},[252,6078,6079],{"class":321},"\u002F\u002F函数声明\n",[252,6081,6082],{"class":254,"line":170},[252,6083,6084],{"class":321},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[252,6086,6087,6089,6092,6094,6096,6098,6100,6102,6104,6107],{"class":254,"line":1318},[252,6088,266],{"class":258},[252,6090,6091],{"class":2102}," max",[252,6093,263],{"class":262},[252,6095,266],{"class":258},[252,6097,1537],{"class":5356},[252,6099,641],{"class":262},[252,6101,266],{"class":258},[252,6103,2972],{"class":5356},[252,6105,6106],{"class":262},");",[252,6108,6109],{"class":321},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[252,6111,6112,6114,6116],{"class":254,"line":1333},[252,6113,266],{"class":258},[252,6115,2112],{"class":2102},[252,6117,6118],{"class":262},"() \n",[252,6120,6121],{"class":254,"line":1339},[252,6122,1685],{"class":262},[252,6124,6125,6127,6129,6131,6133],{"class":254,"line":1353},[252,6126,2124],{"class":258},[252,6128,1537],{"class":262},[252,6130,308],{"class":258},[252,6132,709],{"class":311},[252,6134,1429],{"class":262},[252,6136,6137,6139,6141,6143,6145],{"class":254,"line":1359},[252,6138,2124],{"class":258},[252,6140,2972],{"class":262},[252,6142,308],{"class":258},[252,6144,963],{"class":311},[252,6146,1429],{"class":262},[252,6148,6149,6151,6153,6156,6159,6161],{"class":254,"line":1450},[252,6150,1690],{"class":262},[252,6152,1307],{"class":258},[252,6154,6155],{"class":2102},"max",[252,6157,6158],{"class":262},"(a,b)",[252,6160,1307],{"class":258},[252,6162,1330],{"class":262},[252,6164,6165],{"class":254,"line":1456},[252,6166,1704],{"class":262},[252,6168,6169,6171,6173,6175,6177,6179,6181,6183,6185],{"class":254,"line":1468},[252,6170,266],{"class":258},[252,6172,6091],{"class":2102},[252,6174,263],{"class":262},[252,6176,266],{"class":258},[252,6178,1537],{"class":5356},[252,6180,641],{"class":262},[252,6182,266],{"class":258},[252,6184,2972],{"class":5356},[252,6186,269],{"class":262},[252,6188,6189],{"class":254,"line":1751},[252,6190,1685],{"class":262},[252,6192,6193,6195,6197,6199,6201,6203,6205,6207],{"class":254,"line":1756},[252,6194,4229],{"class":258},[252,6196,1537],{"class":262},[252,6198,1223],{"class":258},[252,6200,526],{"class":262},[252,6202,1249],{"class":258},[252,6204,501],{"class":262},[252,6206,1122],{"class":258},[252,6208,6209],{"class":262},"b;\n",[252,6211,6212],{"class":254,"line":1762},[252,6213,1704],{"class":262},[14,6215,6217],{"id":6216},"_26函数的分文件编写","2.6函数的分文件编写",[19,6219,6220],{},"4个步骤：",[1270,6222,6223,6226,6229,6232],{},[210,6224,6225],{},"1.创建后缀名为.h的头文件",[210,6227,6228],{},"2.创建后缀名为.cpp的源文件",[210,6230,6231],{},"3.在头文件中写函数的定义",[210,6233,6234],{},"4.在源文件中写函数的定义\n示例：",[19,6236,6237],{},"头文件：swap.h",[244,6239,6241],{"className":246,"code":6240,"language":248,"meta":169,"style":169},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[22,6242,6243,6249,6259,6263],{"__ignoreMap":169},[252,6244,6245,6247],{"class":254,"line":255},[252,6246,2088],{"class":258},[252,6248,2091],{"class":367},[252,6250,6251,6253,6255,6257],{"class":254,"line":170},[252,6252,2096],{"class":258},[252,6254,2099],{"class":258},[252,6256,2103],{"class":2102},[252,6258,1429],{"class":262},[252,6260,6261],{"class":254,"line":1318},[252,6262,6079],{"class":321},[252,6264,6265,6267,6269,6271,6273,6275,6277,6279,6281],{"class":254,"line":1333},[252,6266,5504],{"class":258},[252,6268,5507],{"class":2102},[252,6270,263],{"class":262},[252,6272,266],{"class":258},[252,6274,1537],{"class":5356},[252,6276,641],{"class":262},[252,6278,266],{"class":258},[252,6280,2972],{"class":5356},[252,6282,2858],{"class":262},[19,6284,6285],{},"源文件：swap.cpp",[244,6287,6289],{"className":246,"code":6288,"language":248,"meta":169,"style":169},"#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",[22,6290,6291,6298,6303,6323,6327,6338,6347,6356,6373,6390],{"__ignoreMap":169},[252,6292,6293,6295],{"class":254,"line":255},[252,6294,2088],{"class":258},[252,6296,6297],{"class":367}," \"swap.h\"\n",[252,6299,6300],{"class":254,"line":170},[252,6301,6302],{"class":321},"\u002F\u002F函数的定义\n",[252,6304,6305,6307,6309,6311,6313,6315,6317,6319,6321],{"class":254,"line":1318},[252,6306,5504],{"class":258},[252,6308,5507],{"class":2102},[252,6310,263],{"class":262},[252,6312,266],{"class":258},[252,6314,1537],{"class":5356},[252,6316,641],{"class":262},[252,6318,266],{"class":258},[252,6320,2972],{"class":5356},[252,6322,269],{"class":262},[252,6324,6325],{"class":254,"line":1333},[252,6326,1685],{"class":262},[252,6328,6329,6331,6333,6335],{"class":254,"line":1339},[252,6330,2124],{"class":258},[252,6332,4394],{"class":262},[252,6334,308],{"class":258},[252,6336,6337],{"class":262},"a;\n",[252,6339,6340,6343,6345],{"class":254,"line":1353},[252,6341,6342],{"class":262},"    a",[252,6344,308],{"class":258},[252,6346,6209],{"class":262},[252,6348,6349,6352,6354],{"class":254,"line":1359},[252,6350,6351],{"class":262},"    b",[252,6353,308],{"class":258},[252,6355,4419],{"class":262},[252,6357,6358,6360,6362,6365,6367,6369,6371],{"class":254,"line":1450},[252,6359,1690],{"class":262},[252,6361,1307],{"class":258},[252,6363,6364],{"class":367},"\"a=\"",[252,6366,1307],{"class":258},[252,6368,501],{"class":262},[252,6370,1307],{"class":258},[252,6372,1330],{"class":262},[252,6374,6375,6377,6379,6382,6384,6386,6388],{"class":254,"line":1456},[252,6376,1690],{"class":262},[252,6378,1307],{"class":258},[252,6380,6381],{"class":367},"\"b=\"",[252,6383,1307],{"class":258},[252,6385,526],{"class":262},[252,6387,1307],{"class":258},[252,6389,1330],{"class":262},[252,6391,6392],{"class":254,"line":1468},[252,6393,1704],{"class":262},[5266,6395,6396],{},"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":169,"searchDepth":170,"depth":170,"links":6398},[6399,6400,6401,6402,6403,6404],{"id":5312,"depth":170,"text":5313},{"id":5401,"depth":170,"text":5402},{"id":5484,"depth":170,"text":5485},{"id":5710,"depth":170,"text":5711},{"id":6059,"depth":170,"text":6060},{"id":6216,"depth":170,"text":6217},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5304,"description":169},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6411,"title":6412,"body":6413,"description":6420,"extension":179,"meta":7825,"navigation":181,"path":7826,"seo":7827,"stem":7828,"__hash__":7829},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6414,"toc":7815},[6415,6418,6421,6425,6587,6591,6594,6597,6600,6603,6743,6747,6750,6753,6756,6821,6825,6830,6897,6900,6904,6907,6918,6923,6943,6946,6951,6970,6973,6977,6996,6999,7003,7238,7242,7245,7248,7251,7413,7416,7420,7423,7429,7812],[10,6416,6412],{"id":6417},"_3指针",[19,6419,6420],{},"通过指针保存一个地址，指针就是个地址",[14,6422,6424],{"id":6423},"_31定义指针","3.1定义指针",[244,6426,6428],{"className":246,"code":6427,"language":248,"meta":169,"style":169},"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",[22,6429,6430,6438,6442,6447,6459,6464,6472,6482,6500,6520,6524,6529,6534,6539,6553,6569,6583],{"__ignoreMap":169},[252,6431,6432,6434,6436],{"class":254,"line":255},[252,6433,266],{"class":258},[252,6435,2112],{"class":2102},[252,6437,2115],{"class":262},[252,6439,6440],{"class":254,"line":170},[252,6441,1685],{"class":262},[252,6443,6444],{"class":254,"line":1318},[252,6445,6446],{"class":321},"    \u002F\u002F1.定义指针\n",[252,6448,6449,6451,6453,6455,6457],{"class":254,"line":1333},[252,6450,2124],{"class":258},[252,6452,1537],{"class":262},[252,6454,308],{"class":258},[252,6456,709],{"class":311},[252,6458,1429],{"class":262},[252,6460,6461],{"class":254,"line":1339},[252,6462,6463],{"class":321},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[252,6465,6466,6469],{"class":254,"line":1353},[252,6467,6468],{"class":258},"    int*",[252,6470,6471],{"class":262},"p;\n",[252,6473,6474,6477,6480],{"class":254,"line":1359},[252,6475,6476],{"class":262},"    p",[252,6478,6479],{"class":258},"=&",[252,6481,6337],{"class":262},[252,6483,6484,6486,6488,6491,6494,6496,6498],{"class":254,"line":1450},[252,6485,1690],{"class":262},[252,6487,1307],{"class":258},[252,6489,6490],{"class":367},"\"a的地址为：\"",[252,6492,6493],{"class":258},"\u003C\u003C&",[252,6495,501],{"class":262},[252,6497,1307],{"class":258},[252,6499,1330],{"class":262},[252,6501,6502,6504,6506,6509,6511,6513,6515,6517],{"class":254,"line":1456},[252,6503,1690],{"class":262},[252,6505,1307],{"class":258},[252,6507,6508],{"class":367},"\"指针p为：\"",[252,6510,1307],{"class":258},[252,6512,19],{"class":262},[252,6514,1307],{"class":258},[252,6516,1377],{"class":262},[252,6518,6519],{"class":321},"\u002F\u002F指针p表示的就是a的地址\n",[252,6521,6522],{"class":254,"line":1468},[252,6523,2539],{"emptyLinePlaceholder":181},[252,6525,6526],{"class":254,"line":1751},[252,6527,6528],{"class":321},"    \u002F\u002F2.使用指针\n",[252,6530,6531],{"class":254,"line":1756},[252,6532,6533],{"class":321},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[252,6535,6536],{"class":254,"line":1762},[252,6537,6538],{"class":321},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[252,6540,6541,6544,6546,6548,6551],{"class":254,"line":1767},[252,6542,6543],{"class":258},"    *",[252,6545,19],{"class":262},[252,6547,308],{"class":258},[252,6549,6550],{"class":311},"1000",[252,6552,1429],{"class":262},[252,6554,6555,6557,6560,6562,6564,6566],{"class":254,"line":1781},[252,6556,1690],{"class":262},[252,6558,6559],{"class":258},"\u003C\u003C*",[252,6561,19],{"class":262},[252,6563,1307],{"class":258},[252,6565,1377],{"class":262},[252,6567,6568],{"class":321},"\u002F\u002F1000\n",[252,6570,6571,6573,6575,6577,6579,6581],{"class":254,"line":1786},[252,6572,1690],{"class":262},[252,6574,1307],{"class":258},[252,6576,501],{"class":262},[252,6578,1307],{"class":258},[252,6580,1377],{"class":262},[252,6582,6568],{"class":321},[252,6584,6585],{"class":254,"line":1792},[252,6586,1704],{"class":262},[14,6588,6590],{"id":6589},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6592,6593],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6595,6596],{},"在32位操作系统下：占用4个字节空间",[19,6598,6599],{},"在64位操作系统下：占用8个字节空间",[19,6601,6602],{},"上方是不管啥数据类型的",[244,6604,6606],{"className":246,"code":6605,"language":248,"meta":169,"style":169},"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",[22,6607,6608,6616,6620,6625,6637,6642,6647,6652,6665,6687,6713,6739],{"__ignoreMap":169},[252,6609,6610,6612,6614],{"class":254,"line":255},[252,6611,266],{"class":258},[252,6613,2112],{"class":2102},[252,6615,2115],{"class":262},[252,6617,6618],{"class":254,"line":170},[252,6619,1685],{"class":262},[252,6621,6622],{"class":254,"line":1318},[252,6623,6624],{"class":321},"    \u002F\u002F指针所占内存空间\n",[252,6626,6627,6629,6631,6633,6635],{"class":254,"line":1333},[252,6628,2124],{"class":258},[252,6630,1537],{"class":262},[252,6632,308],{"class":258},[252,6634,709],{"class":311},[252,6636,1429],{"class":262},[252,6638,6639],{"class":254,"line":1339},[252,6640,6641],{"class":321},"    \u002F\u002Fint *p;\n",[252,6643,6644],{"class":254,"line":1353},[252,6645,6646],{"class":321},"    \u002F\u002Fp=&a;\n",[252,6648,6649],{"class":254,"line":1359},[252,6650,6651],{"class":321},"    \u002F\u002F上述可以写为以下：\n",[252,6653,6654,6656,6659,6661,6663],{"class":254,"line":1450},[252,6655,2124],{"class":258},[252,6657,6658],{"class":258}," *",[252,6660,19],{"class":262},[252,6662,6479],{"class":258},[252,6664,6337],{"class":262},[252,6666,6667,6670,6672,6675,6677,6680,6682,6684],{"class":254,"line":1456},[252,6668,6669],{"class":262},"    cout ",[252,6671,1307],{"class":258},[252,6673,6674],{"class":367},"\"sizeof(int *)\"",[252,6676,1511],{"class":258},[252,6678,6679],{"class":262},"(p)",[252,6681,1307],{"class":258},[252,6683,1377],{"class":262},[252,6685,6686],{"class":321},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[252,6688,6689,6691,6693,6695,6697,6699,6701,6703,6705,6707,6710],{"class":254,"line":1468},[252,6690,6669],{"class":262},[252,6692,1307],{"class":258},[252,6694,6674],{"class":367},[252,6696,1511],{"class":258},[252,6698,263],{"class":262},[252,6700,266],{"class":258},[252,6702,6658],{"class":258},[252,6704,692],{"class":262},[252,6706,1307],{"class":258},[252,6708,6709],{"class":262},"endl",[252,6711,6712],{"class":321},"  \u002F\u002F4字节(32位的话)\n",[252,6714,6715,6717,6719,6722,6724,6726,6728,6730,6732,6734,6736],{"class":254,"line":1751},[252,6716,6669],{"class":262},[252,6718,1307],{"class":258},[252,6720,6721],{"class":367},"\"sizeof(char *)\"",[252,6723,1511],{"class":258},[252,6725,263],{"class":262},[252,6727,359],{"class":258},[252,6729,6658],{"class":258},[252,6731,692],{"class":262},[252,6733,1307],{"class":258},[252,6735,1377],{"class":262},[252,6737,6738],{"class":321}," \u002F\u002F4字节(32位的话)\n",[252,6740,6741],{"class":254,"line":1756},[252,6742,1704],{"class":262},[14,6744,6746],{"id":6745},"_33空指针","3.3空指针",[19,6748,6749],{},"空指针：指针变量指向内存中编号为0的空间",[19,6751,6752],{},"用途：初始化指针变量",[19,6754,6755],{},"注意：空指针指向的内存是不可以访问的",[244,6757,6759],{"className":246,"code":6758,"language":248,"meta":169,"style":169},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[22,6760,6761,6769,6773,6778,6792,6797,6812,6817],{"__ignoreMap":169},[252,6762,6763,6765,6767],{"class":254,"line":255},[252,6764,266],{"class":258},[252,6766,2112],{"class":2102},[252,6768,2115],{"class":262},[252,6770,6771],{"class":254,"line":170},[252,6772,1685],{"class":262},[252,6774,6775],{"class":254,"line":1318},[252,6776,6777],{"class":321},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[252,6779,6780,6782,6784,6786,6788,6790],{"class":254,"line":1333},[252,6781,2124],{"class":258},[252,6783,6658],{"class":258},[252,6785,19],{"class":262},[252,6787,308],{"class":258},[252,6789,2531],{"class":311},[252,6791,1429],{"class":262},[252,6793,6794],{"class":254,"line":1339},[252,6795,6796],{"class":321},"    \u002F\u002F2.空指针不能进行访问\n",[252,6798,6799,6801,6803,6805,6807,6809],{"class":254,"line":1353},[252,6800,6543],{"class":258},[252,6802,19],{"class":262},[252,6804,308],{"class":258},[252,6806,574],{"class":311},[252,6808,318],{"class":262},[252,6810,6811],{"class":321},"\u002F\u002F直接报错，压根不能访问\n",[252,6813,6814],{"class":254,"line":1359},[252,6815,6816],{"class":321},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[252,6818,6819],{"class":254,"line":1450},[252,6820,1704],{"class":262},[14,6822,6824],{"id":6823},"_34野指针","3.4野指针",[19,6826,6827],{},[412,6828,6829],{},"指针变量指向非法的内存空间",[244,6831,6833],{"className":246,"code":6832,"language":248,"meta":169,"style":169},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[22,6834,6835,6843,6847,6876,6881,6893],{"__ignoreMap":169},[252,6836,6837,6839,6841],{"class":254,"line":255},[252,6838,266],{"class":258},[252,6840,2112],{"class":2102},[252,6842,2115],{"class":262},[252,6844,6845],{"class":254,"line":170},[252,6846,1685],{"class":262},[252,6848,6849,6851,6853,6855,6857,6859,6861,6863,6865,6868,6871,6873],{"class":254,"line":1318},[252,6850,2124],{"class":258},[252,6852,6658],{"class":258},[252,6854,19],{"class":262},[252,6856,308],{"class":258},[252,6858,263],{"class":262},[252,6860,266],{"class":258},[252,6862,6658],{"class":258},[252,6864,692],{"class":262},[252,6866,6867],{"class":258},"0x",[252,6869,6870],{"class":311},"1100",[252,6872,318],{"class":262},[252,6874,6875],{"class":321}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[252,6877,6878],{"class":254,"line":1333},[252,6879,6880],{"class":321},"    \u002F\u002F访问野指针报错\n",[252,6882,6883,6885,6887,6889,6891],{"class":254,"line":1339},[252,6884,1690],{"class":262},[252,6886,6559],{"class":258},[252,6888,19],{"class":262},[252,6890,1307],{"class":258},[252,6892,1330],{"class":262},[252,6894,6895],{"class":254,"line":1353},[252,6896,1704],{"class":262},[19,6898,6899],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,6901,6903],{"id":6902},"_35const修饰指针","3.5const修饰指针",[19,6905,6906],{},"三种情况：",[1270,6908,6909,6912,6915],{},[210,6910,6911],{},"const修饰指针 常量指针",[210,6913,6914],{},"const修饰常量 指针常量",[210,6916,6917],{},"const即修饰指针，又修饰常量",[207,6919,6920],{},[210,6921,6922],{},"常量指针",[244,6924,6926],{"className":246,"code":6925,"language":248,"meta":169,"style":169},"const int *p=&a;\n",[22,6927,6928],{"__ignoreMap":169},[252,6929,6930,6933,6935,6937,6939,6941],{"class":254,"line":255},[252,6931,6932],{"class":258},"const",[252,6934,2521],{"class":258},[252,6936,6658],{"class":258},[252,6938,19],{"class":262},[252,6940,6479],{"class":258},[252,6942,6337],{"class":262},[19,6944,6945],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[207,6947,6948],{"start":170},[210,6949,6950],{},"指针常量",[244,6952,6954],{"className":246,"code":6953,"language":248,"meta":169,"style":169},"int *const p=&a;\n",[22,6955,6956],{"__ignoreMap":169},[252,6957,6958,6960,6963,6966,6968],{"class":254,"line":255},[252,6959,266],{"class":258},[252,6961,6962],{"class":258}," *const",[252,6964,6965],{"class":262}," p",[252,6967,6479],{"class":258},[252,6969,6337],{"class":262},[19,6971,6972],{},"指针的指向不可以改，指针指向的值可以改",[207,6974,6975],{"start":1318},[210,6976,6917],{},[244,6978,6980],{"className":246,"code":6979,"language":248,"meta":169,"style":169},"const int *const p=&a;\n",[22,6981,6982],{"__ignoreMap":169},[252,6983,6984,6986,6988,6990,6992,6994],{"class":254,"line":255},[252,6985,6932],{"class":258},[252,6987,2521],{"class":258},[252,6989,6962],{"class":258},[252,6991,6965],{"class":262},[252,6993,6479],{"class":258},[252,6995,6337],{"class":262},[19,6997,6998],{},"指针的指向和指针指向的值都不可以改变",[14,7000,7002],{"id":7001},"_36指针和数组","3.6指针和数组",[244,7004,7006],{"className":246,"code":7005,"language":248,"meta":169,"style":169},"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",[22,7007,7008,7016,7020,7025,7079,7100,7116,7132,7143,7160,7165,7179,7205,7209,7221,7230,7234],{"__ignoreMap":169},[252,7009,7010,7012,7014],{"class":254,"line":255},[252,7011,266],{"class":258},[252,7013,2112],{"class":2102},[252,7015,2115],{"class":262},[252,7017,7018],{"class":254,"line":170},[252,7019,1685],{"class":262},[252,7021,7022],{"class":254,"line":1318},[252,7023,7024],{"class":321},"    \u002F\u002F利用指针访问数组中的元素\n",[252,7026,7027,7029,7031,7033,7035,7037,7039,7041,7043,7045,7047,7049,7051,7053,7055,7057,7059,7061,7063,7065,7067,7069,7071,7073,7075,7077],{"class":254,"line":1333},[252,7028,2124],{"class":258},[252,7030,4101],{"class":262},[252,7032,709],{"class":311},[252,7034,1203],{"class":262},[252,7036,308],{"class":258},[252,7038,1159],{"class":262},[252,7040,480],{"class":311},[252,7042,641],{"class":262},[252,7044,340],{"class":311},[252,7046,641],{"class":262},[252,7048,334],{"class":311},[252,7050,641],{"class":262},[252,7052,556],{"class":311},[252,7054,641],{"class":262},[252,7056,582],{"class":311},[252,7058,641],{"class":262},[252,7060,607],{"class":311},[252,7062,641],{"class":262},[252,7064,632],{"class":311},[252,7066,641],{"class":262},[252,7068,658],{"class":311},[252,7070,641],{"class":262},[252,7072,683],{"class":311},[252,7074,641],{"class":262},[252,7076,709],{"class":311},[252,7078,4134],{"class":262},[252,7080,7081,7083,7085,7088,7090,7092,7094,7096,7098],{"class":254,"line":1339},[252,7082,1690],{"class":262},[252,7084,1307],{"class":258},[252,7086,7087],{"class":367},"\"数组的第一个元素为：\"",[252,7089,1307],{"class":258},[252,7091,4045],{"class":262},[252,7093,454],{"class":311},[252,7095,1203],{"class":262},[252,7097,1307],{"class":258},[252,7099,1330],{"class":262},[252,7101,7102,7104,7106,7108,7110,7113],{"class":254,"line":1353},[252,7103,2124],{"class":258},[252,7105,6658],{"class":258},[252,7107,19],{"class":262},[252,7109,308],{"class":258},[252,7111,7112],{"class":262},"arr;",[252,7114,7115],{"class":321},"\u002F\u002F注意数才要加取地址符号&\n",[252,7117,7118,7120,7122,7124,7126,7128,7130],{"class":254,"line":1359},[252,7119,1690],{"class":262},[252,7121,1307],{"class":258},[252,7123,7087],{"class":367},[252,7125,6559],{"class":258},[252,7127,19],{"class":262},[252,7129,1307],{"class":258},[252,7131,1330],{"class":262},[252,7133,7134,7136,7138,7140],{"class":254,"line":1450},[252,7135,6476],{"class":262},[252,7137,2431],{"class":258},[252,7139,318],{"class":262},[252,7141,7142],{"class":321}," \u002F\u002F让指针向后偏移4个字节\n",[252,7144,7145,7147,7149,7152,7154,7156,7158],{"class":254,"line":1456},[252,7146,1690],{"class":262},[252,7148,1307],{"class":258},[252,7150,7151],{"class":367},"\"数组的第二个元素为：\"",[252,7153,6559],{"class":258},[252,7155,19],{"class":262},[252,7157,1307],{"class":258},[252,7159,1330],{"class":262},[252,7161,7162],{"class":254,"line":1468},[252,7163,7164],{"class":321},"    \u002F\u002F利用指针遍历数组\n",[252,7166,7167,7169,7171,7174,7176],{"class":254,"line":1751},[252,7168,2124],{"class":258},[252,7170,6658],{"class":258},[252,7172,7173],{"class":262},"p2",[252,7175,308],{"class":258},[252,7177,7178],{"class":262},"arr;\n",[252,7180,7181,7183,7185,7187,7189,7191,7193,7195,7197,7199,7201,7203],{"class":254,"line":1756},[252,7182,3340],{"class":258},[252,7184,1797],{"class":262},[252,7186,266],{"class":258},[252,7188,3171],{"class":262},[252,7190,308],{"class":258},[252,7192,454],{"class":311},[252,7194,3178],{"class":262},[252,7196,1173],{"class":258},[252,7198,709],{"class":311},[252,7200,3178],{"class":262},[252,7202,2431],{"class":258},[252,7204,269],{"class":262},[252,7206,7207],{"class":254,"line":1762},[252,7208,2169],{"class":262},[252,7210,7211,7213,7215,7217,7219],{"class":254,"line":1767},[252,7212,3590],{"class":262},[252,7214,6559],{"class":258},[252,7216,7173],{"class":262},[252,7218,1307],{"class":258},[252,7220,1330],{"class":262},[252,7222,7223,7226,7228],{"class":254,"line":1781},[252,7224,7225],{"class":262},"        p2",[252,7227,2431],{"class":258},[252,7229,1429],{"class":262},[252,7231,7232],{"class":254,"line":1786},[252,7233,2326],{"class":262},[252,7235,7236],{"class":254,"line":1792},[252,7237,1704],{"class":262},[14,7239,7241],{"id":7240},"_37指针和函数","3.7指针和函数",[19,7243,7244],{},"利用指针做函数参数，可以修改实参的值",[19,7246,7247],{},"值传递：只改变形参，不改变实参",[19,7249,7250],{},"地址传递：",[244,7252,7254],{"className":246,"code":7253,"language":248,"meta":169,"style":169},"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",[22,7255,7256,7281,7285,7297,7308,7318,7322,7330,7334,7346,7358,7363,7379,7394,7409],{"__ignoreMap":169},[252,7257,7258,7260,7262,7264,7266,7268,7271,7273,7275,7277,7279],{"class":254,"line":255},[252,7259,5504],{"class":258},[252,7261,5507],{"class":2102},[252,7263,263],{"class":262},[252,7265,266],{"class":258},[252,7267,6658],{"class":258},[252,7269,7270],{"class":5356},"p1",[252,7272,641],{"class":262},[252,7274,266],{"class":258},[252,7276,6658],{"class":258},[252,7278,7173],{"class":5356},[252,7280,269],{"class":262},[252,7282,7283],{"class":254,"line":170},[252,7284,1685],{"class":262},[252,7286,7287,7289,7291,7294],{"class":254,"line":1318},[252,7288,2124],{"class":258},[252,7290,4394],{"class":262},[252,7292,7293],{"class":258},"=*",[252,7295,7296],{"class":262},"p1;\n",[252,7298,7299,7301,7303,7305],{"class":254,"line":1333},[252,7300,6543],{"class":258},[252,7302,7270],{"class":262},[252,7304,7293],{"class":258},[252,7306,7307],{"class":262},"p2;\n",[252,7309,7310,7312,7314,7316],{"class":254,"line":1339},[252,7311,6543],{"class":258},[252,7313,7173],{"class":262},[252,7315,308],{"class":258},[252,7317,4419],{"class":262},[252,7319,7320],{"class":254,"line":1353},[252,7321,1704],{"class":262},[252,7323,7324,7326,7328],{"class":254,"line":1359},[252,7325,266],{"class":258},[252,7327,2112],{"class":2102},[252,7329,2115],{"class":262},[252,7331,7332],{"class":254,"line":1450},[252,7333,1685],{"class":262},[252,7335,7336,7338,7340,7342,7344],{"class":254,"line":1456},[252,7337,2124],{"class":258},[252,7339,1537],{"class":262},[252,7341,308],{"class":258},[252,7343,709],{"class":311},[252,7345,1429],{"class":262},[252,7347,7348,7350,7352,7354,7356],{"class":254,"line":1468},[252,7349,2124],{"class":258},[252,7351,2972],{"class":262},[252,7353,308],{"class":258},[252,7355,963],{"class":311},[252,7357,1429],{"class":262},[252,7359,7360],{"class":254,"line":1751},[252,7361,7362],{"class":321},"    \u002F\u002F地址传递\n",[252,7364,7365,7367,7369,7371,7374,7376],{"class":254,"line":1756},[252,7366,5701],{"class":2102},[252,7368,263],{"class":262},[252,7370,616],{"class":258},[252,7372,7373],{"class":262},"a,",[252,7375,616],{"class":258},[252,7377,7378],{"class":262},"b);\n",[252,7380,7381,7383,7385,7387,7389,7391],{"class":254,"line":1762},[252,7382,1690],{"class":262},[252,7384,1307],{"class":258},[252,7386,501],{"class":262},[252,7388,1307],{"class":258},[252,7390,1377],{"class":262},[252,7392,7393],{"class":321},"\u002F\u002F20\n",[252,7395,7396,7398,7400,7402,7404,7406],{"class":254,"line":1767},[252,7397,1690],{"class":262},[252,7399,1307],{"class":258},[252,7401,526],{"class":262},[252,7403,1307],{"class":258},[252,7405,1377],{"class":262},[252,7407,7408],{"class":321},"\u002F\u002F10\n",[252,7410,7411],{"class":254,"line":1781},[252,7412,1704],{"class":262},[19,7414,7415],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7417,7419],{"id":7418},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7421,7422],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7424,7425,7426,7428],{},"例如数组：int arr",[252,7427,709],{},"={4,3,6,9,1,2,10,8,7,5}",[244,7430,7432],{"className":246,"code":7431,"language":248,"meta":169,"style":169},"#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",[22,7433,7434,7440,7450,7474,7478,7509,7513,7547,7551,7569,7573,7584,7599,7614,7618,7622,7626,7630,7634,7642,7646,7651,7705,7717,7729,7734,7742,7746,7751,7776,7780,7795,7804,7808],{"__ignoreMap":169},[252,7435,7436,7438],{"class":254,"line":255},[252,7437,2088],{"class":258},[252,7439,2091],{"class":367},[252,7441,7442,7444,7446,7448],{"class":254,"line":170},[252,7443,2096],{"class":258},[252,7445,2099],{"class":258},[252,7447,2103],{"class":2102},[252,7449,1429],{"class":262},[252,7451,7452,7454,7457,7459,7461,7463,7465,7467,7469,7472],{"class":254,"line":1318},[252,7453,5504],{"class":258},[252,7455,7456],{"class":2102}," bubbleSort",[252,7458,263],{"class":262},[252,7460,266],{"class":258},[252,7462,6658],{"class":258},[252,7464,19],{"class":5356},[252,7466,641],{"class":262},[252,7468,266],{"class":258},[252,7470,7471],{"class":5356}," len",[252,7473,269],{"class":262},[252,7475,7476],{"class":254,"line":1333},[252,7477,1685],{"class":262},[252,7479,7480,7482,7484,7486,7488,7490,7492,7494,7496,7499,7501,7503,7505,7507],{"class":254,"line":1339},[252,7481,3340],{"class":258},[252,7483,263],{"class":262},[252,7485,266],{"class":258},[252,7487,3171],{"class":262},[252,7489,308],{"class":258},[252,7491,454],{"class":311},[252,7493,3178],{"class":262},[252,7495,1173],{"class":258},[252,7497,7498],{"class":262},"len",[252,7500,795],{"class":258},[252,7502,480],{"class":311},[252,7504,3178],{"class":262},[252,7506,2431],{"class":258},[252,7508,269],{"class":262},[252,7510,7511],{"class":254,"line":1353},[252,7512,2169],{"class":262},[252,7514,7515,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543,7545],{"class":254,"line":1359},[252,7516,3542],{"class":258},[252,7518,263],{"class":262},[252,7520,266],{"class":258},[252,7522,3549],{"class":262},[252,7524,308],{"class":258},[252,7526,454],{"class":311},[252,7528,3556],{"class":262},[252,7530,1173],{"class":258},[252,7532,7498],{"class":262},[252,7534,795],{"class":258},[252,7536,704],{"class":262},[252,7538,795],{"class":258},[252,7540,480],{"class":311},[252,7542,3556],{"class":262},[252,7544,2431],{"class":258},[252,7546,269],{"class":262},[252,7548,7549],{"class":254,"line":1450},[252,7550,2649],{"class":262},[252,7552,7553,7555,7558,7560,7563,7565,7567],{"class":254,"line":1456},[252,7554,4781],{"class":258},[252,7556,7557],{"class":262},"(p[j]",[252,7559,1223],{"class":258},[252,7561,7562],{"class":262},"p[j",[252,7564,744],{"class":258},[252,7566,480],{"class":311},[252,7568,4796],{"class":262},[252,7570,7571],{"class":254,"line":1468},[252,7572,4801],{"class":262},[252,7574,7575,7577,7579,7581],{"class":254,"line":1751},[252,7576,4806],{"class":258},[252,7578,4394],{"class":262},[252,7580,308],{"class":258},[252,7582,7583],{"class":262},"p[j];\n",[252,7585,7586,7589,7591,7593,7595,7597],{"class":254,"line":1756},[252,7587,7588],{"class":262},"                p[j]",[252,7590,308],{"class":258},[252,7592,7562],{"class":262},[252,7594,744],{"class":258},[252,7596,480],{"class":311},[252,7598,4829],{"class":262},[252,7600,7601,7604,7606,7608,7610,7612],{"class":254,"line":1762},[252,7602,7603],{"class":262},"                p[j",[252,7605,744],{"class":258},[252,7607,480],{"class":311},[252,7609,1203],{"class":262},[252,7611,308],{"class":258},[252,7613,4419],{"class":262},[252,7615,7616],{"class":254,"line":1767},[252,7617,4849],{"class":262},[252,7619,7620],{"class":254,"line":1781},[252,7621,2668],{"class":262},[252,7623,7624],{"class":254,"line":1786},[252,7625,2326],{"class":262},[252,7627,7628],{"class":254,"line":1792},[252,7629,1704],{"class":262},[252,7631,7632],{"class":254,"line":1813},[252,7633,2539],{"emptyLinePlaceholder":181},[252,7635,7636,7638,7640],{"class":254,"line":1818},[252,7637,266],{"class":258},[252,7639,2112],{"class":2102},[252,7641,2115],{"class":262},[252,7643,7644],{"class":254,"line":1832},[252,7645,1685],{"class":262},[252,7647,7648],{"class":254,"line":1837},[252,7649,7650],{"class":321},"    \u002F\u002F 1.创建数组\n",[252,7652,7653,7655,7657,7659,7661,7663,7665,7667,7669,7671,7673,7675,7677,7679,7681,7683,7685,7687,7689,7691,7693,7695,7697,7699,7701,7703],{"class":254,"line":1866},[252,7654,2124],{"class":258},[252,7656,4101],{"class":262},[252,7658,709],{"class":311},[252,7660,1203],{"class":262},[252,7662,308],{"class":258},[252,7664,1159],{"class":262},[252,7666,556],{"class":311},[252,7668,641],{"class":262},[252,7670,334],{"class":311},[252,7672,641],{"class":262},[252,7674,607],{"class":311},[252,7676,641],{"class":262},[252,7678,683],{"class":311},[252,7680,641],{"class":262},[252,7682,480],{"class":311},[252,7684,641],{"class":262},[252,7686,340],{"class":311},[252,7688,641],{"class":262},[252,7690,709],{"class":311},[252,7692,641],{"class":262},[252,7694,658],{"class":311},[252,7696,641],{"class":262},[252,7698,632],{"class":311},[252,7700,641],{"class":262},[252,7702,582],{"class":311},[252,7704,4134],{"class":262},[252,7706,7707,7709,7711,7713,7715],{"class":254,"line":1871},[252,7708,2124],{"class":258},[252,7710,7471],{"class":262},[252,7712,308],{"class":258},[252,7714,709],{"class":311},[252,7716,1429],{"class":262},[252,7718,7719,7721,7723,7725,7727],{"class":254,"line":1888},[252,7720,2124],{"class":258},[252,7722,6658],{"class":258},[252,7724,19],{"class":262},[252,7726,308],{"class":258},[252,7728,7178],{"class":262},[252,7730,7731],{"class":254,"line":1893},[252,7732,7733],{"class":321},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[252,7735,7736,7739],{"class":254,"line":1898},[252,7737,7738],{"class":2102},"    bubbleSort",[252,7740,7741],{"class":262},"(p,len);\n",[252,7743,7744],{"class":254,"line":1903},[252,7745,2539],{"emptyLinePlaceholder":181},[252,7747,7748],{"class":254,"line":1917},[252,7749,7750],{"class":321},"    \u002F\u002F 3.打印排序后的数组\n",[252,7752,7753,7755,7757,7759,7761,7763,7765,7767,7769,7772,7774],{"class":254,"line":1922},[252,7754,3340],{"class":258},[252,7756,1797],{"class":262},[252,7758,266],{"class":258},[252,7760,3171],{"class":262},[252,7762,308],{"class":258},[252,7764,454],{"class":311},[252,7766,3353],{"class":262},[252,7768,1173],{"class":258},[252,7770,7771],{"class":262},"len; i",[252,7773,2431],{"class":258},[252,7775,269],{"class":262},[252,7777,7778],{"class":254,"line":2716},[252,7779,2169],{"class":262},[252,7781,7782,7784,7786,7788,7790,7793],{"class":254,"line":2730},[252,7783,3590],{"class":262},[252,7785,6559],{"class":258},[252,7787,19],{"class":262},[252,7789,1307],{"class":258},[252,7791,7792],{"class":367},"\"\"",[252,7794,1429],{"class":262},[252,7796,7797,7800,7802],{"class":254,"line":2738},[252,7798,7799],{"class":262},"        p",[252,7801,2431],{"class":258},[252,7803,1429],{"class":262},[252,7805,7806],{"class":254,"line":2743},[252,7807,2326],{"class":262},[252,7809,7810],{"class":254,"line":2749},[252,7811,1704],{"class":262},[5266,7813,7814],{},"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":169,"searchDepth":170,"depth":170,"links":7816},[7817,7818,7819,7820,7821,7822,7823,7824],{"id":6423,"depth":170,"text":6424},{"id":6589,"depth":170,"text":6590},{"id":6745,"depth":170,"text":6746},{"id":6823,"depth":170,"text":6824},{"id":6902,"depth":170,"text":6903},{"id":7001,"depth":170,"text":7002},{"id":7240,"depth":170,"text":7241},{"id":7418,"depth":170,"text":7419},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6412,"description":6420},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7831,"title":7832,"body":7833,"description":7840,"extension":179,"meta":10814,"navigation":181,"path":10815,"seo":10816,"stem":10817,"__hash__":10818},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7834,"toc":10805},[7835,7838,7841,7845,7848,7851,7862,8200,8203,8207,8210,8217,8472,8476,8479,8482,8637,8641,8644,8647,8853,8857,8860,9163,9166,9174,9178,9181,9332,9334,9345,9402,9406,9411,10068,10076,10079,10173,10176,10796,10802],[10,7836,7832],{"id":7837},"_4结构体",[19,7839,7840],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7842,7844],{"id":7843},"_41结构体定义与使用","4.1结构体定义与使用",[19,7846,7847],{},"语法：struct 结构体名 {结构体成员列表}；",[19,7849,7850],{},"通过结构体创建变量的方式：",[1270,7852,7853,7856,7859],{},[210,7854,7855],{},"struct 结构体名 变量名",[210,7857,7858],{},"struct 结构体名 变量名={成员1值，成员2值...}",[210,7860,7861],{},"定义结构体时顺便创建变量",[244,7863,7865],{"className":246,"code":7864,"language":248,"meta":169,"style":169},"#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",[22,7866,7867,7873,7883,7890,7895,7903,7907,7912,7916,7921,7926,7931,7938,7943,7950,7954,7961,7965,7969,7973,7977,7981,7985,7991,7995,8001,8009,8017,8021,8026,8031,8042,8047,8059,8070,8081,8086,8110,8115,8121,8148,8153,8159,8171,8183,8195],{"__ignoreMap":169},[252,7868,7869,7871],{"class":254,"line":255},[252,7870,2088],{"class":258},[252,7872,2091],{"class":367},[252,7874,7875,7877,7879,7881],{"class":254,"line":170},[252,7876,2096],{"class":258},[252,7878,2099],{"class":258},[252,7880,2103],{"class":2102},[252,7882,1429],{"class":262},[252,7884,7885,7887],{"class":254,"line":1318},[252,7886,2088],{"class":258},[252,7888,7889],{"class":367},"\u003Cstring>\n",[252,7891,7892],{"class":254,"line":1333},[252,7893,7894],{"class":321},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[252,7896,7897,7900],{"class":254,"line":1339},[252,7898,7899],{"class":258},"struct",[252,7901,7902],{"class":2102}," Student\n",[252,7904,7905],{"class":254,"line":1353},[252,7906,1685],{"class":262},[252,7908,7909],{"class":254,"line":1359},[252,7910,7911],{"class":321},"    \u002F\u002F成员列表\n",[252,7913,7914],{"class":254,"line":1450},[252,7915,2539],{"emptyLinePlaceholder":181},[252,7917,7918],{"class":254,"line":1456},[252,7919,7920],{"class":321},"    \u002F\u002F姓名\n",[252,7922,7923],{"class":254,"line":1468},[252,7924,7925],{"class":262},"    string name;\n",[252,7927,7928],{"class":254,"line":1751},[252,7929,7930],{"class":321},"    \u002F\u002F年龄\n",[252,7932,7933,7935],{"class":254,"line":1756},[252,7934,2124],{"class":258},[252,7936,7937],{"class":262}," age;\n",[252,7939,7940],{"class":254,"line":1762},[252,7941,7942],{"class":321},"    \u002F\u002F分数\n",[252,7944,7945,7947],{"class":254,"line":1767},[252,7946,2124],{"class":258},[252,7948,7949],{"class":262}," score;\n",[252,7951,7952],{"class":254,"line":1781},[252,7953,4134],{"class":262},[252,7955,7956,7958],{"class":254,"line":1786},[252,7957,7899],{"class":258},[252,7959,7960],{"class":2102}," School\n",[252,7962,7963],{"class":254,"line":1792},[252,7964,1685],{"class":262},[252,7966,7967],{"class":254,"line":1813},[252,7968,7911],{"class":321},[252,7970,7971],{"class":254,"line":1818},[252,7972,2539],{"emptyLinePlaceholder":181},[252,7974,7975],{"class":254,"line":1832},[252,7976,7920],{"class":321},[252,7978,7979],{"class":254,"line":1837},[252,7980,7925],{"class":262},[252,7982,7983],{"class":254,"line":1866},[252,7984,7930],{"class":321},[252,7986,7987,7989],{"class":254,"line":1871},[252,7988,2124],{"class":258},[252,7990,7937],{"class":262},[252,7992,7993],{"class":254,"line":1888},[252,7994,7942],{"class":321},[252,7996,7997,7999],{"class":254,"line":1893},[252,7998,2124],{"class":258},[252,8000,7949],{"class":262},[252,8002,8003,8006],{"class":254,"line":1898},[252,8004,8005],{"class":262},"} s3;",[252,8007,8008],{"class":321}," \u002F\u002F创建结构体时就创建了变量\n",[252,8010,8011,8013,8015],{"class":254,"line":1903},[252,8012,266],{"class":258},[252,8014,2112],{"class":2102},[252,8016,2115],{"class":262},[252,8018,8019],{"class":254,"line":1917},[252,8020,1685],{"class":262},[252,8022,8023],{"class":254,"line":1922},[252,8024,8025],{"class":321},"    \u002F\u002F2.通过学生类型创建具体学生\n",[252,8027,8028],{"class":254,"line":2716},[252,8029,8030],{"class":321},"    \u002F\u002F2.1 struct Student s1;\n",[252,8032,8033,8036,8039],{"class":254,"line":2730},[252,8034,8035],{"class":258},"    struct",[252,8037,8038],{"class":2102}," Student",[252,8040,8041],{"class":262}," s1;\n",[252,8043,8044],{"class":254,"line":2738},[252,8045,8046],{"class":321},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[252,8048,8049,8052,8054,8057],{"class":254,"line":2743},[252,8050,8051],{"class":262},"    s1.name",[252,8053,308],{"class":258},[252,8055,8056],{"class":367},"\"张三\"",[252,8058,1429],{"class":262},[252,8060,8061,8064,8066,8068],{"class":254,"line":2749},[252,8062,8063],{"class":262},"    s1.age",[252,8065,308],{"class":258},[252,8067,913],{"class":311},[252,8069,1429],{"class":262},[252,8071,8072,8075,8077,8079],{"class":254,"line":2755},[252,8073,8074],{"class":262},"    s1.score",[252,8076,308],{"class":258},[252,8078,517],{"class":311},[252,8080,1429],{"class":262},[252,8082,8083],{"class":254,"line":2760},[252,8084,8085],{"class":321},"    \u002F\u002F输出结果\n",[252,8087,8089,8091,8093,8096,8098,8101,8103,8106,8108],{"class":254,"line":8088},37,[252,8090,1690],{"class":262},[252,8092,1307],{"class":258},[252,8094,8095],{"class":262},"s1.name",[252,8097,1307],{"class":258},[252,8099,8100],{"class":262},"s1.age",[252,8102,1307],{"class":258},[252,8104,8105],{"class":262},"s1.score",[252,8107,1307],{"class":258},[252,8109,1330],{"class":262},[252,8111,8113],{"class":254,"line":8112},38,[252,8114,2539],{"emptyLinePlaceholder":181},[252,8116,8118],{"class":254,"line":8117},39,[252,8119,8120],{"class":321},"    \u002F\u002F2.2 struct Student s2={...}\n",[252,8122,8124,8126,8128,8131,8133,8135,8138,8140,8142,8144,8146],{"class":254,"line":8123},40,[252,8125,8035],{"class":258},[252,8127,8038],{"class":2102},[252,8129,8130],{"class":262}," s2",[252,8132,308],{"class":258},[252,8134,1159],{"class":262},[252,8136,8137],{"class":367},"\"王五\"",[252,8139,641],{"class":262},[252,8141,913],{"class":311},[252,8143,641],{"class":262},[252,8145,517],{"class":311},[252,8147,4134],{"class":262},[252,8149,8151],{"class":254,"line":8150},41,[252,8152,2539],{"emptyLinePlaceholder":181},[252,8154,8156],{"class":254,"line":8155},42,[252,8157,8158],{"class":321},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[252,8160,8162,8165,8167,8169],{"class":254,"line":8161},43,[252,8163,8164],{"class":262},"    s3.name",[252,8166,308],{"class":258},[252,8168,3817],{"class":367},[252,8170,1429],{"class":262},[252,8172,8174,8177,8179,8181],{"class":254,"line":8173},44,[252,8175,8176],{"class":262},"    s3.age",[252,8178,308],{"class":258},[252,8180,913],{"class":311},[252,8182,1429],{"class":262},[252,8184,8186,8189,8191,8193],{"class":254,"line":8185},45,[252,8187,8188],{"class":262},"    s3.score",[252,8190,308],{"class":258},[252,8192,963],{"class":311},[252,8194,1429],{"class":262},[252,8196,8198],{"class":254,"line":8197},46,[252,8199,1704],{"class":262},[19,8201,8202],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8204,8206],{"id":8205},"_42结构体数组","4.2结构体数组",[19,8208,8209],{},"将自定义的结构体放入到数组中方便维护",[19,8211,8212,8213,8216],{},"语法：struct 结构体名 数组名",[252,8214,8215],{},"元素个数","={ {}，{},...{} };",[244,8218,8220],{"className":246,"code":8219,"language":248,"meta":169,"style":169},"#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",[22,8221,8222,8228,8238,8244,8249,8255,8259,8263,8269,8275,8279,8283,8291,8295,8300,8315,8319,8335,8351,8355,8360,8376,8391,8406,8411,8437,8441,8464,8468],{"__ignoreMap":169},[252,8223,8224,8226],{"class":254,"line":255},[252,8225,2088],{"class":258},[252,8227,2091],{"class":367},[252,8229,8230,8232,8234,8236],{"class":254,"line":170},[252,8231,2096],{"class":258},[252,8233,2099],{"class":258},[252,8235,2103],{"class":2102},[252,8237,1429],{"class":262},[252,8239,8240,8242],{"class":254,"line":1318},[252,8241,2088],{"class":258},[252,8243,7889],{"class":367},[252,8245,8246],{"class":254,"line":1333},[252,8247,8248],{"class":321},"\u002F\u002F1.定义结构体\n",[252,8250,8251,8253],{"class":254,"line":1339},[252,8252,7899],{"class":258},[252,8254,7902],{"class":2102},[252,8256,8257],{"class":254,"line":1353},[252,8258,1685],{"class":262},[252,8260,8261],{"class":254,"line":1359},[252,8262,7925],{"class":262},[252,8264,8265,8267],{"class":254,"line":1450},[252,8266,2124],{"class":258},[252,8268,7937],{"class":262},[252,8270,8271,8273],{"class":254,"line":1456},[252,8272,2124],{"class":258},[252,8274,7949],{"class":262},[252,8276,8277],{"class":254,"line":1468},[252,8278,2539],{"emptyLinePlaceholder":181},[252,8280,8281],{"class":254,"line":1751},[252,8282,4134],{"class":262},[252,8284,8285,8287,8289],{"class":254,"line":1756},[252,8286,266],{"class":258},[252,8288,2112],{"class":2102},[252,8290,2115],{"class":262},[252,8292,8293],{"class":254,"line":1762},[252,8294,1685],{"class":262},[252,8296,8297],{"class":254,"line":1767},[252,8298,8299],{"class":321},"    \u002F\u002F2.创建结构体数组\n",[252,8301,8302,8304,8306,8309,8311,8313],{"class":254,"line":1781},[252,8303,8035],{"class":258},[252,8305,8038],{"class":2102},[252,8307,8308],{"class":262}," stuArray[",[252,8310,340],{"class":311},[252,8312,1203],{"class":262},[252,8314,5047],{"class":258},[252,8316,8317],{"class":254,"line":1786},[252,8318,2169],{"class":262},[252,8320,8321,8323,8325,8327,8329,8331,8333],{"class":254,"line":1792},[252,8322,5056],{"class":262},[252,8324,8056],{"class":367},[252,8326,641],{"class":262},[252,8328,913],{"class":311},[252,8330,641],{"class":262},[252,8332,574],{"class":311},[252,8334,5069],{"class":262},[252,8336,8337,8339,8341,8343,8345,8347,8349],{"class":254,"line":1813},[252,8338,5056],{"class":262},[252,8340,3817],{"class":367},[252,8342,641],{"class":262},[252,8344,838],{"class":311},[252,8346,641],{"class":262},[252,8348,838],{"class":311},[252,8350,1704],{"class":262},[252,8352,8353],{"class":254,"line":1818},[252,8354,2326],{"class":262},[252,8356,8357],{"class":254,"line":1832},[252,8358,8359],{"class":321},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[252,8361,8362,8365,8367,8370,8372,8374],{"class":254,"line":1837},[252,8363,8364],{"class":262},"    stuArray[",[252,8366,480],{"class":311},[252,8368,8369],{"class":262},"].name",[252,8371,308],{"class":258},[252,8373,3840],{"class":367},[252,8375,1429],{"class":262},[252,8377,8378,8380,8382,8385,8387,8389],{"class":254,"line":1866},[252,8379,8364],{"class":262},[252,8381,480],{"class":311},[252,8383,8384],{"class":262},"].age",[252,8386,308],{"class":258},[252,8388,340],{"class":311},[252,8390,1429],{"class":262},[252,8392,8393,8395,8397,8400,8402,8404],{"class":254,"line":1871},[252,8394,8364],{"class":262},[252,8396,480],{"class":311},[252,8398,8399],{"class":262},"].score",[252,8401,308],{"class":258},[252,8403,340],{"class":311},[252,8405,1429],{"class":262},[252,8407,8408],{"class":254,"line":1888},[252,8409,8410],{"class":321},"    \u002F\u002F4.遍历结构体数组\n",[252,8412,8413,8415,8417,8419,8421,8423,8425,8427,8429,8431,8433,8435],{"class":254,"line":1893},[252,8414,3340],{"class":258},[252,8416,1797],{"class":262},[252,8418,266],{"class":258},[252,8420,3171],{"class":262},[252,8422,308],{"class":258},[252,8424,454],{"class":311},[252,8426,3178],{"class":262},[252,8428,1173],{"class":258},[252,8430,340],{"class":311},[252,8432,3178],{"class":262},[252,8434,2431],{"class":258},[252,8436,269],{"class":262},[252,8438,8439],{"class":254,"line":1898},[252,8440,2169],{"class":262},[252,8442,8443,8445,8447,8450,8452,8455,8457,8460,8462],{"class":254,"line":1903},[252,8444,3590],{"class":262},[252,8446,1307],{"class":258},[252,8448,8449],{"class":262},"stuArray[i].name",[252,8451,1307],{"class":258},[252,8453,8454],{"class":262},"stuArray[i].age",[252,8456,1307],{"class":258},[252,8458,8459],{"class":262},"stuArray[i].score",[252,8461,1307],{"class":258},[252,8463,1330],{"class":262},[252,8465,8466],{"class":254,"line":1917},[252,8467,2326],{"class":262},[252,8469,8470],{"class":254,"line":1922},[252,8471,1704],{"class":262},[14,8473,8475],{"id":8474},"_43结构体指针","4.3结构体指针",[19,8477,8478],{},"作用：通过指针访问结构体中的成员",[19,8480,8481],{},"利用操作符->可以通过结构体指针访问结构体属性",[244,8483,8485],{"className":246,"code":8484,"language":248,"meta":169,"style":169},"#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",[22,8486,8487,8493,8503,8509,8513,8519,8523,8527,8533,8539,8543,8551,8555,8560,8585,8590,8605,8610,8633],{"__ignoreMap":169},[252,8488,8489,8491],{"class":254,"line":255},[252,8490,2088],{"class":258},[252,8492,2091],{"class":367},[252,8494,8495,8497,8499,8501],{"class":254,"line":170},[252,8496,2096],{"class":258},[252,8498,2099],{"class":258},[252,8500,2103],{"class":2102},[252,8502,1429],{"class":262},[252,8504,8505,8507],{"class":254,"line":1318},[252,8506,2088],{"class":258},[252,8508,7889],{"class":367},[252,8510,8511],{"class":254,"line":1333},[252,8512,8248],{"class":321},[252,8514,8515,8517],{"class":254,"line":1339},[252,8516,7899],{"class":258},[252,8518,7902],{"class":2102},[252,8520,8521],{"class":254,"line":1353},[252,8522,1685],{"class":262},[252,8524,8525],{"class":254,"line":1359},[252,8526,7925],{"class":262},[252,8528,8529,8531],{"class":254,"line":1450},[252,8530,2124],{"class":258},[252,8532,7937],{"class":262},[252,8534,8535,8537],{"class":254,"line":1456},[252,8536,2124],{"class":258},[252,8538,7949],{"class":262},[252,8540,8541],{"class":254,"line":1468},[252,8542,4134],{"class":262},[252,8544,8545,8547,8549],{"class":254,"line":1751},[252,8546,266],{"class":258},[252,8548,2112],{"class":2102},[252,8550,2115],{"class":262},[252,8552,8553],{"class":254,"line":1756},[252,8554,1685],{"class":262},[252,8556,8557],{"class":254,"line":1762},[252,8558,8559],{"class":321},"    \u002F\u002F创建学生结构体变量\n",[252,8561,8562,8564,8566,8569,8571,8573,8575,8577,8579,8581,8583],{"class":254,"line":1767},[252,8563,8035],{"class":258},[252,8565,8038],{"class":2102},[252,8567,8568],{"class":262}," s",[252,8570,308],{"class":258},[252,8572,1159],{"class":262},[252,8574,8056],{"class":367},[252,8576,641],{"class":262},[252,8578,913],{"class":311},[252,8580,641],{"class":262},[252,8582,1861],{"class":311},[252,8584,4134],{"class":262},[252,8586,8587],{"class":254,"line":1781},[252,8588,8589],{"class":321},"    \u002F\u002F通过指针指向结构体变量\n",[252,8591,8592,8594,8596,8598,8600,8602],{"class":254,"line":1786},[252,8593,8035],{"class":258},[252,8595,8038],{"class":2102},[252,8597,6658],{"class":258},[252,8599,19],{"class":262},[252,8601,6479],{"class":258},[252,8603,8604],{"class":262},"s\n",[252,8606,8607],{"class":254,"line":1792},[252,8608,8609],{"class":321},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[252,8611,8612,8614,8616,8619,8621,8624,8626,8629,8631],{"class":254,"line":1813},[252,8613,1690],{"class":262},[252,8615,1307],{"class":258},[252,8617,8618],{"class":262},"p->name",[252,8620,1307],{"class":258},[252,8622,8623],{"class":262},"p->age",[252,8625,1307],{"class":258},[252,8627,8628],{"class":262},"p->score",[252,8630,1307],{"class":258},[252,8632,1330],{"class":262},[252,8634,8635],{"class":254,"line":1818},[252,8636,1704],{"class":262},[14,8638,8640],{"id":8639},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8642,8643],{},"作用：结构体中的成员可以是另一个结构体",[19,8645,8646],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[244,8648,8650],{"className":246,"code":8649,"language":248,"meta":169,"style":169},"#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",[22,8651,8652,8658,8668,8674,8679,8687,8691,8695,8701,8707,8711,8716,8723,8727,8734,8738,8744,8749,8753,8761,8765,8770,8775,8780,8791,8803,8814,8827,8838,8849],{"__ignoreMap":169},[252,8653,8654,8656],{"class":254,"line":255},[252,8655,2088],{"class":258},[252,8657,2091],{"class":367},[252,8659,8660,8662,8664,8666],{"class":254,"line":170},[252,8661,2096],{"class":258},[252,8663,2099],{"class":258},[252,8665,2103],{"class":2102},[252,8667,1429],{"class":262},[252,8669,8670,8672],{"class":254,"line":1318},[252,8671,2088],{"class":258},[252,8673,7889],{"class":367},[252,8675,8676],{"class":254,"line":1333},[252,8677,8678],{"class":321},"\u002F\u002F定义学生结构体\n",[252,8680,8681,8683,8685],{"class":254,"line":1339},[252,8682,7899],{"class":258},[252,8684,8038],{"class":2102},[252,8686,2813],{"class":262},[252,8688,8689],{"class":254,"line":1353},[252,8690,1685],{"class":262},[252,8692,8693],{"class":254,"line":1359},[252,8694,7925],{"class":262},[252,8696,8697,8699],{"class":254,"line":1450},[252,8698,2124],{"class":258},[252,8700,7937],{"class":262},[252,8702,8703,8705],{"class":254,"line":1456},[252,8704,2124],{"class":258},[252,8706,7949],{"class":262},[252,8708,8709],{"class":254,"line":1468},[252,8710,1704],{"class":262},[252,8712,8713],{"class":254,"line":1751},[252,8714,8715],{"class":321},"\u002F\u002F定义老师结构体\n",[252,8717,8718,8720],{"class":254,"line":1756},[252,8719,7899],{"class":258},[252,8721,8722],{"class":2102}," Teacher\n",[252,8724,8725],{"class":254,"line":1762},[252,8726,1685],{"class":262},[252,8728,8729,8731],{"class":254,"line":1767},[252,8730,2124],{"class":258},[252,8732,8733],{"class":262}," id;\n",[252,8735,8736],{"class":254,"line":1781},[252,8737,7925],{"class":262},[252,8739,8740,8742],{"class":254,"line":1786},[252,8741,2124],{"class":258},[252,8743,7937],{"class":262},[252,8745,8746],{"class":254,"line":1792},[252,8747,8748],{"class":262},"    Student stu;\n",[252,8750,8751],{"class":254,"line":1813},[252,8752,1704],{"class":262},[252,8754,8755,8757,8759],{"class":254,"line":1818},[252,8756,266],{"class":258},[252,8758,2112],{"class":2102},[252,8760,6118],{"class":262},[252,8762,8763],{"class":254,"line":1832},[252,8764,1685],{"class":262},[252,8766,8767],{"class":254,"line":1837},[252,8768,8769],{"class":321},"    \u002F\u002F结构体嵌套结构体\n",[252,8771,8772],{"class":254,"line":1866},[252,8773,8774],{"class":321},"    \u002F\u002F创建老师\n",[252,8776,8777],{"class":254,"line":1871},[252,8778,8779],{"class":262},"    Teacher t;\n",[252,8781,8782,8785,8787,8789],{"class":254,"line":1888},[252,8783,8784],{"class":262},"    t.id",[252,8786,308],{"class":258},[252,8788,574],{"class":311},[252,8790,1429],{"class":262},[252,8792,8793,8796,8798,8801],{"class":254,"line":1893},[252,8794,8795],{"class":262},"    t.name",[252,8797,308],{"class":258},[252,8799,8800],{"class":367},"\"老王\"",[252,8802,1429],{"class":262},[252,8804,8805,8808,8810,8812],{"class":254,"line":1898},[252,8806,8807],{"class":262},"    t.age",[252,8809,308],{"class":258},[252,8811,913],{"class":311},[252,8813,1429],{"class":262},[252,8815,8816,8819,8821,8824],{"class":254,"line":1903},[252,8817,8818],{"class":262},"    t.stu.name",[252,8820,308],{"class":258},[252,8822,8823],{"class":367},"\"小王\"",[252,8825,8826],{"class":262},"；\n",[252,8828,8829,8832,8834,8836],{"class":254,"line":1917},[252,8830,8831],{"class":262},"    t.stu.age",[252,8833,308],{"class":258},[252,8835,963],{"class":311},[252,8837,1429],{"class":262},[252,8839,8840,8843,8845,8847],{"class":254,"line":1922},[252,8841,8842],{"class":262},"    t.stu.score",[252,8844,308],{"class":258},[252,8846,607],{"class":311},[252,8848,1429],{"class":262},[252,8850,8851],{"class":254,"line":2716},[252,8852,1704],{"class":262},[14,8854,8856],{"id":8855},"_45结构体做函数参数","4.5结构体做函数参数",[19,8858,8859],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[244,8861,8863],{"className":246,"code":8862,"language":248,"meta":169,"style":169},"#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",[22,8864,8865,8871,8881,8887,8893,8897,8901,8907,8913,8917,8922,8927,8944,8948,8981,8985,8990,9009,9013,9044,9048,9056,9060,9069,9081,9093,9105,9118,9126,9139,9151,9159],{"__ignoreMap":169},[252,8866,8867,8869],{"class":254,"line":255},[252,8868,2088],{"class":258},[252,8870,2091],{"class":367},[252,8872,8873,8875,8877,8879],{"class":254,"line":170},[252,8874,2096],{"class":258},[252,8876,2099],{"class":258},[252,8878,2103],{"class":2102},[252,8880,1429],{"class":262},[252,8882,8883,8885],{"class":254,"line":1318},[252,8884,2088],{"class":258},[252,8886,7889],{"class":367},[252,8888,8889,8891],{"class":254,"line":1333},[252,8890,7899],{"class":258},[252,8892,7902],{"class":2102},[252,8894,8895],{"class":254,"line":1339},[252,8896,1685],{"class":262},[252,8898,8899],{"class":254,"line":1353},[252,8900,7925],{"class":262},[252,8902,8903,8905],{"class":254,"line":1359},[252,8904,2124],{"class":258},[252,8906,7937],{"class":262},[252,8908,8909,8911],{"class":254,"line":1450},[252,8910,2124],{"class":258},[252,8912,7949],{"class":262},[252,8914,8915],{"class":254,"line":1456},[252,8916,4134],{"class":262},[252,8918,8919],{"class":254,"line":1468},[252,8920,8921],{"class":321},"\u002F\u002F打印学生信息的函数\n",[252,8923,8924],{"class":254,"line":1751},[252,8925,8926],{"class":321},"\u002F\u002F值传递\n",[252,8928,8929,8931,8934,8936,8938,8940,8942],{"class":254,"line":1756},[252,8930,5504],{"class":258},[252,8932,8933],{"class":2102}," printStudent1",[252,8935,263],{"class":262},[252,8937,7899],{"class":258},[252,8939,8038],{"class":2102},[252,8941,8568],{"class":5356},[252,8943,269],{"class":262},[252,8945,8946],{"class":254,"line":1762},[252,8947,1685],{"class":262},[252,8949,8950,8952,8954,8957,8959,8962,8964,8967,8969,8971,8973,8976,8978],{"class":254,"line":1767},[252,8951,6669],{"class":262},[252,8953,1307],{"class":258},[252,8955,8956],{"class":262}," s.name ",[252,8958,1307],{"class":258},[252,8960,8961],{"class":367}," \" \"",[252,8963,1583],{"class":258},[252,8965,8966],{"class":262}," s.age ",[252,8968,1307],{"class":258},[252,8970,8961],{"class":367},[252,8972,1583],{"class":258},[252,8974,8975],{"class":262}," s.score ",[252,8977,1307],{"class":258},[252,8979,8980],{"class":262}," endl;\n",[252,8982,8983],{"class":254,"line":1781},[252,8984,1704],{"class":262},[252,8986,8987],{"class":254,"line":1786},[252,8988,8989],{"class":321},"\u002F\u002F地址传递\n",[252,8991,8992,8994,8997,8999,9001,9003,9005,9007],{"class":254,"line":1792},[252,8993,5504],{"class":258},[252,8995,8996],{"class":2102}," printStudent2",[252,8998,263],{"class":262},[252,9000,7899],{"class":258},[252,9002,8038],{"class":2102},[252,9004,6658],{"class":258},[252,9006,958],{"class":5356},[252,9008,269],{"class":262},[252,9010,9011],{"class":254,"line":1813},[252,9012,1685],{"class":262},[252,9014,9015,9017,9019,9022,9024,9026,9028,9031,9033,9035,9037,9040,9042],{"class":254,"line":1818},[252,9016,6669],{"class":262},[252,9018,1307],{"class":258},[252,9020,9021],{"class":262}," s->name ",[252,9023,1307],{"class":258},[252,9025,8961],{"class":367},[252,9027,1583],{"class":258},[252,9029,9030],{"class":262}," s->age ",[252,9032,1307],{"class":258},[252,9034,8961],{"class":367},[252,9036,1583],{"class":258},[252,9038,9039],{"class":262}," s->score ",[252,9041,1307],{"class":258},[252,9043,8980],{"class":262},[252,9045,9046],{"class":254,"line":1832},[252,9047,1704],{"class":262},[252,9049,9050,9052,9054],{"class":254,"line":1837},[252,9051,266],{"class":258},[252,9053,2112],{"class":2102},[252,9055,2115],{"class":262},[252,9057,9058],{"class":254,"line":1866},[252,9059,1685],{"class":262},[252,9061,9062,9064,9066],{"class":254,"line":1871},[252,9063,8035],{"class":258},[252,9065,8038],{"class":2102},[252,9067,9068],{"class":262}," s;\n",[252,9070,9071,9074,9076,9079],{"class":254,"line":1888},[252,9072,9073],{"class":262},"    s.name ",[252,9075,308],{"class":258},[252,9077,9078],{"class":367}," \"张三\"",[252,9080,1429],{"class":262},[252,9082,9083,9086,9088,9091],{"class":254,"line":1893},[252,9084,9085],{"class":262},"    s.age ",[252,9087,308],{"class":258},[252,9089,9090],{"class":311}," 20",[252,9092,1429],{"class":262},[252,9094,9095,9098,9100,9103],{"class":254,"line":1898},[252,9096,9097],{"class":262},"    s.score ",[252,9099,308],{"class":258},[252,9101,9102],{"class":311}," 85",[252,9104,1429],{"class":262},[252,9106,9107,9109,9111,9114,9116],{"class":254,"line":1903},[252,9108,1690],{"class":262},[252,9110,1307],{"class":258},[252,9112,9113],{"class":367},"\"值传递:\"",[252,9115,1307],{"class":258},[252,9117,1330],{"class":262},[252,9119,9120,9123],{"class":254,"line":1917},[252,9121,9122],{"class":2102},"    printStudent1",[252,9124,9125],{"class":262},"(s);\n",[252,9127,9128,9130,9132,9135,9137],{"class":254,"line":1922},[252,9129,1690],{"class":262},[252,9131,1307],{"class":258},[252,9133,9134],{"class":367},"\"地址传递:\"",[252,9136,1307],{"class":258},[252,9138,1330],{"class":262},[252,9140,9141,9144,9146,9148],{"class":254,"line":2716},[252,9142,9143],{"class":2102},"    printStudent2",[252,9145,263],{"class":262},[252,9147,616],{"class":258},[252,9149,9150],{"class":262},"s); \n",[252,9152,9153,9155,9157],{"class":254,"line":2730},[252,9154,4229],{"class":258},[252,9156,4232],{"class":311},[252,9158,1429],{"class":262},[252,9160,9161],{"class":254,"line":2738},[252,9162,1704],{"class":262},[19,9164,9165],{},"注意：",[1270,9167,9168,9171],{},[210,9169,9170],{},"1.先定义结构体，不要在函数中写结构体的定义",[210,9172,9173],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9175,9177],{"id":9176},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9179,9180],{},"用const防止误操作",[244,9182,9184],{"className":246,"code":9183,"language":248,"meta":169,"style":169},"#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",[22,9185,9186,9192,9202,9208,9213,9217,9221,9227,9233,9237,9253,9257,9280,9284,9292,9296,9317,9324,9328],{"__ignoreMap":169},[252,9187,9188,9190],{"class":254,"line":255},[252,9189,2088],{"class":258},[252,9191,2091],{"class":367},[252,9193,9194,9196,9198,9200],{"class":254,"line":170},[252,9195,2096],{"class":258},[252,9197,2099],{"class":258},[252,9199,2103],{"class":2102},[252,9201,1429],{"class":262},[252,9203,9204,9206],{"class":254,"line":1318},[252,9205,2088],{"class":258},[252,9207,7889],{"class":367},[252,9209,9210],{"class":254,"line":1333},[252,9211,9212],{"class":262},"sctuct Student\n",[252,9214,9215],{"class":254,"line":1339},[252,9216,1685],{"class":262},[252,9218,9219],{"class":254,"line":1353},[252,9220,7925],{"class":262},[252,9222,9223,9225],{"class":254,"line":1359},[252,9224,2124],{"class":258},[252,9226,7937],{"class":262},[252,9228,9229,9231],{"class":254,"line":1450},[252,9230,2124],{"class":258},[252,9232,7949],{"class":262},[252,9234,9235],{"class":254,"line":1456},[252,9236,4134],{"class":262},[252,9238,9239,9241,9244,9246,9249,9251],{"class":254,"line":1468},[252,9240,5504],{"class":258},[252,9242,9243],{"class":2102}," printStudents",[252,9245,263],{"class":262},[252,9247,9248],{"class":2102},"student",[252,9250,8568],{"class":5356},[252,9252,269],{"class":262},[252,9254,9255],{"class":254,"line":1751},[252,9256,1685],{"class":262},[252,9258,9259,9261,9263,9266,9268,9271,9273,9276,9278],{"class":254,"line":1756},[252,9260,1690],{"class":262},[252,9262,1307],{"class":258},[252,9264,9265],{"class":262},"s.name",[252,9267,1307],{"class":258},[252,9269,9270],{"class":262},"s.age",[252,9272,1307],{"class":258},[252,9274,9275],{"class":262},"s.score",[252,9277,1307],{"class":258},[252,9279,1330],{"class":262},[252,9281,9282],{"class":254,"line":1762},[252,9283,1704],{"class":262},[252,9285,9286,9288,9290],{"class":254,"line":1767},[252,9287,266],{"class":258},[252,9289,2112],{"class":2102},[252,9291,6118],{"class":262},[252,9293,9294],{"class":254,"line":1781},[252,9295,1685],{"class":262},[252,9297,9298,9301,9303,9305,9307,9309,9311,9313,9315],{"class":254,"line":1786},[252,9299,9300],{"class":262},"    Student s",[252,9302,308],{"class":258},[252,9304,1159],{"class":262},[252,9306,8056],{"class":367},[252,9308,641],{"class":262},[252,9310,913],{"class":311},[252,9312,641],{"class":262},[252,9314,913],{"class":311},[252,9316,4134],{"class":262},[252,9318,9319,9322],{"class":254,"line":1792},[252,9320,9321],{"class":2102},"    printStudent",[252,9323,9125],{"class":262},[252,9325,9326],{"class":254,"line":1813},[252,9327,2539],{"emptyLinePlaceholder":181},[252,9329,9330],{"class":254,"line":1818},[252,9331,1704],{"class":262},[19,9333,9165],{},[1270,9335,9336,9339,9342],{},[210,9337,9338],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[210,9340,9341],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[210,9343,9344],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[244,9346,9348],{"className":246,"code":9347,"language":248,"meta":169,"style":169},"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",[22,9349,9350,9369,9373,9378,9398],{"__ignoreMap":169},[252,9351,9352,9354,9356,9358,9360,9363,9365,9367],{"class":254,"line":255},[252,9353,5504],{"class":258},[252,9355,9243],{"class":2102},[252,9357,263],{"class":262},[252,9359,6932],{"class":258},[252,9361,9362],{"class":2102}," student",[252,9364,6658],{"class":258},[252,9366,958],{"class":5356},[252,9368,269],{"class":262},[252,9370,9371],{"class":254,"line":170},[252,9372,1685],{"class":262},[252,9374,9375],{"class":254,"line":1318},[252,9376,9377],{"class":321},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[252,9379,9380,9382,9384,9386,9388,9390,9392,9394,9396],{"class":254,"line":1333},[252,9381,1690],{"class":262},[252,9383,1307],{"class":258},[252,9385,9265],{"class":262},[252,9387,1307],{"class":258},[252,9389,9270],{"class":262},[252,9391,1307],{"class":258},[252,9393,9275],{"class":262},[252,9395,1307],{"class":258},[252,9397,1330],{"class":262},[252,9399,9400],{"class":254,"line":1339},[252,9401,1704],{"class":262},[14,9403,9405],{"id":9404},"_47案例","4.7案例",[207,9407,9408],{},[210,9409,9410],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[244,9412,9414],{"className":246,"code":9413,"language":248,"meta":169,"style":169},"#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",[22,9415,9416,9422,9432,9438,9445,9449,9455,9459,9464,9470,9476,9480,9484,9490,9494,9499,9504,9517,9521,9526,9552,9556,9568,9595,9599,9611,9621,9625,9630,9659,9663,9675,9684,9711,9722,9732,9736,9740,9744,9749,9773,9777,9801,9805,9824,9850,9854,9879,9902,9926,9931,9936,9941,9950,9955,9961,9982,9988,10002,10008,10035,10044,10050,10058,10063],{"__ignoreMap":169},[252,9417,9418,9420],{"class":254,"line":255},[252,9419,2088],{"class":258},[252,9421,2091],{"class":367},[252,9423,9424,9426,9428,9430],{"class":254,"line":170},[252,9425,2096],{"class":258},[252,9427,2099],{"class":258},[252,9429,2103],{"class":2102},[252,9431,1429],{"class":262},[252,9433,9434,9436],{"class":254,"line":1318},[252,9435,2088],{"class":258},[252,9437,7889],{"class":367},[252,9439,9440,9442],{"class":254,"line":1333},[252,9441,2088],{"class":258},[252,9443,9444],{"class":367},"\u003Cctime>\n",[252,9446,9447],{"class":254,"line":1339},[252,9448,8678],{"class":321},[252,9450,9451,9453],{"class":254,"line":1353},[252,9452,7899],{"class":258},[252,9454,7902],{"class":2102},[252,9456,9457],{"class":254,"line":1359},[252,9458,1685],{"class":262},[252,9460,9461],{"class":254,"line":1450},[252,9462,9463],{"class":262},"    string sName;\n",[252,9465,9466,9468],{"class":254,"line":1456},[252,9467,2124],{"class":258},[252,9469,7937],{"class":262},[252,9471,9472,9474],{"class":254,"line":1468},[252,9473,2124],{"class":258},[252,9475,7949],{"class":262},[252,9477,9478],{"class":254,"line":1751},[252,9479,4134],{"class":262},[252,9481,9482],{"class":254,"line":1756},[252,9483,8715],{"class":321},[252,9485,9486,9488],{"class":254,"line":1762},[252,9487,7899],{"class":258},[252,9489,8722],{"class":2102},[252,9491,9492],{"class":254,"line":1767},[252,9493,1685],{"class":262},[252,9495,9496],{"class":254,"line":1781},[252,9497,9498],{"class":262},"    string tName;\n",[252,9500,9501],{"class":254,"line":1786},[252,9502,9503],{"class":321},"    \u002F\u002F学生数组\n",[252,9505,9506,9508,9510,9513,9515],{"class":254,"line":1792},[252,9507,8035],{"class":258},[252,9509,8038],{"class":2102},[252,9511,9512],{"class":262}," sArray[",[252,9514,582],{"class":311},[252,9516,4829],{"class":262},[252,9518,9519],{"class":254,"line":1813},[252,9520,4134],{"class":262},[252,9522,9523],{"class":254,"line":1818},[252,9524,9525],{"class":321},"\u002F\u002F给老师和学生赋值的函数\n",[252,9527,9528,9530,9533,9535,9537,9540,9543,9546,9548,9550],{"class":254,"line":1832},[252,9529,5504],{"class":258},[252,9531,9532],{"class":2102}," allocateSpace",[252,9534,263],{"class":262},[252,9536,7899],{"class":258},[252,9538,9539],{"class":2102}," Teacher",[252,9541,9542],{"class":5356}," tArray",[252,9544,9545],{"class":262},"[],",[252,9547,266],{"class":258},[252,9549,7471],{"class":5356},[252,9551,269],{"class":262},[252,9553,9554],{"class":254,"line":1837},[252,9555,1685],{"class":262},[252,9557,9558,9561,9563,9566],{"class":254,"line":1866},[252,9559,9560],{"class":262},"    string nameSeed",[252,9562,308],{"class":258},[252,9564,9565],{"class":367},"\"ABCDE\"",[252,9567,1429],{"class":262},[252,9569,9570,9572,9574,9576,9579,9581,9583,9586,9588,9591,9593],{"class":254,"line":1871},[252,9571,3340],{"class":258},[252,9573,1797],{"class":262},[252,9575,266],{"class":258},[252,9577,9578],{"class":262}," i ",[252,9580,308],{"class":258},[252,9582,4232],{"class":311},[252,9584,9585],{"class":262},"; i ",[252,9587,1173],{"class":258},[252,9589,9590],{"class":262}," len; i",[252,9592,2431],{"class":258},[252,9594,269],{"class":262},[252,9596,9597],{"class":254,"line":1888},[252,9598,2169],{"class":262},[252,9600,9601,9604,9606,9609],{"class":254,"line":1893},[252,9602,9603],{"class":262},"        tArray[i].tName ",[252,9605,308],{"class":258},[252,9607,9608],{"class":367}," \"Teacher_\"",[252,9610,1429],{"class":262},[252,9612,9613,9615,9618],{"class":254,"line":1898},[252,9614,9603],{"class":262},[252,9616,9617],{"class":258},"+=",[252,9619,9620],{"class":262},"nameSeed[i];\n",[252,9622,9623],{"class":254,"line":1903},[252,9624,2539],{"emptyLinePlaceholder":181},[252,9626,9627],{"class":254,"line":1917},[252,9628,9629],{"class":321},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[252,9631,9632,9634,9636,9638,9641,9643,9645,9648,9650,9652,9655,9657],{"class":254,"line":1922},[252,9633,3542],{"class":258},[252,9635,1797],{"class":262},[252,9637,266],{"class":258},[252,9639,9640],{"class":262}," j ",[252,9642,308],{"class":258},[252,9644,4232],{"class":311},[252,9646,9647],{"class":262},"; j ",[252,9649,1173],{"class":258},[252,9651,2287],{"class":311},[252,9653,9654],{"class":262},"; j",[252,9656,2431],{"class":258},[252,9658,269],{"class":262},[252,9660,9661],{"class":254,"line":2716},[252,9662,2649],{"class":262},[252,9664,9665,9668,9670,9673],{"class":254,"line":2730},[252,9666,9667],{"class":262},"            tArray[i].sArray[j].sName ",[252,9669,308],{"class":258},[252,9671,9672],{"class":367}," \"Student_\"",[252,9674,1429],{"class":262},[252,9676,9677,9679,9681],{"class":254,"line":2738},[252,9678,9667],{"class":262},[252,9680,9617],{"class":258},[252,9682,9683],{"class":262}," nameSeed[j];\n",[252,9685,9686,9689,9692,9694,9696,9698,9700,9702,9704,9706,9708],{"class":254,"line":2743},[252,9687,9688],{"class":258},"            int",[252,9690,9691],{"class":262}," random",[252,9693,308],{"class":258},[252,9695,2563],{"class":2102},[252,9697,2566],{"class":262},[252,9699,591],{"class":258},[252,9701,1170],{"class":311},[252,9703,744],{"class":258},[252,9705,664],{"class":311},[252,9707,318],{"class":262},[252,9709,9710],{"class":321},"\u002F\u002F40~99\n",[252,9712,9713,9716,9718,9720],{"class":254,"line":2749},[252,9714,9715],{"class":262},"            tArray[i].sArray[j].age ",[252,9717,308],{"class":258},[252,9719,9090],{"class":311},[252,9721,1429],{"class":262},[252,9723,9724,9727,9729],{"class":254,"line":2755},[252,9725,9726],{"class":262},"            tArray[i].sArray[j].score ",[252,9728,308],{"class":258},[252,9730,9731],{"class":262}," random;\n",[252,9733,9734],{"class":254,"line":2760},[252,9735,2668],{"class":262},[252,9737,9738],{"class":254,"line":8088},[252,9739,2326],{"class":262},[252,9741,9742],{"class":254,"line":8112},[252,9743,1704],{"class":262},[252,9745,9746],{"class":254,"line":8117},[252,9747,9748],{"class":321},"\u002F\u002F打印所有信息的函数\n",[252,9750,9751,9753,9756,9758,9760,9762,9764,9767,9769,9771],{"class":254,"line":8123},[252,9752,5504],{"class":258},[252,9754,9755],{"class":2102}," printInfo",[252,9757,263],{"class":262},[252,9759,7899],{"class":258},[252,9761,9539],{"class":2102},[252,9763,9542],{"class":5356},[252,9765,9766],{"class":262},"[], ",[252,9768,266],{"class":258},[252,9770,7471],{"class":5356},[252,9772,269],{"class":262},[252,9774,9775],{"class":254,"line":8150},[252,9776,1685],{"class":262},[252,9778,9779,9781,9783,9785,9787,9789,9791,9793,9795,9797,9799],{"class":254,"line":8155},[252,9780,3340],{"class":258},[252,9782,1797],{"class":262},[252,9784,266],{"class":258},[252,9786,9578],{"class":262},[252,9788,308],{"class":258},[252,9790,4232],{"class":311},[252,9792,9585],{"class":262},[252,9794,1173],{"class":258},[252,9796,9590],{"class":262},[252,9798,2431],{"class":258},[252,9800,269],{"class":262},[252,9802,9803],{"class":254,"line":8161},[252,9804,2169],{"class":262},[252,9806,9807,9810,9812,9815,9817,9820,9822],{"class":254,"line":8173},[252,9808,9809],{"class":262},"        cout ",[252,9811,1307],{"class":258},[252,9813,9814],{"class":367}," \"Teacher: \"",[252,9816,1583],{"class":258},[252,9818,9819],{"class":262}," tArray[i].tName ",[252,9821,1307],{"class":258},[252,9823,8980],{"class":262},[252,9825,9826,9828,9830,9832,9834,9836,9838,9840,9842,9844,9846,9848],{"class":254,"line":8185},[252,9827,3542],{"class":258},[252,9829,1797],{"class":262},[252,9831,266],{"class":258},[252,9833,9640],{"class":262},[252,9835,308],{"class":258},[252,9837,4232],{"class":311},[252,9839,9647],{"class":262},[252,9841,1173],{"class":258},[252,9843,2287],{"class":311},[252,9845,9654],{"class":262},[252,9847,2431],{"class":258},[252,9849,269],{"class":262},[252,9851,9852],{"class":254,"line":8197},[252,9853,2649],{"class":262},[252,9855,9857,9860,9862,9865,9867,9870,9872,9875,9877],{"class":254,"line":9856},47,[252,9858,9859],{"class":262},"            cout ",[252,9861,1307],{"class":258},[252,9863,9864],{"class":367}," \"",[252,9866,1369],{"class":311},[252,9868,9869],{"class":367},"Student: \"",[252,9871,1583],{"class":258},[252,9873,9874],{"class":262}," tArray[i].sArray[j].sName",[252,9876,1307],{"class":258},[252,9878,1330],{"class":262},[252,9880,9882,9884,9886,9888,9890,9893,9895,9898,9900],{"class":254,"line":9881},48,[252,9883,9859],{"class":262},[252,9885,1307],{"class":258},[252,9887,9864],{"class":367},[252,9889,1369],{"class":311},[252,9891,9892],{"class":367},"Age: \"",[252,9894,1583],{"class":258},[252,9896,9897],{"class":262}," tArray[i].sArray[j].age ",[252,9899,1307],{"class":258},[252,9901,8980],{"class":262},[252,9903,9905,9907,9909,9911,9913,9916,9918,9921,9923],{"class":254,"line":9904},49,[252,9906,9859],{"class":262},[252,9908,1307],{"class":258},[252,9910,9864],{"class":367},[252,9912,1369],{"class":311},[252,9914,9915],{"class":367},"Score: \"",[252,9917,1583],{"class":258},[252,9919,9920],{"class":262}," tArray[i].sArray[j].score ",[252,9922,1307],{"class":258},[252,9924,9925],{"class":262}," endl;   \n",[252,9927,9929],{"class":254,"line":9928},50,[252,9930,2668],{"class":262},[252,9932,9934],{"class":254,"line":9933},51,[252,9935,2326],{"class":262},[252,9937,9939],{"class":254,"line":9938},52,[252,9940,1704],{"class":262},[252,9942,9944,9946,9948],{"class":254,"line":9943},53,[252,9945,266],{"class":258},[252,9947,2112],{"class":2102},[252,9949,2115],{"class":262},[252,9951,9953],{"class":254,"line":9952},54,[252,9954,1685],{"class":262},[252,9956,9958],{"class":254,"line":9957},55,[252,9959,9960],{"class":321},"    \u002F\u002F随机数种子\n",[252,9962,9964,9966,9968,9970,9972,9974,9976,9978,9980],{"class":254,"line":9963},56,[252,9965,2512],{"class":2102},[252,9967,2515],{"class":262},[252,9969,2518],{"class":258},[252,9971,2521],{"class":258},[252,9973,692],{"class":262},[252,9975,2526],{"class":2102},[252,9977,263],{"class":262},[252,9979,2531],{"class":311},[252,9981,2534],{"class":262},[252,9983,9985],{"class":254,"line":9984},57,[252,9986,9987],{"class":321},"    \u002F\u002F1.创建3名老师的数组\n",[252,9989,9991,9993,9995,9998,10000],{"class":254,"line":9990},58,[252,9992,8035],{"class":258},[252,9994,9539],{"class":2102},[252,9996,9997],{"class":262}," tArray[",[252,9999,334],{"class":311},[252,10001,4829],{"class":262},[252,10003,10005],{"class":254,"line":10004},59,[252,10006,10007],{"class":321},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[252,10009,10011,10013,10016,10018,10021,10024,10026,10028,10031,10033],{"class":254,"line":10010},60,[252,10012,2124],{"class":258},[252,10014,10015],{"class":262}," len ",[252,10017,308],{"class":258},[252,10019,10020],{"class":258}," sizeof",[252,10022,10023],{"class":262},"(tArray) ",[252,10025,847],{"class":258},[252,10027,10020],{"class":258},[252,10029,10030],{"class":262},"(tArray[",[252,10032,454],{"class":311},[252,10034,3995],{"class":262},[252,10036,10038,10041],{"class":254,"line":10037},61,[252,10039,10040],{"class":2102},"    allocateSpace",[252,10042,10043],{"class":262},"(tArray, len);\n",[252,10045,10047],{"class":254,"line":10046},62,[252,10048,10049],{"class":321},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[252,10051,10053,10056],{"class":254,"line":10052},63,[252,10054,10055],{"class":2102},"    printInfo",[252,10057,10043],{"class":262},[252,10059,10061],{"class":254,"line":10060},64,[252,10062,2539],{"emptyLinePlaceholder":181},[252,10064,10066],{"class":254,"line":10065},65,[252,10067,1704],{"class":262},[207,10069,10070],{"start":170},[210,10071,10072,10075],{},[412,10073,10074],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10077,10078],{},"五名英雄信息如下：",[244,10080,10084],{"className":10081,"code":10082,"language":10083,"meta":169,"style":169},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[22,10085,10086,10104,10121,10138,10155],{"__ignoreMap":169},[252,10087,10088,10090,10093,10095,10097,10099,10102],{"class":254,"line":255},[252,10089,5056],{"class":262},[252,10091,10092],{"class":367},"\"刘备\"",[252,10094,641],{"class":262},[252,10096,1038],{"class":311},[252,10098,641],{"class":262},[252,10100,10101],{"class":367},"\"男\"",[252,10103,5069],{"class":262},[252,10105,10106,10108,10111,10113,10115,10117,10119],{"class":254,"line":170},[252,10107,5056],{"class":262},[252,10109,10110],{"class":367},"\"关羽\"",[252,10112,641],{"class":262},[252,10114,1013],{"class":311},[252,10116,641],{"class":262},[252,10118,10101],{"class":367},[252,10120,5069],{"class":262},[252,10122,10123,10125,10128,10130,10132,10134,10136],{"class":254,"line":1318},[252,10124,5056],{"class":262},[252,10126,10127],{"class":367},"\"张飞\"",[252,10129,641],{"class":262},[252,10131,963],{"class":311},[252,10133,641],{"class":262},[252,10135,10101],{"class":367},[252,10137,5069],{"class":262},[252,10139,10140,10142,10145,10147,10149,10151,10153],{"class":254,"line":1333},[252,10141,5056],{"class":262},[252,10143,10144],{"class":367},"\"赵云\"",[252,10146,641],{"class":262},[252,10148,988],{"class":311},[252,10150,641],{"class":262},[252,10152,10101],{"class":367},[252,10154,5069],{"class":262},[252,10156,10157,10159,10162,10164,10166,10168,10171],{"class":254,"line":1339},[252,10158,5056],{"class":262},[252,10160,10161],{"class":367},"\"貂蝉\"",[252,10163,641],{"class":262},[252,10165,938],{"class":311},[252,10167,641],{"class":262},[252,10169,10170],{"class":367},"\"女\"",[252,10172,5069],{"class":262},[19,10174,10175],{},"代码：",[244,10177,10179],{"className":246,"code":10178,"language":248,"meta":169,"style":169},"#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",[22,10180,10181,10187,10197,10203,10210,10214,10218,10224,10229,10233,10238,10261,10265,10290,10294,10327,10332,10361,10366,10381,10407,10427,10432,10437,10441,10445,10450,10472,10476,10500,10504,10566,10570,10574,10582,10586,10591,10602,10606,10622,10638,10654,10670,10686,10690,10710,10732,10737,10750,10757,10762,10768,10773,10786,10792],{"__ignoreMap":169},[252,10182,10183,10185],{"class":254,"line":255},[252,10184,2088],{"class":258},[252,10186,2091],{"class":367},[252,10188,10189,10191,10193,10195],{"class":254,"line":170},[252,10190,2096],{"class":258},[252,10192,2099],{"class":258},[252,10194,2103],{"class":2102},[252,10196,1429],{"class":262},[252,10198,10199,10201],{"class":254,"line":1318},[252,10200,2088],{"class":258},[252,10202,7889],{"class":367},[252,10204,10205,10207],{"class":254,"line":1333},[252,10206,7899],{"class":258},[252,10208,10209],{"class":2102}," Sanguo\n",[252,10211,10212],{"class":254,"line":1339},[252,10213,1685],{"class":262},[252,10215,10216],{"class":254,"line":1353},[252,10217,7925],{"class":262},[252,10219,10220,10222],{"class":254,"line":1359},[252,10221,2124],{"class":258},[252,10223,7937],{"class":262},[252,10225,10226],{"class":254,"line":1450},[252,10227,10228],{"class":262},"    string gender;\n",[252,10230,10231],{"class":254,"line":1456},[252,10232,4134],{"class":262},[252,10234,10235],{"class":254,"line":1468},[252,10236,10237],{"class":321},"\u002F\u002F定义排序函数\n",[252,10239,10240,10242,10244,10246,10249,10251,10253,10255,10257,10259],{"class":254,"line":1751},[252,10241,5504],{"class":258},[252,10243,7456],{"class":2102},[252,10245,263],{"class":262},[252,10247,10248],{"class":2102},"Sanguo",[252,10250,6658],{"class":258},[252,10252,958],{"class":5356},[252,10254,641],{"class":262},[252,10256,266],{"class":258},[252,10258,7471],{"class":5356},[252,10260,269],{"class":262},[252,10262,10263],{"class":254,"line":1756},[252,10264,1685],{"class":262},[252,10266,10267,10269,10271,10273,10275,10277,10279,10281,10283,10286,10288],{"class":254,"line":1762},[252,10268,3340],{"class":258},[252,10270,263],{"class":262},[252,10272,266],{"class":258},[252,10274,3171],{"class":262},[252,10276,308],{"class":258},[252,10278,454],{"class":311},[252,10280,3178],{"class":262},[252,10282,1173],{"class":258},[252,10284,10285],{"class":262},"len;i",[252,10287,2431],{"class":258},[252,10289,269],{"class":262},[252,10291,10292],{"class":254,"line":1767},[252,10293,2169],{"class":262},[252,10295,10296,10299,10301,10303,10305,10307,10309,10311,10313,10315,10317,10319,10321,10323,10325],{"class":254,"line":1781},[252,10297,10298],{"class":258},"     for",[252,10300,1797],{"class":262},[252,10302,266],{"class":258},[252,10304,3549],{"class":262},[252,10306,308],{"class":258},[252,10308,454],{"class":311},[252,10310,3556],{"class":262},[252,10312,1173],{"class":258},[252,10314,7498],{"class":262},[252,10316,795],{"class":258},[252,10318,480],{"class":311},[252,10320,795],{"class":258},[252,10322,3689],{"class":262},[252,10324,2431],{"class":258},[252,10326,269],{"class":262},[252,10328,10329],{"class":254,"line":1786},[252,10330,10331],{"class":262},"     {\n",[252,10333,10334,10337,10340,10342,10345,10347,10350,10352,10354,10356,10358],{"class":254,"line":1792},[252,10335,10336],{"class":258},"         if",[252,10338,10339],{"class":262}," ((s",[252,10341,744],{"class":258},[252,10343,10344],{"class":262},"j)->age ",[252,10346,1223],{"class":258},[252,10348,10349],{"class":262}," (s",[252,10351,744],{"class":258},[252,10353,730],{"class":262},[252,10355,744],{"class":258},[252,10357,480],{"class":311},[252,10359,10360],{"class":262},")->age)\n",[252,10362,10363],{"class":254,"line":1813},[252,10364,10365],{"class":262},"         {\n",[252,10367,10368,10371,10373,10376,10378],{"class":254,"line":1818},[252,10369,10370],{"class":262},"             Sanguo temp",[252,10372,7293],{"class":258},[252,10374,10375],{"class":262},"(s",[252,10377,744],{"class":258},[252,10379,10380],{"class":262},"j);\n",[252,10382,10383,10386,10388,10390,10393,10395,10397,10399,10401,10403,10405],{"class":254,"line":1832},[252,10384,10385],{"class":258},"             *",[252,10387,10375],{"class":262},[252,10389,744],{"class":258},[252,10391,10392],{"class":262},"j)",[252,10394,7293],{"class":258},[252,10396,10375],{"class":262},[252,10398,744],{"class":258},[252,10400,730],{"class":262},[252,10402,744],{"class":258},[252,10404,480],{"class":311},[252,10406,2858],{"class":262},[252,10408,10409,10411,10413,10415,10417,10419,10421,10423,10425],{"class":254,"line":1837},[252,10410,10385],{"class":258},[252,10412,10375],{"class":262},[252,10414,744],{"class":258},[252,10416,730],{"class":262},[252,10418,744],{"class":258},[252,10420,480],{"class":311},[252,10422,692],{"class":262},[252,10424,308],{"class":258},[252,10426,4419],{"class":262},[252,10428,10429],{"class":254,"line":1866},[252,10430,10431],{"class":262},"         }\n",[252,10433,10434],{"class":254,"line":1871},[252,10435,10436],{"class":262},"     }\n",[252,10438,10439],{"class":254,"line":1888},[252,10440,2326],{"class":262},[252,10442,10443],{"class":254,"line":1893},[252,10444,1704],{"class":262},[252,10446,10447],{"class":254,"line":1898},[252,10448,10449],{"class":321},"\u002F\u002F定义打印函数\n",[252,10451,10452,10454,10456,10458,10460,10462,10464,10466,10468,10470],{"class":254,"line":1903},[252,10453,5504],{"class":258},[252,10455,9755],{"class":2102},[252,10457,263],{"class":262},[252,10459,10248],{"class":2102},[252,10461,6658],{"class":258},[252,10463,958],{"class":5356},[252,10465,641],{"class":262},[252,10467,266],{"class":258},[252,10469,7471],{"class":5356},[252,10471,269],{"class":262},[252,10473,10474],{"class":254,"line":1917},[252,10475,1685],{"class":262},[252,10477,10478,10480,10482,10484,10486,10488,10490,10492,10494,10496,10498],{"class":254,"line":1922},[252,10479,3340],{"class":258},[252,10481,1797],{"class":262},[252,10483,266],{"class":258},[252,10485,3171],{"class":262},[252,10487,308],{"class":258},[252,10489,454],{"class":311},[252,10491,3178],{"class":262},[252,10493,1173],{"class":258},[252,10495,10285],{"class":262},[252,10497,2431],{"class":258},[252,10499,269],{"class":262},[252,10501,10502],{"class":254,"line":2716},[252,10503,2169],{"class":262},[252,10505,10506,10508,10510,10512,10514,10517,10519,10521,10523,10526,10528,10530,10532,10535,10537,10539,10541,10544,10546,10548,10550,10553,10555,10557,10559,10562,10564],{"class":254,"line":2730},[252,10507,3590],{"class":262},[252,10509,1307],{"class":258},[252,10511,514],{"class":367},[252,10513,1369],{"class":311},[252,10515,10516],{"class":367},"姓名：\"",[252,10518,1307],{"class":258},[252,10520,10375],{"class":262},[252,10522,744],{"class":258},[252,10524,10525],{"class":262},"i)->name",[252,10527,1307],{"class":258},[252,10529,514],{"class":367},[252,10531,1369],{"class":311},[252,10533,10534],{"class":367},"年龄：\"",[252,10536,1307],{"class":258},[252,10538,10375],{"class":262},[252,10540,744],{"class":258},[252,10542,10543],{"class":262},"i)->age",[252,10545,1307],{"class":258},[252,10547,514],{"class":367},[252,10549,1369],{"class":311},[252,10551,10552],{"class":367},"性别：\"",[252,10554,1307],{"class":258},[252,10556,10375],{"class":262},[252,10558,744],{"class":258},[252,10560,10561],{"class":262},"i)->gender",[252,10563,1307],{"class":258},[252,10565,1330],{"class":262},[252,10567,10568],{"class":254,"line":2738},[252,10569,2326],{"class":262},[252,10571,10572],{"class":254,"line":2743},[252,10573,1704],{"class":262},[252,10575,10576,10578,10580],{"class":254,"line":2749},[252,10577,266],{"class":258},[252,10579,2112],{"class":2102},[252,10581,2115],{"class":262},[252,10583,10584],{"class":254,"line":2755},[252,10585,1685],{"class":262},[252,10587,10588],{"class":254,"line":2760},[252,10589,10590],{"class":321},"    \u002F\u002F定义结构体变量\n",[252,10592,10593,10596,10598,10600],{"class":254,"line":8088},[252,10594,10595],{"class":262},"    Sanguo s1[",[252,10597,582],{"class":311},[252,10599,1203],{"class":262},[252,10601,5047],{"class":258},[252,10603,10604],{"class":254,"line":8112},[252,10605,2169],{"class":262},[252,10607,10608,10610,10612,10614,10616,10618,10620],{"class":254,"line":8117},[252,10609,5056],{"class":262},[252,10611,10092],{"class":367},[252,10613,641],{"class":262},[252,10615,1038],{"class":311},[252,10617,641],{"class":262},[252,10619,10101],{"class":367},[252,10621,5069],{"class":262},[252,10623,10624,10626,10628,10630,10632,10634,10636],{"class":254,"line":8123},[252,10625,5056],{"class":262},[252,10627,10110],{"class":367},[252,10629,641],{"class":262},[252,10631,1013],{"class":311},[252,10633,641],{"class":262},[252,10635,10101],{"class":367},[252,10637,5069],{"class":262},[252,10639,10640,10642,10644,10646,10648,10650,10652],{"class":254,"line":8150},[252,10641,5056],{"class":262},[252,10643,10127],{"class":367},[252,10645,641],{"class":262},[252,10647,963],{"class":311},[252,10649,641],{"class":262},[252,10651,10101],{"class":367},[252,10653,5069],{"class":262},[252,10655,10656,10658,10660,10662,10664,10666,10668],{"class":254,"line":8155},[252,10657,5056],{"class":262},[252,10659,10144],{"class":367},[252,10661,641],{"class":262},[252,10663,988],{"class":311},[252,10665,641],{"class":262},[252,10667,10101],{"class":367},[252,10669,5069],{"class":262},[252,10671,10672,10674,10676,10678,10680,10682,10684],{"class":254,"line":8161},[252,10673,5056],{"class":262},[252,10675,10161],{"class":367},[252,10677,641],{"class":262},[252,10679,938],{"class":311},[252,10681,641],{"class":262},[252,10683,10170],{"class":367},[252,10685,5069],{"class":262},[252,10687,10688],{"class":254,"line":8173},[252,10689,5090],{"class":262},[252,10691,10692,10694,10696,10698,10701,10703,10706,10708],{"class":254,"line":8185},[252,10693,2124],{"class":258},[252,10695,7471],{"class":262},[252,10697,4342],{"class":258},[252,10699,10700],{"class":262},"(s1)",[252,10702,4348],{"class":258},[252,10704,10705],{"class":262},"(s1[",[252,10707,454],{"class":311},[252,10709,3995],{"class":262},[252,10711,10712,10715,10717,10720,10722,10725,10728,10730],{"class":254,"line":8197},[252,10713,10714],{"class":262},"    Sanguo ",[252,10716,718],{"class":258},[252,10718,10719],{"class":262},"s ",[252,10721,308],{"class":258},[252,10723,10724],{"class":258}," &",[252,10726,10727],{"class":262},"s1[",[252,10729,454],{"class":311},[252,10731,4829],{"class":262},[252,10733,10734],{"class":254,"line":9856},[252,10735,10736],{"class":321},"    \u002F\u002F排序前：\n",[252,10738,10739,10741,10743,10746,10748],{"class":254,"line":9881},[252,10740,6669],{"class":262},[252,10742,1307],{"class":258},[252,10744,10745],{"class":367}," \"排序前：\"",[252,10747,1583],{"class":258},[252,10749,8980],{"class":262},[252,10751,10752,10754],{"class":254,"line":9904},[252,10753,10055],{"class":2102},[252,10755,10756],{"class":262},"(s,len);\n",[252,10758,10759],{"class":254,"line":9928},[252,10760,10761],{"class":321},"    \u002F\u002F调用排序函数\n",[252,10763,10764,10766],{"class":254,"line":9933},[252,10765,7738],{"class":2102},[252,10767,10756],{"class":262},[252,10769,10770],{"class":254,"line":9938},[252,10771,10772],{"class":321},"    \u002F\u002F排序后\n",[252,10774,10775,10777,10779,10782,10784],{"class":254,"line":9943},[252,10776,6669],{"class":262},[252,10778,1307],{"class":258},[252,10780,10781],{"class":367}," \"排序后：\"",[252,10783,1583],{"class":258},[252,10785,8980],{"class":262},[252,10787,10788,10790],{"class":254,"line":9952},[252,10789,10055],{"class":2102},[252,10791,10756],{"class":262},[252,10793,10794],{"class":254,"line":9957},[252,10795,1704],{"class":262},[19,10797,10798,10799,10801],{},"注意：使用指针时直接用传首地址**&s",[252,10800,454],{},"**",[5266,10803,10804],{},"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":169,"searchDepth":170,"depth":170,"links":10806},[10807,10808,10809,10810,10811,10812,10813],{"id":7843,"depth":170,"text":7844},{"id":8205,"depth":170,"text":8206},{"id":8474,"depth":170,"text":8475},{"id":8639,"depth":170,"text":8640},{"id":8855,"depth":170,"text":8856},{"id":9176,"depth":170,"text":9177},{"id":9404,"depth":170,"text":9405},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7832,"description":7840},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10820,"title":10821,"body":10822,"description":169,"extension":179,"meta":12165,"navigation":181,"path":12166,"seo":12167,"stem":12168,"__hash__":12169},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10823,"toc":12159},[10824,10827,10831,10837,10851,10856,10859,10863,10870,10876,10879,10886,10892,10897,10900,10903,10906,11470,11473,11487,11491,11496,11512,11652,11655,11661,11664,11669,11677,11785,11788,11793,11796,11801,11804,11810,11813,12156],[10,10825,10821],{"id":10826},"_5程序内存模型",[14,10828,10830],{"id":10829},"_51内存分区模型","5.1内存分区模型",[19,10832,10833,10834],{},"C++程序在执行时，将内存大方向划分为",[412,10835,10836],{},"4个区域",[1270,10838,10839,10842,10845,10848],{},[210,10840,10841],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[210,10843,10844],{},"全局区：存放全局变量和静态变量以及常量",[210,10846,10847],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[210,10849,10850],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,10852,10853],{},[412,10854,10855],{},"内存四区意义：",[19,10857,10858],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[224,10860,10862],{"id":10861},"_511程序运行前","5.1.1程序运行前",[19,10864,10865,10866,10869],{},"​\t在程序编译后，生成了exe可执行程序，",[412,10867,10868],{},"未执行该程序前","分为两个区域",[19,10871,10872,10873],{},"​\t",[412,10874,10875],{},"代码区：",[19,10877,10878],{},"​\t\t存放 CPU 执行的机器指令",[19,10880,10881,10882,10885],{},"​\t\t代码区是",[412,10883,10884],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,10887,10881,10888,10891],{},[412,10889,10890],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,10893,10872,10894],{},[412,10895,10896],{},"全局区：",[19,10898,10899],{},"​\t\t全局变量和静态变量存放在此.",[19,10901,10902],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,10904,10905],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[244,10907,10909],{"className":246,"code":10908,"language":248,"meta":169,"style":169},"\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",[22,10910,10911,10916,10929,10942,10946,10951,10966,10981,10985,10994,10998,11003,11016,11029,11033,11038,11064,11090,11094,11121,11147,11151,11156,11172,11187,11191,11217,11243,11247,11272,11297,11301,11327,11353,11357,11373,11388,11414,11440,11444,11454,11458,11466],{"__ignoreMap":169},[252,10912,10913],{"class":254,"line":255},[252,10914,10915],{"class":321},"\u002F\u002F全局变量\n",[252,10917,10918,10920,10923,10925,10927],{"class":254,"line":170},[252,10919,266],{"class":258},[252,10921,10922],{"class":262}," g_a ",[252,10924,308],{"class":258},[252,10926,2177],{"class":311},[252,10928,1429],{"class":262},[252,10930,10931,10933,10936,10938,10940],{"class":254,"line":1318},[252,10932,266],{"class":258},[252,10934,10935],{"class":262}," g_b ",[252,10937,308],{"class":258},[252,10939,2177],{"class":311},[252,10941,1429],{"class":262},[252,10943,10944],{"class":254,"line":1333},[252,10945,2539],{"emptyLinePlaceholder":181},[252,10947,10948],{"class":254,"line":1339},[252,10949,10950],{"class":321},"\u002F\u002F全局常量\n",[252,10952,10953,10955,10957,10960,10962,10964],{"class":254,"line":1353},[252,10954,6932],{"class":258},[252,10956,2521],{"class":258},[252,10958,10959],{"class":262}," c_g_a ",[252,10961,308],{"class":258},[252,10963,2177],{"class":311},[252,10965,1429],{"class":262},[252,10967,10968,10970,10972,10975,10977,10979],{"class":254,"line":1359},[252,10969,6932],{"class":258},[252,10971,2521],{"class":258},[252,10973,10974],{"class":262}," c_g_b ",[252,10976,308],{"class":258},[252,10978,2177],{"class":311},[252,10980,1429],{"class":262},[252,10982,10983],{"class":254,"line":1450},[252,10984,2539],{"emptyLinePlaceholder":181},[252,10986,10987,10989,10991],{"class":254,"line":1456},[252,10988,266],{"class":258},[252,10990,2112],{"class":2102},[252,10992,10993],{"class":262},"() {\n",[252,10995,10996],{"class":254,"line":1468},[252,10997,2539],{"emptyLinePlaceholder":181},[252,10999,11000],{"class":254,"line":1751},[252,11001,11002],{"class":321},"    \u002F\u002F局部变量\n",[252,11004,11005,11007,11010,11012,11014],{"class":254,"line":1756},[252,11006,2124],{"class":258},[252,11008,11009],{"class":262}," a ",[252,11011,308],{"class":258},[252,11013,2177],{"class":311},[252,11015,1429],{"class":262},[252,11017,11018,11020,11023,11025,11027],{"class":254,"line":1762},[252,11019,2124],{"class":258},[252,11021,11022],{"class":262}," b ",[252,11024,308],{"class":258},[252,11026,2177],{"class":311},[252,11028,1429],{"class":262},[252,11030,11031],{"class":254,"line":1767},[252,11032,2539],{"emptyLinePlaceholder":181},[252,11034,11035],{"class":254,"line":1781},[252,11036,11037],{"class":321},"    \u002F\u002F打印地址\n",[252,11039,11040,11042,11044,11047,11049,11051,11053,11055,11057,11060,11062],{"class":254,"line":1786},[252,11041,6669],{"class":262},[252,11043,1307],{"class":258},[252,11045,11046],{"class":367}," \"局部变量a地址为： \"",[252,11048,1583],{"class":258},[252,11050,1797],{"class":262},[252,11052,266],{"class":258},[252,11054,692],{"class":262},[252,11056,616],{"class":258},[252,11058,11059],{"class":262},"a ",[252,11061,1307],{"class":258},[252,11063,8980],{"class":262},[252,11065,11066,11068,11070,11073,11075,11077,11079,11081,11083,11086,11088],{"class":254,"line":1792},[252,11067,6669],{"class":262},[252,11069,1307],{"class":258},[252,11071,11072],{"class":367}," \"局部变量b地址为： \"",[252,11074,1583],{"class":258},[252,11076,1797],{"class":262},[252,11078,266],{"class":258},[252,11080,692],{"class":262},[252,11082,616],{"class":258},[252,11084,11085],{"class":262},"b ",[252,11087,1307],{"class":258},[252,11089,8980],{"class":262},[252,11091,11092],{"class":254,"line":1813},[252,11093,2539],{"emptyLinePlaceholder":181},[252,11095,11096,11098,11100,11103,11105,11108,11110,11112,11114,11117,11119],{"class":254,"line":1818},[252,11097,6669],{"class":262},[252,11099,1307],{"class":258},[252,11101,11102],{"class":367}," \"全局变量g_a地址为： \"",[252,11104,1583],{"class":258},[252,11106,11107],{"class":262},"  (",[252,11109,266],{"class":258},[252,11111,692],{"class":262},[252,11113,616],{"class":258},[252,11115,11116],{"class":262},"g_a ",[252,11118,1307],{"class":258},[252,11120,8980],{"class":262},[252,11122,11123,11125,11127,11130,11132,11134,11136,11138,11140,11143,11145],{"class":254,"line":1832},[252,11124,6669],{"class":262},[252,11126,1307],{"class":258},[252,11128,11129],{"class":367}," \"全局变量g_b地址为： \"",[252,11131,1583],{"class":258},[252,11133,11107],{"class":262},[252,11135,266],{"class":258},[252,11137,692],{"class":262},[252,11139,616],{"class":258},[252,11141,11142],{"class":262},"g_b ",[252,11144,1307],{"class":258},[252,11146,8980],{"class":262},[252,11148,11149],{"class":254,"line":1837},[252,11150,2539],{"emptyLinePlaceholder":181},[252,11152,11153],{"class":254,"line":1866},[252,11154,11155],{"class":321},"    \u002F\u002F静态变量\n",[252,11157,11158,11161,11163,11166,11168,11170],{"class":254,"line":1871},[252,11159,11160],{"class":258},"    static",[252,11162,2521],{"class":258},[252,11164,11165],{"class":262}," s_a ",[252,11167,308],{"class":258},[252,11169,2177],{"class":311},[252,11171,1429],{"class":262},[252,11173,11174,11176,11178,11181,11183,11185],{"class":254,"line":1888},[252,11175,11160],{"class":258},[252,11177,2521],{"class":258},[252,11179,11180],{"class":262}," s_b ",[252,11182,308],{"class":258},[252,11184,2177],{"class":311},[252,11186,1429],{"class":262},[252,11188,11189],{"class":254,"line":1893},[252,11190,2539],{"emptyLinePlaceholder":181},[252,11192,11193,11195,11197,11200,11202,11204,11206,11208,11210,11213,11215],{"class":254,"line":1898},[252,11194,6669],{"class":262},[252,11196,1307],{"class":258},[252,11198,11199],{"class":367}," \"静态变量s_a地址为： \"",[252,11201,1583],{"class":258},[252,11203,1797],{"class":262},[252,11205,266],{"class":258},[252,11207,692],{"class":262},[252,11209,616],{"class":258},[252,11211,11212],{"class":262},"s_a ",[252,11214,1307],{"class":258},[252,11216,8980],{"class":262},[252,11218,11219,11221,11223,11226,11228,11230,11232,11234,11236,11239,11241],{"class":254,"line":1903},[252,11220,6669],{"class":262},[252,11222,1307],{"class":258},[252,11224,11225],{"class":367}," \"静态变量s_b地址为： \"",[252,11227,1583],{"class":258},[252,11229,1797],{"class":262},[252,11231,266],{"class":258},[252,11233,692],{"class":262},[252,11235,616],{"class":258},[252,11237,11238],{"class":262},"s_b ",[252,11240,1307],{"class":258},[252,11242,8980],{"class":262},[252,11244,11245],{"class":254,"line":1917},[252,11246,2539],{"emptyLinePlaceholder":181},[252,11248,11249,11251,11253,11256,11258,11260,11262,11264,11266,11268,11270],{"class":254,"line":1922},[252,11250,6669],{"class":262},[252,11252,1307],{"class":258},[252,11254,11255],{"class":367}," \"字符串常量地址为： \"",[252,11257,1583],{"class":258},[252,11259,1797],{"class":262},[252,11261,266],{"class":258},[252,11263,692],{"class":262},[252,11265,616],{"class":258},[252,11267,1325],{"class":367},[252,11269,1583],{"class":258},[252,11271,8980],{"class":262},[252,11273,11274,11276,11278,11280,11282,11284,11286,11288,11290,11293,11295],{"class":254,"line":2716},[252,11275,6669],{"class":262},[252,11277,1307],{"class":258},[252,11279,11255],{"class":367},[252,11281,1583],{"class":258},[252,11283,1797],{"class":262},[252,11285,266],{"class":258},[252,11287,692],{"class":262},[252,11289,616],{"class":258},[252,11291,11292],{"class":367},"\"hello world1\"",[252,11294,1583],{"class":258},[252,11296,8980],{"class":262},[252,11298,11299],{"class":254,"line":2730},[252,11300,2539],{"emptyLinePlaceholder":181},[252,11302,11303,11305,11307,11310,11312,11314,11316,11318,11320,11323,11325],{"class":254,"line":2738},[252,11304,6669],{"class":262},[252,11306,1307],{"class":258},[252,11308,11309],{"class":367}," \"全局常量c_g_a地址为： \"",[252,11311,1583],{"class":258},[252,11313,1797],{"class":262},[252,11315,266],{"class":258},[252,11317,692],{"class":262},[252,11319,616],{"class":258},[252,11321,11322],{"class":262},"c_g_a ",[252,11324,1307],{"class":258},[252,11326,8980],{"class":262},[252,11328,11329,11331,11333,11336,11338,11340,11342,11344,11346,11349,11351],{"class":254,"line":2743},[252,11330,6669],{"class":262},[252,11332,1307],{"class":258},[252,11334,11335],{"class":367}," \"全局常量c_g_b地址为： \"",[252,11337,1583],{"class":258},[252,11339,1797],{"class":262},[252,11341,266],{"class":258},[252,11343,692],{"class":262},[252,11345,616],{"class":258},[252,11347,11348],{"class":262},"c_g_b ",[252,11350,1307],{"class":258},[252,11352,8980],{"class":262},[252,11354,11355],{"class":254,"line":2749},[252,11356,2539],{"emptyLinePlaceholder":181},[252,11358,11359,11362,11364,11367,11369,11371],{"class":254,"line":2755},[252,11360,11361],{"class":258},"    const",[252,11363,2521],{"class":258},[252,11365,11366],{"class":262}," c_l_a ",[252,11368,308],{"class":258},[252,11370,2177],{"class":311},[252,11372,1429],{"class":262},[252,11374,11375,11377,11379,11382,11384,11386],{"class":254,"line":2760},[252,11376,11361],{"class":258},[252,11378,2521],{"class":258},[252,11380,11381],{"class":262}," c_l_b ",[252,11383,308],{"class":258},[252,11385,2177],{"class":311},[252,11387,1429],{"class":262},[252,11389,11390,11392,11394,11397,11399,11401,11403,11405,11407,11410,11412],{"class":254,"line":8088},[252,11391,6669],{"class":262},[252,11393,1307],{"class":258},[252,11395,11396],{"class":367}," \"局部常量c_l_a地址为： \"",[252,11398,1583],{"class":258},[252,11400,1797],{"class":262},[252,11402,266],{"class":258},[252,11404,692],{"class":262},[252,11406,616],{"class":258},[252,11408,11409],{"class":262},"c_l_a ",[252,11411,1307],{"class":258},[252,11413,8980],{"class":262},[252,11415,11416,11418,11420,11423,11425,11427,11429,11431,11433,11436,11438],{"class":254,"line":8112},[252,11417,6669],{"class":262},[252,11419,1307],{"class":258},[252,11421,11422],{"class":367}," \"局部常量c_l_b地址为： \"",[252,11424,1583],{"class":258},[252,11426,1797],{"class":262},[252,11428,266],{"class":258},[252,11430,692],{"class":262},[252,11432,616],{"class":258},[252,11434,11435],{"class":262},"c_l_b ",[252,11437,1307],{"class":258},[252,11439,8980],{"class":262},[252,11441,11442],{"class":254,"line":8117},[252,11443,2539],{"emptyLinePlaceholder":181},[252,11445,11446,11448,11450,11452],{"class":254,"line":8123},[252,11447,2442],{"class":2102},[252,11449,263],{"class":262},[252,11451,2447],{"class":367},[252,11453,2858],{"class":262},[252,11455,11456],{"class":254,"line":8150},[252,11457,2539],{"emptyLinePlaceholder":181},[252,11459,11460,11462,11464],{"class":254,"line":8155},[252,11461,4229],{"class":258},[252,11463,4232],{"class":311},[252,11465,1429],{"class":262},[252,11467,11468],{"class":254,"line":8161},[252,11469,1704],{"class":262},[19,11471,11472],{},"总结：",[1270,11474,11475,11478,11481,11484],{},[210,11476,11477],{},"c++中程序运行前分为全局区和代码区",[210,11479,11480],{},"代码区特点是共享和只读",[210,11482,11483],{},"全局区中存放全局变量、静态变量、常量",[210,11485,11486],{},"常量区中存放const修饰的全局常量和字符串常量",[224,11488,11490],{"id":11489},"_512程序运行后","5.1.2程序运行后",[207,11492,11493],{},[210,11494,11495],{},"栈区：",[1270,11497,11498,11505],{},[210,11499,11500,11501,11504],{},"由编译器自动分配释放, 存放",[412,11502,11503],{},"函数的参数值,局部变量","等",[210,11506,11507,11508,11511],{},"注意事项：",[412,11509,11510],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[244,11513,11515],{"className":246,"code":11514,"language":248,"meta":169,"style":169},"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",[22,11516,11517,11528,11532,11547,11559,11563,11567,11575,11580,11595,11613,11630,11640,11648],{"__ignoreMap":169},[252,11518,11519,11521,11523,11526],{"class":254,"line":255},[252,11520,266],{"class":258},[252,11522,6658],{"class":258},[252,11524,11525],{"class":2102}," func",[252,11527,2115],{"class":262},[252,11529,11530],{"class":254,"line":170},[252,11531,1685],{"class":262},[252,11533,11534,11536,11538,11540,11542,11544],{"class":254,"line":1318},[252,11535,2124],{"class":258},[252,11537,11009],{"class":262},[252,11539,308],{"class":258},[252,11541,2177],{"class":311},[252,11543,318],{"class":262},[252,11545,11546],{"class":321}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[252,11548,11549,11551,11553,11556],{"class":254,"line":1333},[252,11550,4229],{"class":258},[252,11552,10724],{"class":258},[252,11554,11555],{"class":262},"a;",[252,11557,11558],{"class":321}," \u002F\u002F放回局部变量的地址\n",[252,11560,11561],{"class":254,"line":1339},[252,11562,1704],{"class":262},[252,11564,11565],{"class":254,"line":1353},[252,11566,2539],{"emptyLinePlaceholder":181},[252,11568,11569,11571,11573],{"class":254,"line":1359},[252,11570,266],{"class":258},[252,11572,2112],{"class":2102},[252,11574,10993],{"class":262},[252,11576,11577],{"class":254,"line":1450},[252,11578,11579],{"class":321},"    \u002F\u002F接受func的返回值\n",[252,11581,11582,11584,11586,11589,11591,11593],{"class":254,"line":1456},[252,11583,2124],{"class":258},[252,11585,6658],{"class":258},[252,11587,11588],{"class":262},"p ",[252,11590,308],{"class":258},[252,11592,11525],{"class":2102},[252,11594,5776],{"class":262},[252,11596,11597,11599,11601,11603,11605,11607,11610],{"class":254,"line":1468},[252,11598,6669],{"class":262},[252,11600,1307],{"class":258},[252,11602,6658],{"class":258},[252,11604,11588],{"class":262},[252,11606,1307],{"class":258},[252,11608,11609],{"class":262}," endl;",[252,11611,11612],{"class":321}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[252,11614,11615,11617,11619,11621,11623,11625,11627],{"class":254,"line":1751},[252,11616,6669],{"class":262},[252,11618,1307],{"class":258},[252,11620,6658],{"class":258},[252,11622,11588],{"class":262},[252,11624,1307],{"class":258},[252,11626,11609],{"class":262},[252,11628,11629],{"class":321}," \u002F\u002F第二次这个数据不再保留\n",[252,11631,11632,11634,11636,11638],{"class":254,"line":1756},[252,11633,2442],{"class":2102},[252,11635,263],{"class":262},[252,11637,2447],{"class":367},[252,11639,2858],{"class":262},[252,11641,11642,11644,11646],{"class":254,"line":1762},[252,11643,4229],{"class":258},[252,11645,4232],{"class":311},[252,11647,1429],{"class":262},[252,11649,11650],{"class":254,"line":1767},[252,11651,1704],{"class":262},[19,11653,11654],{},"输出结果：",[19,11656,11657],{},[1601,11658],{"alt":11659,"src":11660},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,11662,11663],{},"总结：不要返回局部变量的地址",[207,11665,11666],{"start":170},[210,11667,11668],{},"堆区",[1270,11670,11671,11674],{},[210,11672,11673],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[210,11675,11676],{},"在c++中主要利用new在堆区开辟内存",[244,11678,11680],{"className":246,"code":11679,"language":248,"meta":169,"style":169},"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",[22,11681,11682,11697,11701,11706,11727,11734,11738,11746,11750,11755,11769,11781],{"__ignoreMap":169},[252,11683,11684,11686,11689,11692,11694],{"class":254,"line":255},[252,11685,266],{"class":258},[252,11687,11688],{"class":258},"  *",[252,11690,11691],{"class":2102},"func",[252,11693,2566],{"class":262},[252,11695,11696],{"class":321},"  \u002F\u002F函数返回指针\n",[252,11698,11699],{"class":254,"line":170},[252,11700,1685],{"class":262},[252,11702,11703],{"class":254,"line":1318},[252,11704,11705],{"class":321},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[252,11707,11708,11710,11712,11714,11716,11719,11721,11723,11725],{"class":254,"line":1333},[252,11709,4286],{"class":258},[252,11711,6658],{"class":258},[252,11713,19],{"class":262},[252,11715,308],{"class":258},[252,11717,11718],{"class":258}," new",[252,11720,2521],{"class":258},[252,11722,263],{"class":262},[252,11724,709],{"class":311},[252,11726,2858],{"class":262},[252,11728,11729,11731],{"class":254,"line":1339},[252,11730,4520],{"class":258},[252,11732,11733],{"class":262}," p;\n",[252,11735,11736],{"class":254,"line":1353},[252,11737,1704],{"class":262},[252,11739,11740,11742,11744],{"class":254,"line":1359},[252,11741,266],{"class":258},[252,11743,2112],{"class":2102},[252,11745,2115],{"class":262},[252,11747,11748],{"class":254,"line":1450},[252,11749,1685],{"class":262},[252,11751,11752],{"class":254,"line":1456},[252,11753,11754],{"class":321},"    \u002F\u002F在堆区开辟数据\n",[252,11756,11757,11759,11761,11763,11765,11767],{"class":254,"line":1468},[252,11758,2124],{"class":258},[252,11760,6658],{"class":258},[252,11762,19],{"class":262},[252,11764,308],{"class":258},[252,11766,11691],{"class":2102},[252,11768,5776],{"class":262},[252,11770,11771,11773,11775,11777,11779],{"class":254,"line":1751},[252,11772,1690],{"class":262},[252,11774,6559],{"class":258},[252,11776,19],{"class":262},[252,11778,1307],{"class":258},[252,11780,1330],{"class":262},[252,11782,11783],{"class":254,"line":1756},[252,11784,1704],{"class":262},[19,11786,11787],{},"图片展示：",[19,11789,11790],{},[1601,11791],{"alt":11659,"src":11792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,11794,11795],{},"堆区内存由程序员管生死！！！",[207,11797,11798],{"start":1318},[210,11799,11800],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,11802,11803],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,11805,11806,11807],{},"​语法：",[22,11808,11809],{}," new 数据类型",[19,11811,11812],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[244,11814,11816],{"className":246,"code":11815,"language":248,"meta":169,"style":169},"\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",[22,11817,11818,11823,11833,11837,11842,11847,11869,11873,11881,11885,11899,11911,11923,11935,11940,11945,11956,11960,11965,11973,11977,11982,12004,12030,12034,12052,12056,12082,12086,12098,12102,12107,12112,12120,12124,12128,12136,12140,12146,12152],{"__ignoreMap":169},[252,11819,11820],{"class":254,"line":255},[252,11821,11822],{"class":321},"\u002F\u002F1.new的基本语法\n",[252,11824,11825,11827,11829,11831],{"class":254,"line":170},[252,11826,266],{"class":258},[252,11828,6658],{"class":258},[252,11830,11691],{"class":2102},[252,11832,2115],{"class":262},[252,11834,11835],{"class":254,"line":1318},[252,11836,1685],{"class":262},[252,11838,11839],{"class":254,"line":1333},[252,11840,11841],{"class":321},"    \u002F\u002F在堆区创建整型数据\n",[252,11843,11844],{"class":254,"line":1339},[252,11845,11846],{"class":321},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[252,11848,11849,11851,11853,11855,11858,11860,11862,11864,11866],{"class":254,"line":1353},[252,11850,2124],{"class":258},[252,11852,6658],{"class":258},[252,11854,19],{"class":262},[252,11856,11857],{"class":258},"=new",[252,11859,2521],{"class":258},[252,11861,263],{"class":262},[252,11863,709],{"class":311},[252,11865,6106],{"class":262},[252,11867,11868],{"class":321},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[252,11870,11871],{"class":254,"line":1359},[252,11872,1704],{"class":262},[252,11874,11875,11877,11879],{"class":254,"line":1450},[252,11876,5504],{"class":258},[252,11878,5728],{"class":2102},[252,11880,2115],{"class":262},[252,11882,11883],{"class":254,"line":1456},[252,11884,1685],{"class":262},[252,11886,11887,11889,11891,11893,11895,11897],{"class":254,"line":1468},[252,11888,2124],{"class":258},[252,11890,6658],{"class":258},[252,11892,19],{"class":262},[252,11894,308],{"class":258},[252,11896,11691],{"class":2102},[252,11898,5776],{"class":262},[252,11900,11901,11903,11905,11907,11909],{"class":254,"line":1751},[252,11902,1690],{"class":262},[252,11904,6559],{"class":258},[252,11906,19],{"class":262},[252,11908,1307],{"class":258},[252,11910,1330],{"class":262},[252,11912,11913,11915,11917,11919,11921],{"class":254,"line":1756},[252,11914,1690],{"class":262},[252,11916,6559],{"class":258},[252,11918,19],{"class":262},[252,11920,1307],{"class":258},[252,11922,1330],{"class":262},[252,11924,11925,11927,11929,11931,11933],{"class":254,"line":1762},[252,11926,1690],{"class":262},[252,11928,6559],{"class":258},[252,11930,19],{"class":262},[252,11932,1307],{"class":258},[252,11934,1330],{"class":262},[252,11936,11937],{"class":254,"line":1767},[252,11938,11939],{"class":321},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[252,11941,11942],{"class":254,"line":1781},[252,11943,11944],{"class":321},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[252,11946,11947,11950,11953],{"class":254,"line":1786},[252,11948,11949],{"class":258},"    delete",[252,11951,11952],{"class":262}," p;",[252,11954,11955],{"class":321},"\u002F\u002F删除这块地址\n",[252,11957,11958],{"class":254,"line":1792},[252,11959,1704],{"class":262},[252,11961,11962],{"class":254,"line":1813},[252,11963,11964],{"class":321},"\u002F\u002F2.在堆区利用new开辟数组\n",[252,11966,11967,11969,11971],{"class":254,"line":1818},[252,11968,5504],{"class":258},[252,11970,5797],{"class":2102},[252,11972,2115],{"class":262},[252,11974,11975],{"class":254,"line":1832},[252,11976,1685],{"class":262},[252,11978,11979],{"class":254,"line":1837},[252,11980,11981],{"class":321},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[252,11983,11984,11986,11988,11990,11992,11994,11996,11998,12001],{"class":254,"line":1866},[252,11985,2124],{"class":258},[252,11987,6658],{"class":258},[252,11989,4019],{"class":262},[252,11991,11857],{"class":258},[252,11993,2521],{"class":258},[252,11995,1153],{"class":262},[252,11997,709],{"class":311},[252,11999,12000],{"class":262},"];",[252,12002,12003],{"class":321},"\u002F\u002F10代表数组有10个元素\n",[252,12005,12006,12008,12010,12012,12014,12016,12018,12020,12022,12024,12026,12028],{"class":254,"line":1871},[252,12007,3340],{"class":258},[252,12009,1797],{"class":262},[252,12011,266],{"class":258},[252,12013,3171],{"class":262},[252,12015,308],{"class":258},[252,12017,454],{"class":311},[252,12019,3178],{"class":262},[252,12021,1173],{"class":258},[252,12023,709],{"class":311},[252,12025,3178],{"class":262},[252,12027,2431],{"class":258},[252,12029,269],{"class":262},[252,12031,12032],{"class":254,"line":1888},[252,12033,2169],{"class":262},[252,12035,12036,12039,12041,12043,12045,12047,12049],{"class":254,"line":1893},[252,12037,12038],{"class":262},"        arr[i]",[252,12040,308],{"class":258},[252,12042,704],{"class":262},[252,12044,744],{"class":258},[252,12046,574],{"class":311},[252,12048,318],{"class":262},[252,12050,12051],{"class":321},"\u002F\u002F给10个元素赋值100～109\n",[252,12053,12054],{"class":254,"line":1898},[252,12055,2326],{"class":262},[252,12057,12058,12060,12062,12064,12066,12068,12070,12072,12074,12076,12078,12080],{"class":254,"line":1903},[252,12059,3340],{"class":258},[252,12061,1797],{"class":262},[252,12063,266],{"class":258},[252,12065,3171],{"class":262},[252,12067,308],{"class":258},[252,12069,454],{"class":311},[252,12071,3178],{"class":262},[252,12073,1173],{"class":258},[252,12075,709],{"class":311},[252,12077,3178],{"class":262},[252,12079,2431],{"class":258},[252,12081,269],{"class":262},[252,12083,12084],{"class":254,"line":1917},[252,12085,2169],{"class":262},[252,12087,12088,12090,12092,12094,12096],{"class":254,"line":1922},[252,12089,3590],{"class":262},[252,12091,1307],{"class":258},[252,12093,4493],{"class":262},[252,12095,1307],{"class":258},[252,12097,1330],{"class":262},[252,12099,12100],{"class":254,"line":2716},[252,12101,2326],{"class":262},[252,12103,12104],{"class":254,"line":2730},[252,12105,12106],{"class":321},"    \u002F\u002F释放堆区数组\n",[252,12108,12109],{"class":254,"line":2738},[252,12110,12111],{"class":321},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[252,12113,12114,12117],{"class":254,"line":2743},[252,12115,12116],{"class":258},"    delete[]",[252,12118,12119],{"class":262}," arr;\n",[252,12121,12122],{"class":254,"line":2749},[252,12123,1704],{"class":262},[252,12125,12126],{"class":254,"line":2755},[252,12127,2539],{"emptyLinePlaceholder":181},[252,12129,12130,12132,12134],{"class":254,"line":2760},[252,12131,266],{"class":258},[252,12133,2112],{"class":2102},[252,12135,2115],{"class":262},[252,12137,12138],{"class":254,"line":8088},[252,12139,1685],{"class":262},[252,12141,12142,12144],{"class":254,"line":8112},[252,12143,5773],{"class":2102},[252,12145,5776],{"class":262},[252,12147,12148,12150],{"class":254,"line":8117},[252,12149,5842],{"class":2102},[252,12151,5776],{"class":262},[252,12153,12154],{"class":254,"line":8123},[252,12155,1704],{"class":262},[5266,12157,12158],{},"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":169,"searchDepth":170,"depth":170,"links":12160},[12161],{"id":10829,"depth":170,"text":10830,"children":12162},[12163,12164],{"id":10861,"depth":1318,"text":10862},{"id":11489,"depth":1318,"text":11490},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10821,"description":169},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12171,"title":12172,"body":12173,"description":169,"extension":179,"meta":13654,"navigation":181,"path":13655,"seo":13656,"stem":13657,"__hash__":13658},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12174,"toc":13646},[12175,12178,12182,12185,12188,12357,12361,12366,12383,12388,12540,12544,12547,12550,12944,12948,12951,12956,12959,13271,13275,13281,13441,13443,13451,13455,13458,13465,13643],[10,12176,12172],{"id":12177},"_6引用",[14,12179,12181],{"id":12180},"_61引用基本用法","6.1引用基本用法",[19,12183,12184],{},"引用的本质：给变量起别名",[19,12186,12187],{},"语法：数据类型 &别名=原名",[244,12189,12191],{"className":246,"code":12190,"language":248,"meta":169,"style":169},"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",[22,12192,12193,12201,12205,12217,12229,12233,12252,12271,12275,12286,12290,12309,12327,12331,12341,12345,12353],{"__ignoreMap":169},[252,12194,12195,12197,12199],{"class":254,"line":255},[252,12196,266],{"class":258},[252,12198,2112],{"class":2102},[252,12200,10993],{"class":262},[252,12202,12203],{"class":254,"line":170},[252,12204,2539],{"emptyLinePlaceholder":181},[252,12206,12207,12209,12211,12213,12215],{"class":254,"line":1318},[252,12208,2124],{"class":258},[252,12210,11009],{"class":262},[252,12212,308],{"class":258},[252,12214,2177],{"class":311},[252,12216,1429],{"class":262},[252,12218,12219,12221,12223,12225,12227],{"class":254,"line":1333},[252,12220,2124],{"class":258},[252,12222,10724],{"class":258},[252,12224,11085],{"class":262},[252,12226,308],{"class":258},[252,12228,1571],{"class":262},[252,12230,12231],{"class":254,"line":1339},[252,12232,2539],{"emptyLinePlaceholder":181},[252,12234,12235,12237,12239,12242,12244,12246,12248,12250],{"class":254,"line":1353},[252,12236,6669],{"class":262},[252,12238,1307],{"class":258},[252,12240,12241],{"class":367}," \"a = \"",[252,12243,1583],{"class":258},[252,12245,11009],{"class":262},[252,12247,1307],{"class":258},[252,12249,11609],{"class":262},[252,12251,7408],{"class":321},[252,12253,12254,12256,12258,12261,12263,12265,12267,12269],{"class":254,"line":1359},[252,12255,6669],{"class":262},[252,12257,1307],{"class":258},[252,12259,12260],{"class":367}," \"b = \"",[252,12262,1583],{"class":258},[252,12264,11022],{"class":262},[252,12266,1307],{"class":258},[252,12268,11609],{"class":262},[252,12270,7408],{"class":321},[252,12272,12273],{"class":254,"line":1450},[252,12274,2539],{"emptyLinePlaceholder":181},[252,12276,12277,12280,12282,12284],{"class":254,"line":1456},[252,12278,12279],{"class":262},"    b ",[252,12281,308],{"class":258},[252,12283,5894],{"class":311},[252,12285,1429],{"class":262},[252,12287,12288],{"class":254,"line":1468},[252,12289,2539],{"emptyLinePlaceholder":181},[252,12291,12292,12294,12296,12298,12300,12302,12304,12306],{"class":254,"line":1751},[252,12293,6669],{"class":262},[252,12295,1307],{"class":258},[252,12297,12241],{"class":367},[252,12299,1583],{"class":258},[252,12301,11009],{"class":262},[252,12303,1307],{"class":258},[252,12305,11609],{"class":262},[252,12307,12308],{"class":321},"\u002F\u002F100\n",[252,12310,12311,12313,12315,12317,12319,12321,12323,12325],{"class":254,"line":1756},[252,12312,6669],{"class":262},[252,12314,1307],{"class":258},[252,12316,12260],{"class":367},[252,12318,1583],{"class":258},[252,12320,11022],{"class":262},[252,12322,1307],{"class":258},[252,12324,11609],{"class":262},[252,12326,12308],{"class":321},[252,12328,12329],{"class":254,"line":1762},[252,12330,2539],{"emptyLinePlaceholder":181},[252,12332,12333,12335,12337,12339],{"class":254,"line":1767},[252,12334,2442],{"class":2102},[252,12336,263],{"class":262},[252,12338,2447],{"class":367},[252,12340,2858],{"class":262},[252,12342,12343],{"class":254,"line":1781},[252,12344,2539],{"emptyLinePlaceholder":181},[252,12346,12347,12349,12351],{"class":254,"line":1786},[252,12348,4229],{"class":258},[252,12350,4232],{"class":311},[252,12352,1429],{"class":262},[252,12354,12355],{"class":254,"line":1792},[252,12356,1704],{"class":262},[14,12358,12360],{"id":12359},"_62引用的注意事项","6.2引用的注意事项",[207,12362,12363],{},[210,12364,12365],{},"引用必须要初始化",[244,12367,12369],{"className":246,"code":12368,"language":248,"meta":169,"style":169},"int &b;\u002F\u002F非常错误！\n",[22,12370,12371],{"__ignoreMap":169},[252,12372,12373,12375,12377,12380],{"class":254,"line":255},[252,12374,266],{"class":258},[252,12376,10724],{"class":258},[252,12378,12379],{"class":262},"b;",[252,12381,12382],{"class":321},"\u002F\u002F非常错误！\n",[207,12384,12385],{"start":170},[210,12386,12387],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[244,12389,12391],{"className":246,"code":12390,"language":248,"meta":169,"style":169},"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",[22,12392,12393,12401,12413,12425,12433,12449,12462,12480,12498,12518,12528,12536],{"__ignoreMap":169},[252,12394,12395,12397,12399],{"class":254,"line":255},[252,12396,266],{"class":258},[252,12398,2112],{"class":2102},[252,12400,10993],{"class":262},[252,12402,12403,12405,12407,12409,12411],{"class":254,"line":170},[252,12404,2124],{"class":258},[252,12406,11009],{"class":262},[252,12408,308],{"class":258},[252,12410,2177],{"class":311},[252,12412,1429],{"class":262},[252,12414,12415,12417,12419,12421,12423],{"class":254,"line":1318},[252,12416,2124],{"class":258},[252,12418,11022],{"class":262},[252,12420,308],{"class":258},[252,12422,9090],{"class":311},[252,12424,1429],{"class":262},[252,12426,12427,12430],{"class":254,"line":1333},[252,12428,12429],{"class":321},"    \u002F\u002Fint &c;",[252,12431,12432],{"class":321}," \u002F\u002F错误，引用必须初始化\n",[252,12434,12435,12437,12439,12441,12443,12446],{"class":254,"line":1339},[252,12436,2124],{"class":258},[252,12438,10724],{"class":258},[252,12440,3085],{"class":262},[252,12442,308],{"class":258},[252,12444,12445],{"class":262}," a;",[252,12447,12448],{"class":321}," \u002F\u002F一旦初始化后，就不可以更改\n",[252,12450,12451,12454,12456,12459],{"class":254,"line":1353},[252,12452,12453],{"class":262},"    c ",[252,12455,308],{"class":258},[252,12457,12458],{"class":262}," b;",[252,12460,12461],{"class":321}," \u002F\u002F这是赋值操作，不是更改引用\n",[252,12463,12464,12466,12468,12470,12472,12474,12476,12478],{"class":254,"line":1359},[252,12465,6669],{"class":262},[252,12467,1307],{"class":258},[252,12469,12241],{"class":367},[252,12471,1583],{"class":258},[252,12473,11009],{"class":262},[252,12475,1307],{"class":258},[252,12477,11609],{"class":262},[252,12479,7393],{"class":321},[252,12481,12482,12484,12486,12488,12490,12492,12494,12496],{"class":254,"line":1450},[252,12483,6669],{"class":262},[252,12485,1307],{"class":258},[252,12487,12260],{"class":367},[252,12489,1583],{"class":258},[252,12491,11022],{"class":262},[252,12493,1307],{"class":258},[252,12495,11609],{"class":262},[252,12497,7393],{"class":321},[252,12499,12500,12502,12504,12507,12509,12512,12514,12516],{"class":254,"line":1456},[252,12501,6669],{"class":262},[252,12503,1307],{"class":258},[252,12505,12506],{"class":367}," \"c = \"",[252,12508,1583],{"class":258},[252,12510,12511],{"class":262}," c ",[252,12513,1307],{"class":258},[252,12515,11609],{"class":262},[252,12517,7393],{"class":321},[252,12519,12520,12522,12524,12526],{"class":254,"line":1468},[252,12521,2442],{"class":2102},[252,12523,263],{"class":262},[252,12525,2447],{"class":367},[252,12527,2858],{"class":262},[252,12529,12530,12532,12534],{"class":254,"line":1751},[252,12531,4229],{"class":258},[252,12533,4232],{"class":311},[252,12535,1429],{"class":262},[252,12537,12538],{"class":254,"line":1756},[252,12539,1704],{"class":262},[14,12541,12543],{"id":12542},"_63引用做函数参数","6.3引用做函数参数",[19,12545,12546],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12548,12549],{},"优点：可以简化指针修改实参",[244,12551,12553],{"className":246,"code":12552,"language":248,"meta":169,"style":169},"\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",[22,12554,12555,12560,12583,12594,12604,12613,12617,12621,12626,12648,12660,12672,12682,12686,12690,12695,12717,12727,12735,12743,12747,12751,12759,12763,12775,12787,12791,12802,12828,12832,12852,12876,12880,12890,12914,12918,12928,12932,12940],{"__ignoreMap":169},[252,12556,12557],{"class":254,"line":255},[252,12558,12559],{"class":321},"\u002F\u002F1. 值传递\n",[252,12561,12562,12564,12567,12569,12571,12573,12576,12578,12580],{"class":254,"line":170},[252,12563,5504],{"class":258},[252,12565,12566],{"class":2102}," mySwap01",[252,12568,263],{"class":262},[252,12570,266],{"class":258},[252,12572,1537],{"class":5356},[252,12574,12575],{"class":262},", ",[252,12577,266],{"class":258},[252,12579,2972],{"class":5356},[252,12581,12582],{"class":262},") {\n",[252,12584,12585,12587,12590,12592],{"class":254,"line":1318},[252,12586,2124],{"class":258},[252,12588,12589],{"class":262}," temp ",[252,12591,308],{"class":258},[252,12593,1571],{"class":262},[252,12595,12596,12599,12601],{"class":254,"line":1333},[252,12597,12598],{"class":262},"    a ",[252,12600,308],{"class":258},[252,12602,12603],{"class":262}," b;\n",[252,12605,12606,12608,12610],{"class":254,"line":1339},[252,12607,12279],{"class":262},[252,12609,308],{"class":258},[252,12611,12612],{"class":262}," temp;\n",[252,12614,12615],{"class":254,"line":1353},[252,12616,1704],{"class":262},[252,12618,12619],{"class":254,"line":1359},[252,12620,2539],{"emptyLinePlaceholder":181},[252,12622,12623],{"class":254,"line":1450},[252,12624,12625],{"class":321},"\u002F\u002F2. 地址传递\n",[252,12627,12628,12630,12633,12635,12638,12640,12642,12644,12646],{"class":254,"line":1456},[252,12629,5504],{"class":258},[252,12631,12632],{"class":2102}," mySwap02",[252,12634,263],{"class":262},[252,12636,12637],{"class":258},"int*",[252,12639,1537],{"class":5356},[252,12641,12575],{"class":262},[252,12643,12637],{"class":258},[252,12645,2972],{"class":5356},[252,12647,12582],{"class":262},[252,12649,12650,12652,12654,12656,12658],{"class":254,"line":1468},[252,12651,2124],{"class":258},[252,12653,12589],{"class":262},[252,12655,308],{"class":258},[252,12657,6658],{"class":258},[252,12659,6337],{"class":262},[252,12661,12662,12664,12666,12668,12670],{"class":254,"line":1751},[252,12663,6543],{"class":258},[252,12665,11059],{"class":262},[252,12667,308],{"class":258},[252,12669,6658],{"class":258},[252,12671,6209],{"class":262},[252,12673,12674,12676,12678,12680],{"class":254,"line":1756},[252,12675,6543],{"class":258},[252,12677,11085],{"class":262},[252,12679,308],{"class":258},[252,12681,12612],{"class":262},[252,12683,12684],{"class":254,"line":1762},[252,12685,1704],{"class":262},[252,12687,12688],{"class":254,"line":1767},[252,12689,2539],{"emptyLinePlaceholder":181},[252,12691,12692],{"class":254,"line":1781},[252,12693,12694],{"class":321},"\u002F\u002F3. 引用传递\n",[252,12696,12697,12699,12702,12704,12707,12709,12711,12713,12715],{"class":254,"line":1786},[252,12698,5504],{"class":258},[252,12700,12701],{"class":2102}," mySwap03",[252,12703,263],{"class":262},[252,12705,12706],{"class":258},"int&",[252,12708,1537],{"class":5356},[252,12710,12575],{"class":262},[252,12712,12706],{"class":258},[252,12714,2972],{"class":5356},[252,12716,12582],{"class":262},[252,12718,12719,12721,12723,12725],{"class":254,"line":1792},[252,12720,2124],{"class":258},[252,12722,12589],{"class":262},[252,12724,308],{"class":258},[252,12726,1571],{"class":262},[252,12728,12729,12731,12733],{"class":254,"line":1813},[252,12730,12598],{"class":262},[252,12732,308],{"class":258},[252,12734,12603],{"class":262},[252,12736,12737,12739,12741],{"class":254,"line":1818},[252,12738,12279],{"class":262},[252,12740,308],{"class":258},[252,12742,12612],{"class":262},[252,12744,12745],{"class":254,"line":1832},[252,12746,1704],{"class":262},[252,12748,12749],{"class":254,"line":1837},[252,12750,2539],{"emptyLinePlaceholder":181},[252,12752,12753,12755,12757],{"class":254,"line":1866},[252,12754,266],{"class":258},[252,12756,2112],{"class":2102},[252,12758,10993],{"class":262},[252,12760,12761],{"class":254,"line":1871},[252,12762,2539],{"emptyLinePlaceholder":181},[252,12764,12765,12767,12769,12771,12773],{"class":254,"line":1888},[252,12766,2124],{"class":258},[252,12768,11009],{"class":262},[252,12770,308],{"class":258},[252,12772,2177],{"class":311},[252,12774,1429],{"class":262},[252,12776,12777,12779,12781,12783,12785],{"class":254,"line":1893},[252,12778,2124],{"class":258},[252,12780,11022],{"class":262},[252,12782,308],{"class":258},[252,12784,9090],{"class":311},[252,12786,1429],{"class":262},[252,12788,12789],{"class":254,"line":1898},[252,12790,2539],{"emptyLinePlaceholder":181},[252,12792,12793,12796,12799],{"class":254,"line":1903},[252,12794,12795],{"class":2102},"    mySwap01",[252,12797,12798],{"class":262},"(a, b);",[252,12800,12801],{"class":321},"\u002F\u002F值传递，形参不会修饰实参\n",[252,12803,12804,12806,12808,12811,12813,12815,12817,12820,12822,12824,12826],{"class":254,"line":1917},[252,12805,6669],{"class":262},[252,12807,1307],{"class":258},[252,12809,12810],{"class":367}," \"a:\"",[252,12812,1583],{"class":258},[252,12814,11009],{"class":262},[252,12816,1307],{"class":258},[252,12818,12819],{"class":367}," \" b:\"",[252,12821,1583],{"class":258},[252,12823,11022],{"class":262},[252,12825,1307],{"class":258},[252,12827,8980],{"class":262},[252,12829,12830],{"class":254,"line":1922},[252,12831,2539],{"emptyLinePlaceholder":181},[252,12833,12834,12837,12839,12841,12844,12846,12849],{"class":254,"line":2716},[252,12835,12836],{"class":2102},"    mySwap02",[252,12838,263],{"class":262},[252,12840,616],{"class":258},[252,12842,12843],{"class":262},"a, ",[252,12845,616],{"class":258},[252,12847,12848],{"class":262},"b);",[252,12850,12851],{"class":321},"\u002F\u002F地址传递，形参会修饰实参\n",[252,12853,12854,12856,12858,12860,12862,12864,12866,12868,12870,12872,12874],{"class":254,"line":2730},[252,12855,6669],{"class":262},[252,12857,1307],{"class":258},[252,12859,12810],{"class":367},[252,12861,1583],{"class":258},[252,12863,11009],{"class":262},[252,12865,1307],{"class":258},[252,12867,12819],{"class":367},[252,12869,1583],{"class":258},[252,12871,11022],{"class":262},[252,12873,1307],{"class":258},[252,12875,8980],{"class":262},[252,12877,12878],{"class":254,"line":2738},[252,12879,2539],{"emptyLinePlaceholder":181},[252,12881,12882,12885,12887],{"class":254,"line":2743},[252,12883,12884],{"class":2102},"    mySwap03",[252,12886,12798],{"class":262},[252,12888,12889],{"class":321},"\u002F\u002F引用传递，形参会修饰实参\n",[252,12891,12892,12894,12896,12898,12900,12902,12904,12906,12908,12910,12912],{"class":254,"line":2749},[252,12893,6669],{"class":262},[252,12895,1307],{"class":258},[252,12897,12810],{"class":367},[252,12899,1583],{"class":258},[252,12901,11009],{"class":262},[252,12903,1307],{"class":258},[252,12905,12819],{"class":367},[252,12907,1583],{"class":258},[252,12909,11022],{"class":262},[252,12911,1307],{"class":258},[252,12913,8980],{"class":262},[252,12915,12916],{"class":254,"line":2755},[252,12917,2539],{"emptyLinePlaceholder":181},[252,12919,12920,12922,12924,12926],{"class":254,"line":2760},[252,12921,2442],{"class":2102},[252,12923,263],{"class":262},[252,12925,2447],{"class":367},[252,12927,2858],{"class":262},[252,12929,12930],{"class":254,"line":8088},[252,12931,2539],{"emptyLinePlaceholder":181},[252,12933,12934,12936,12938],{"class":254,"line":8112},[252,12935,4229],{"class":258},[252,12937,4232],{"class":311},[252,12939,1429],{"class":262},[252,12941,12942],{"class":254,"line":8117},[252,12943,1704],{"class":262},[14,12945,12947],{"id":12946},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,12949,12950],{},"作用：引用是可以作为函数的返回值存在的",[19,12952,9165,12953],{},[412,12954,12955],{},"不要返回局部变量引用",[19,12957,12958],{},"用法：函数调用作为左值",[244,12960,12962],{"className":10081,"code":12961,"language":10083,"meta":169,"style":169},"\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",[22,12963,12964,12969,12977,12992,12998,13002,13006,13011,13019,13036,13042,13046,13050,13058,13062,13067,13081,13101,13120,13124,13129,13142,13162,13180,13184,13200,13204,13223,13241,13245,13255,13259,13267],{"__ignoreMap":169},[252,12965,12966],{"class":254,"line":255},[252,12967,12968],{"class":321},"\u002F\u002F返回局部变量引用\n",[252,12970,12971,12973,12975],{"class":254,"line":170},[252,12972,12706],{"class":258},[252,12974,5728],{"class":2102},[252,12976,10993],{"class":262},[252,12978,12979,12981,12983,12985,12987,12989],{"class":254,"line":1318},[252,12980,2124],{"class":258},[252,12982,11009],{"class":262},[252,12984,308],{"class":258},[252,12986,2177],{"class":311},[252,12988,318],{"class":262},[252,12990,12991],{"class":321}," \u002F\u002F局部变量\n",[252,12993,12994,12996],{"class":254,"line":1333},[252,12995,4229],{"class":258},[252,12997,1571],{"class":262},[252,12999,13000],{"class":254,"line":1339},[252,13001,1704],{"class":262},[252,13003,13004],{"class":254,"line":1353},[252,13005,2539],{"emptyLinePlaceholder":181},[252,13007,13008],{"class":254,"line":1359},[252,13009,13010],{"class":321},"\u002F\u002F返回静态变量引用\n",[252,13012,13013,13015,13017],{"class":254,"line":1450},[252,13014,12706],{"class":258},[252,13016,5797],{"class":2102},[252,13018,10993],{"class":262},[252,13020,13021,13023,13025,13027,13029,13031,13033],{"class":254,"line":1456},[252,13022,11160],{"class":258},[252,13024,2521],{"class":258},[252,13026,11009],{"class":262},[252,13028,308],{"class":258},[252,13030,9090],{"class":311},[252,13032,318],{"class":262},[252,13034,13035],{"class":321},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[252,13037,13038,13040],{"class":254,"line":1468},[252,13039,4229],{"class":258},[252,13041,1571],{"class":262},[252,13043,13044],{"class":254,"line":1751},[252,13045,1704],{"class":262},[252,13047,13048],{"class":254,"line":1756},[252,13049,2539],{"emptyLinePlaceholder":181},[252,13051,13052,13054,13056],{"class":254,"line":1762},[252,13053,266],{"class":258},[252,13055,2112],{"class":2102},[252,13057,10993],{"class":262},[252,13059,13060],{"class":254,"line":1767},[252,13061,2539],{"emptyLinePlaceholder":181},[252,13063,13064],{"class":254,"line":1781},[252,13065,13066],{"class":321},"    \u002F\u002F不能返回局部变量的引用\n",[252,13068,13069,13072,13075,13077,13079],{"class":254,"line":1786},[252,13070,13071],{"class":258},"    int&",[252,13073,13074],{"class":262}," ref ",[252,13076,308],{"class":258},[252,13078,5728],{"class":2102},[252,13080,5776],{"class":262},[252,13082,13083,13085,13087,13090,13092,13094,13096,13098],{"class":254,"line":1792},[252,13084,6669],{"class":262},[252,13086,1307],{"class":258},[252,13088,13089],{"class":367}," \"ref = \"",[252,13091,1583],{"class":258},[252,13093,13074],{"class":262},[252,13095,1307],{"class":258},[252,13097,11609],{"class":262},[252,13099,13100],{"class":321},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[252,13102,13103,13105,13107,13109,13111,13113,13115,13117],{"class":254,"line":1813},[252,13104,6669],{"class":262},[252,13106,1307],{"class":258},[252,13108,13089],{"class":367},[252,13110,1583],{"class":258},[252,13112,13074],{"class":262},[252,13114,1307],{"class":258},[252,13116,11609],{"class":262},[252,13118,13119],{"class":321},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[252,13121,13122],{"class":254,"line":1818},[252,13123,2539],{"emptyLinePlaceholder":181},[252,13125,13126],{"class":254,"line":1832},[252,13127,13128],{"class":321},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[252,13130,13131,13133,13136,13138,13140],{"class":254,"line":1837},[252,13132,13071],{"class":258},[252,13134,13135],{"class":262}," ref2 ",[252,13137,308],{"class":258},[252,13139,5797],{"class":2102},[252,13141,5776],{"class":262},[252,13143,13144,13146,13148,13151,13153,13155,13157,13159],{"class":254,"line":1866},[252,13145,6669],{"class":262},[252,13147,1307],{"class":258},[252,13149,13150],{"class":367}," \"ref2 = \"",[252,13152,1583],{"class":258},[252,13154,13135],{"class":262},[252,13156,1307],{"class":258},[252,13158,11609],{"class":262},[252,13160,13161],{"class":321}," \u002F\u002F20\n",[252,13163,13164,13166,13168,13170,13172,13174,13176,13178],{"class":254,"line":1871},[252,13165,6669],{"class":262},[252,13167,1307],{"class":258},[252,13169,13150],{"class":367},[252,13171,1583],{"class":258},[252,13173,13135],{"class":262},[252,13175,1307],{"class":258},[252,13177,11609],{"class":262},[252,13179,13161],{"class":321},[252,13181,13182],{"class":254,"line":1888},[252,13183,2539],{"emptyLinePlaceholder":181},[252,13185,13186,13188,13191,13193,13195,13197],{"class":254,"line":1893},[252,13187,5842],{"class":2102},[252,13189,13190],{"class":262},"() ",[252,13192,308],{"class":258},[252,13194,3138],{"class":311},[252,13196,318],{"class":262},[252,13198,13199],{"class":321},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[252,13201,13202],{"class":254,"line":1898},[252,13203,2539],{"emptyLinePlaceholder":181},[252,13205,13206,13208,13210,13212,13214,13216,13218,13220],{"class":254,"line":1903},[252,13207,6669],{"class":262},[252,13209,1307],{"class":258},[252,13211,13150],{"class":367},[252,13213,1583],{"class":258},[252,13215,13135],{"class":262},[252,13217,1307],{"class":258},[252,13219,11609],{"class":262},[252,13221,13222],{"class":321}," \u002F\u002F1000\n",[252,13224,13225,13227,13229,13231,13233,13235,13237,13239],{"class":254,"line":1917},[252,13226,6669],{"class":262},[252,13228,1307],{"class":258},[252,13230,13150],{"class":367},[252,13232,1583],{"class":258},[252,13234,13135],{"class":262},[252,13236,1307],{"class":258},[252,13238,11609],{"class":262},[252,13240,13222],{"class":321},[252,13242,13243],{"class":254,"line":1922},[252,13244,2539],{"emptyLinePlaceholder":181},[252,13246,13247,13249,13251,13253],{"class":254,"line":2716},[252,13248,2442],{"class":2102},[252,13250,263],{"class":262},[252,13252,2447],{"class":367},[252,13254,2858],{"class":262},[252,13256,13257],{"class":254,"line":2730},[252,13258,2539],{"emptyLinePlaceholder":181},[252,13260,13261,13263,13265],{"class":254,"line":2738},[252,13262,4229],{"class":258},[252,13264,4232],{"class":311},[252,13266,1429],{"class":262},[252,13268,13269],{"class":254,"line":2743},[252,13270,1704],{"class":262},[14,13272,13274],{"id":13273},"_65引用的本质","6.5引用的本质",[19,13276,13277,13278],{},"本质：",[412,13279,13280],{},"引用的本质在c++内部实现是一个指针常量.",[244,13282,13284],{"className":246,"code":13283,"language":248,"meta":169,"style":169},"\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",[22,13285,13286,13291,13307,13321,13325,13334,13346,13351,13356,13367,13380,13384,13400,13417,13421,13429,13437],{"__ignoreMap":169},[252,13287,13288],{"class":254,"line":255},[252,13289,13290],{"class":321},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[252,13292,13293,13295,13297,13299,13301,13304],{"class":254,"line":170},[252,13294,5504],{"class":258},[252,13296,11525],{"class":2102},[252,13298,263],{"class":262},[252,13300,12706],{"class":258},[252,13302,13303],{"class":5356}," ref",[252,13305,13306],{"class":262},"){\n",[252,13308,13309,13312,13314,13316,13318],{"class":254,"line":1318},[252,13310,13311],{"class":262},"    ref ",[252,13313,308],{"class":258},[252,13315,5894],{"class":311},[252,13317,318],{"class":262},[252,13319,13320],{"class":321}," \u002F\u002F ref是引用，转换为*ref = 100\n",[252,13322,13323],{"class":254,"line":1333},[252,13324,1704],{"class":262},[252,13326,13327,13329,13331],{"class":254,"line":1339},[252,13328,266],{"class":258},[252,13330,2112],{"class":2102},[252,13332,13333],{"class":262},"(){\n",[252,13335,13336,13338,13340,13342,13344],{"class":254,"line":1353},[252,13337,2124],{"class":258},[252,13339,11009],{"class":262},[252,13341,308],{"class":258},[252,13343,2177],{"class":311},[252,13345,1429],{"class":262},[252,13347,13348],{"class":254,"line":1359},[252,13349,13350],{"class":262},"    \n",[252,13352,13353],{"class":254,"line":1450},[252,13354,13355],{"class":321},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[252,13357,13358,13360,13362,13364],{"class":254,"line":1456},[252,13359,13071],{"class":258},[252,13361,13074],{"class":262},[252,13363,308],{"class":258},[252,13365,13366],{"class":262}," a; \n",[252,13368,13369,13371,13373,13375,13377],{"class":254,"line":1468},[252,13370,13311],{"class":262},[252,13372,308],{"class":258},[252,13374,9090],{"class":311},[252,13376,318],{"class":262},[252,13378,13379],{"class":321}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[252,13381,13382],{"class":254,"line":1751},[252,13383,13350],{"class":262},[252,13385,13386,13388,13390,13392,13394,13396,13398],{"class":254,"line":1756},[252,13387,6669],{"class":262},[252,13389,1307],{"class":258},[252,13391,12810],{"class":367},[252,13393,1583],{"class":258},[252,13395,11009],{"class":262},[252,13397,1307],{"class":258},[252,13399,8980],{"class":262},[252,13401,13402,13404,13406,13409,13411,13413,13415],{"class":254,"line":1762},[252,13403,6669],{"class":262},[252,13405,1307],{"class":258},[252,13407,13408],{"class":367}," \"ref:\"",[252,13410,1583],{"class":258},[252,13412,13074],{"class":262},[252,13414,1307],{"class":258},[252,13416,8980],{"class":262},[252,13418,13419],{"class":254,"line":1767},[252,13420,13350],{"class":262},[252,13422,13423,13426],{"class":254,"line":1781},[252,13424,13425],{"class":2102},"    func",[252,13427,13428],{"class":262},"(a);\n",[252,13430,13431,13433,13435],{"class":254,"line":1786},[252,13432,4229],{"class":258},[252,13434,4232],{"class":311},[252,13436,1429],{"class":262},[252,13438,13439],{"class":254,"line":1792},[252,13440,1704],{"class":262},[19,13442,11472],{},[207,13444,13445,13448],{},[210,13446,13447],{},"引用的本质，就是一个指针常量",[210,13449,13450],{},"引用一旦初始化，就不可以发生改变",[14,13452,13454],{"id":13453},"_66常量引用","6.6常量引用",[19,13456,13457],{},"作用：常量引用主要用来修饰形参",[19,13459,13460,13461,13464],{},"在函数形参列表中，可以加",[412,13462,13463],{},"const修饰形参","，防止形参改变实参",[244,13466,13468],{"className":246,"code":13467,"language":248,"meta":169,"style":169},"\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",[22,13469,13470,13475,13480,13499,13504,13517,13521,13525,13533,13537,13542,13547,13561,13565,13573,13585,13589,13594,13606,13613,13617,13627,13631,13639],{"__ignoreMap":169},[252,13471,13472],{"class":254,"line":255},[252,13473,13474],{"class":321},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[252,13476,13477],{"class":254,"line":170},[252,13478,13479],{"class":321},"\u002F\u002F加上const就不能修改实参的\n",[252,13481,13482,13484,13487,13489,13491,13494,13497],{"class":254,"line":1318},[252,13483,5504],{"class":258},[252,13485,13486],{"class":2102}," showValue",[252,13488,263],{"class":262},[252,13490,6932],{"class":258},[252,13492,13493],{"class":258}," int&",[252,13495,13496],{"class":5356}," v",[252,13498,12582],{"class":262},[252,13500,13501],{"class":254,"line":1333},[252,13502,13503],{"class":321},"    \u002F\u002Fv += 100;\n",[252,13505,13506,13508,13510,13513,13515],{"class":254,"line":1339},[252,13507,6669],{"class":262},[252,13509,1307],{"class":258},[252,13511,13512],{"class":262}," v ",[252,13514,1307],{"class":258},[252,13516,8980],{"class":262},[252,13518,13519],{"class":254,"line":1353},[252,13520,1704],{"class":262},[252,13522,13523],{"class":254,"line":1359},[252,13524,2539],{"emptyLinePlaceholder":181},[252,13526,13527,13529,13531],{"class":254,"line":1450},[252,13528,266],{"class":258},[252,13530,2112],{"class":2102},[252,13532,10993],{"class":262},[252,13534,13535],{"class":254,"line":1456},[252,13536,2539],{"emptyLinePlaceholder":181},[252,13538,13539],{"class":254,"line":1468},[252,13540,13541],{"class":321},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[252,13543,13544],{"class":254,"line":1751},[252,13545,13546],{"class":321},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[252,13548,13549,13551,13553,13555,13557,13559],{"class":254,"line":1756},[252,13550,11361],{"class":258},[252,13552,13493],{"class":258},[252,13554,13074],{"class":262},[252,13556,308],{"class":258},[252,13558,2177],{"class":311},[252,13560,1429],{"class":262},[252,13562,13563],{"class":254,"line":1762},[252,13564,2539],{"emptyLinePlaceholder":181},[252,13566,13567,13570],{"class":254,"line":1767},[252,13568,13569],{"class":321},"    \u002F\u002Fref = 100;",[252,13571,13572],{"class":321},"  \u002F\u002F加入const后不可以修改变量\n",[252,13574,13575,13577,13579,13581,13583],{"class":254,"line":1781},[252,13576,6669],{"class":262},[252,13578,1307],{"class":258},[252,13580,13074],{"class":262},[252,13582,1307],{"class":258},[252,13584,8980],{"class":262},[252,13586,13587],{"class":254,"line":1786},[252,13588,2539],{"emptyLinePlaceholder":181},[252,13590,13591],{"class":254,"line":1792},[252,13592,13593],{"class":321},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[252,13595,13596,13598,13600,13602,13604],{"class":254,"line":1813},[252,13597,2124],{"class":258},[252,13599,11009],{"class":262},[252,13601,308],{"class":258},[252,13603,2177],{"class":311},[252,13605,1429],{"class":262},[252,13607,13608,13611],{"class":254,"line":1818},[252,13609,13610],{"class":2102},"    showValue",[252,13612,13428],{"class":262},[252,13614,13615],{"class":254,"line":1832},[252,13616,2539],{"emptyLinePlaceholder":181},[252,13618,13619,13621,13623,13625],{"class":254,"line":1837},[252,13620,2442],{"class":2102},[252,13622,263],{"class":262},[252,13624,2447],{"class":367},[252,13626,2858],{"class":262},[252,13628,13629],{"class":254,"line":1866},[252,13630,2539],{"emptyLinePlaceholder":181},[252,13632,13633,13635,13637],{"class":254,"line":1871},[252,13634,4229],{"class":258},[252,13636,4232],{"class":311},[252,13638,1429],{"class":262},[252,13640,13641],{"class":254,"line":1888},[252,13642,1704],{"class":262},[5266,13644,13645],{},"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":169,"searchDepth":170,"depth":170,"links":13647},[13648,13649,13650,13651,13652,13653],{"id":12180,"depth":170,"text":12181},{"id":12359,"depth":170,"text":12360},{"id":12542,"depth":170,"text":12543},{"id":12946,"depth":170,"text":12947},{"id":13273,"depth":170,"text":13274},{"id":13453,"depth":170,"text":13454},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12172,"description":169},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13660,"title":13661,"body":13662,"description":169,"extension":179,"meta":14743,"navigation":181,"path":14744,"seo":14745,"stem":14746,"__hash__":14747},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13663,"toc":14735},[13664,13667,13671,13674,13679,13911,13913,13924,13928,13931,13939,14043,14046,14050,14053,14057,14060,14065,14087,14093,14420,14423,14427,14435,14732],[10,13665,13661],{"id":13666},"_7函数高级部分",[14,13668,13670],{"id":13669},"_71函数默认参数","7.1函数默认参数",[19,13672,13673],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,13675,5321,13676],{},[22,13677,13678],{}," 返回值类型  函数名 （参数= 默认值）{}",[244,13680,13682],{"className":246,"code":13681,"language":248,"meta":169,"style":169},"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",[22,13683,13684,13719,13734,13738,13742,13747,13752,13781,13801,13811,13815,13819,13827,13831,13859,13881,13885,13895,13899,13907],{"__ignoreMap":169},[252,13685,13686,13688,13690,13692,13694,13696,13698,13700,13702,13705,13707,13709,13711,13713,13715,13717],{"class":254,"line":255},[252,13687,266],{"class":258},[252,13689,11525],{"class":2102},[252,13691,263],{"class":262},[252,13693,266],{"class":258},[252,13695,1537],{"class":5356},[252,13697,12575],{"class":262},[252,13699,266],{"class":258},[252,13701,2972],{"class":5356},[252,13703,13704],{"class":258}," =",[252,13706,2177],{"class":311},[252,13708,12575],{"class":262},[252,13710,266],{"class":258},[252,13712,2988],{"class":5356},[252,13714,13704],{"class":258},[252,13716,2177],{"class":311},[252,13718,12582],{"class":262},[252,13720,13721,13723,13725,13727,13729,13731],{"class":254,"line":170},[252,13722,4229],{"class":258},[252,13724,11009],{"class":262},[252,13726,744],{"class":258},[252,13728,11022],{"class":262},[252,13730,744],{"class":258},[252,13732,13733],{"class":262}," c;\n",[252,13735,13736],{"class":254,"line":1318},[252,13737,1704],{"class":262},[252,13739,13740],{"class":254,"line":1333},[252,13741,2539],{"emptyLinePlaceholder":181},[252,13743,13744],{"class":254,"line":1339},[252,13745,13746],{"class":321},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[252,13748,13749],{"class":254,"line":1353},[252,13750,13751],{"class":321},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[252,13753,13754,13756,13759,13761,13763,13765,13767,13769,13771,13773,13775,13777,13779],{"class":254,"line":1359},[252,13755,266],{"class":258},[252,13757,13758],{"class":2102}," func2",[252,13760,263],{"class":262},[252,13762,266],{"class":258},[252,13764,1537],{"class":5356},[252,13766,13704],{"class":258},[252,13768,2177],{"class":311},[252,13770,12575],{"class":262},[252,13772,266],{"class":258},[252,13774,2972],{"class":5356},[252,13776,13704],{"class":258},[252,13778,2177],{"class":311},[252,13780,2858],{"class":262},[252,13782,13783,13785,13787,13789,13791,13793,13795,13797,13799],{"class":254,"line":1450},[252,13784,266],{"class":258},[252,13786,13758],{"class":2102},[252,13788,263],{"class":262},[252,13790,266],{"class":258},[252,13792,1537],{"class":5356},[252,13794,12575],{"class":262},[252,13796,266],{"class":258},[252,13798,2972],{"class":5356},[252,13800,12582],{"class":262},[252,13802,13803,13805,13807,13809],{"class":254,"line":1456},[252,13804,4229],{"class":258},[252,13806,11009],{"class":262},[252,13808,744],{"class":258},[252,13810,12603],{"class":262},[252,13812,13813],{"class":254,"line":1468},[252,13814,1704],{"class":262},[252,13816,13817],{"class":254,"line":1751},[252,13818,2539],{"emptyLinePlaceholder":181},[252,13820,13821,13823,13825],{"class":254,"line":1756},[252,13822,266],{"class":258},[252,13824,2112],{"class":2102},[252,13826,10993],{"class":262},[252,13828,13829],{"class":254,"line":1762},[252,13830,2539],{"emptyLinePlaceholder":181},[252,13832,13833,13835,13837,13840,13842,13844,13846,13848,13850,13852,13855,13857],{"class":254,"line":1767},[252,13834,6669],{"class":262},[252,13836,1307],{"class":258},[252,13838,13839],{"class":367}," \"ret = \"",[252,13841,1583],{"class":258},[252,13843,11525],{"class":2102},[252,13845,263],{"class":262},[252,13847,963],{"class":311},[252,13849,12575],{"class":262},[252,13851,963],{"class":311},[252,13853,13854],{"class":262},") ",[252,13856,1307],{"class":258},[252,13858,8980],{"class":262},[252,13860,13861,13863,13865,13867,13869,13871,13873,13875,13877,13879],{"class":254,"line":1781},[252,13862,6669],{"class":262},[252,13864,1307],{"class":258},[252,13866,13839],{"class":367},[252,13868,1583],{"class":258},[252,13870,11525],{"class":2102},[252,13872,263],{"class":262},[252,13874,574],{"class":311},[252,13876,13854],{"class":262},[252,13878,1307],{"class":258},[252,13880,8980],{"class":262},[252,13882,13883],{"class":254,"line":1786},[252,13884,2539],{"emptyLinePlaceholder":181},[252,13886,13887,13889,13891,13893],{"class":254,"line":1792},[252,13888,2442],{"class":2102},[252,13890,263],{"class":262},[252,13892,2447],{"class":367},[252,13894,2858],{"class":262},[252,13896,13897],{"class":254,"line":1813},[252,13898,2539],{"emptyLinePlaceholder":181},[252,13900,13901,13903,13905],{"class":254,"line":1818},[252,13902,4229],{"class":258},[252,13904,4232],{"class":311},[252,13906,1429],{"class":262},[252,13908,13909],{"class":254,"line":1832},[252,13910,1704],{"class":262},[19,13912,11472],{},[207,13914,13915,13918,13921],{},[210,13916,13917],{},"我传就用我；没传就用你",[210,13919,13920],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[210,13922,13923],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,13925,13927],{"id":13926},"_72函数的占位参数","7.2函数的占位参数",[19,13929,13930],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,13932,13933,13935,13936],{},[412,13934,5321],{}," ",[22,13937,13938],{},"返回值类型 函数名 (数据类型){}",[244,13940,13942],{"className":246,"code":13941,"language":248,"meta":169,"style":169},"\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",[22,13943,13944,13949,13967,13980,13984,13992,13996,14013,14017,14027,14031,14039],{"__ignoreMap":169},[252,13945,13946],{"class":254,"line":255},[252,13947,13948],{"class":321},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[252,13950,13951,13953,13955,13957,13959,13961,13963,13965],{"class":254,"line":170},[252,13952,5504],{"class":258},[252,13954,11525],{"class":2102},[252,13956,263],{"class":262},[252,13958,266],{"class":258},[252,13960,1537],{"class":5356},[252,13962,12575],{"class":262},[252,13964,266],{"class":258},[252,13966,12582],{"class":262},[252,13968,13969,13971,13973,13976,13978],{"class":254,"line":1318},[252,13970,6669],{"class":262},[252,13972,1307],{"class":258},[252,13974,13975],{"class":367}," \"this is func\"",[252,13977,1583],{"class":258},[252,13979,8980],{"class":262},[252,13981,13982],{"class":254,"line":1333},[252,13983,1704],{"class":262},[252,13985,13986,13988,13990],{"class":254,"line":1339},[252,13987,266],{"class":258},[252,13989,2112],{"class":2102},[252,13991,10993],{"class":262},[252,13993,13994],{"class":254,"line":1353},[252,13995,2539],{"emptyLinePlaceholder":181},[252,13997,13998,14000,14002,14004,14006,14008,14010],{"class":254,"line":1359},[252,13999,13425],{"class":2102},[252,14001,263],{"class":262},[252,14003,709],{"class":311},[252,14005,641],{"class":262},[252,14007,709],{"class":311},[252,14009,6106],{"class":262},[252,14011,14012],{"class":321}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[252,14014,14015],{"class":254,"line":1450},[252,14016,2539],{"emptyLinePlaceholder":181},[252,14018,14019,14021,14023,14025],{"class":254,"line":1456},[252,14020,2442],{"class":2102},[252,14022,263],{"class":262},[252,14024,2447],{"class":367},[252,14026,2858],{"class":262},[252,14028,14029],{"class":254,"line":1468},[252,14030,2539],{"emptyLinePlaceholder":181},[252,14032,14033,14035,14037],{"class":254,"line":1751},[252,14034,4229],{"class":258},[252,14036,4232],{"class":311},[252,14038,1429],{"class":262},[252,14040,14041],{"class":254,"line":1756},[252,14042,1704],{"class":262},[19,14044,14045],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14047,14049],{"id":14048},"_73函数重载","7.3函数重载",[19,14051,14052],{},"意思是函数名是可以相同的",[224,14054,14056],{"id":14055},"_731基本语法","7.3.1基本语法",[19,14058,14059],{},"作用：函数名可以相同，提高复用性",[19,14061,14062],{},[412,14063,14064],{},"函数重载满足条件：",[1270,14066,14067,14070,14073],{},[210,14068,14069],{},"同一个作用域下",[210,14071,14072],{},"函数名称相同",[210,14074,14075,14076,14079,14080,14083,14084],{},"函数参数",[412,14077,14078],{},"类型不同","  或者 ",[412,14081,14082],{},"个数不同"," 或者 ",[412,14085,14086],{},"顺序不同",[19,14088,14089,14092],{},[412,14090,14091],{},"注意:","  函数的返回值不可以作为函数重载的条件",[244,14094,14096],{"className":10081,"code":14095,"language":10083,"meta":169,"style":169},"\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",[22,14097,14098,14103,14111,14115,14128,14132,14146,14150,14163,14167,14182,14186,14199,14203,14224,14228,14241,14245,14265,14269,14282,14286,14290,14295,14300,14305,14310,14315,14319,14323,14331,14335,14341,14351,14361,14375,14390,14394,14404,14408,14416],{"__ignoreMap":169},[252,14099,14100],{"class":254,"line":255},[252,14101,14102],{"class":321},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[252,14104,14105,14107,14109],{"class":254,"line":170},[252,14106,5504],{"class":258},[252,14108,11525],{"class":2102},[252,14110,2115],{"class":262},[252,14112,14113],{"class":254,"line":1318},[252,14114,1685],{"class":262},[252,14116,14117,14119,14121,14124,14126],{"class":254,"line":1333},[252,14118,6669],{"class":262},[252,14120,1307],{"class":258},[252,14122,14123],{"class":367}," \"func 的调用！\"",[252,14125,1583],{"class":258},[252,14127,8980],{"class":262},[252,14129,14130],{"class":254,"line":1339},[252,14131,1704],{"class":262},[252,14133,14134,14136,14138,14140,14142,14144],{"class":254,"line":1353},[252,14135,5504],{"class":258},[252,14137,11525],{"class":2102},[252,14139,263],{"class":262},[252,14141,266],{"class":258},[252,14143,1537],{"class":5356},[252,14145,269],{"class":262},[252,14147,14148],{"class":254,"line":1359},[252,14149,1685],{"class":262},[252,14151,14152,14154,14156,14159,14161],{"class":254,"line":1450},[252,14153,6669],{"class":262},[252,14155,1307],{"class":258},[252,14157,14158],{"class":367}," \"func (int a) 的调用！\"",[252,14160,1583],{"class":258},[252,14162,8980],{"class":262},[252,14164,14165],{"class":254,"line":1456},[252,14166,1704],{"class":262},[252,14168,14169,14171,14173,14175,14178,14180],{"class":254,"line":1468},[252,14170,5504],{"class":258},[252,14172,11525],{"class":2102},[252,14174,263],{"class":262},[252,14176,14177],{"class":258},"double",[252,14179,1537],{"class":5356},[252,14181,269],{"class":262},[252,14183,14184],{"class":254,"line":1751},[252,14185,1685],{"class":262},[252,14187,14188,14190,14192,14195,14197],{"class":254,"line":1756},[252,14189,6669],{"class":262},[252,14191,1307],{"class":258},[252,14193,14194],{"class":367}," \"func (double a)的调用！\"",[252,14196,1583],{"class":258},[252,14198,8980],{"class":262},[252,14200,14201],{"class":254,"line":1762},[252,14202,1704],{"class":262},[252,14204,14205,14207,14209,14211,14213,14215,14218,14220,14222],{"class":254,"line":1767},[252,14206,5504],{"class":258},[252,14208,11525],{"class":2102},[252,14210,263],{"class":262},[252,14212,266],{"class":258},[252,14214,1537],{"class":5356},[252,14216,14217],{"class":262}," ,",[252,14219,14177],{"class":258},[252,14221,2972],{"class":5356},[252,14223,269],{"class":262},[252,14225,14226],{"class":254,"line":1781},[252,14227,1685],{"class":262},[252,14229,14230,14232,14234,14237,14239],{"class":254,"line":1786},[252,14231,6669],{"class":262},[252,14233,1307],{"class":258},[252,14235,14236],{"class":367}," \"func (int a ,double b) 的调用！\"",[252,14238,1583],{"class":258},[252,14240,8980],{"class":262},[252,14242,14243],{"class":254,"line":1792},[252,14244,1704],{"class":262},[252,14246,14247,14249,14251,14253,14255,14257,14259,14261,14263],{"class":254,"line":1813},[252,14248,5504],{"class":258},[252,14250,11525],{"class":2102},[252,14252,263],{"class":262},[252,14254,14177],{"class":258},[252,14256,1537],{"class":5356},[252,14258,14217],{"class":262},[252,14260,266],{"class":258},[252,14262,2972],{"class":5356},[252,14264,269],{"class":262},[252,14266,14267],{"class":254,"line":1818},[252,14268,1685],{"class":262},[252,14270,14271,14273,14275,14278,14280],{"class":254,"line":1832},[252,14272,6669],{"class":262},[252,14274,1307],{"class":258},[252,14276,14277],{"class":367}," \"func (double a ,int b)的调用！\"",[252,14279,1583],{"class":258},[252,14281,8980],{"class":262},[252,14283,14284],{"class":254,"line":1837},[252,14285,1704],{"class":262},[252,14287,14288],{"class":254,"line":1866},[252,14289,2539],{"emptyLinePlaceholder":181},[252,14291,14292],{"class":254,"line":1871},[252,14293,14294],{"class":321},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[252,14296,14297],{"class":254,"line":1888},[252,14298,14299],{"class":321},"\u002F\u002Fint func(double a, int b)\n",[252,14301,14302],{"class":254,"line":1893},[252,14303,14304],{"class":321},"\u002F\u002F{\n",[252,14306,14307],{"class":254,"line":1898},[252,14308,14309],{"class":321},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[252,14311,14312],{"class":254,"line":1903},[252,14313,14314],{"class":321},"\u002F\u002F}\n",[252,14316,14317],{"class":254,"line":1917},[252,14318,2539],{"emptyLinePlaceholder":181},[252,14320,14321],{"class":254,"line":1922},[252,14322,2539],{"emptyLinePlaceholder":181},[252,14324,14325,14327,14329],{"class":254,"line":2716},[252,14326,266],{"class":258},[252,14328,2112],{"class":2102},[252,14330,10993],{"class":262},[252,14332,14333],{"class":254,"line":2730},[252,14334,2539],{"emptyLinePlaceholder":181},[252,14336,14337,14339],{"class":254,"line":2738},[252,14338,13425],{"class":2102},[252,14340,5776],{"class":262},[252,14342,14343,14345,14347,14349],{"class":254,"line":2743},[252,14344,13425],{"class":2102},[252,14346,263],{"class":262},[252,14348,709],{"class":311},[252,14350,2858],{"class":262},[252,14352,14353,14355,14357,14359],{"class":254,"line":2749},[252,14354,13425],{"class":2102},[252,14356,263],{"class":262},[252,14358,312],{"class":311},[252,14360,2858],{"class":262},[252,14362,14363,14365,14367,14369,14371,14373],{"class":254,"line":2755},[252,14364,13425],{"class":2102},[252,14366,263],{"class":262},[252,14368,709],{"class":311},[252,14370,641],{"class":262},[252,14372,312],{"class":311},[252,14374,2858],{"class":262},[252,14376,14377,14379,14381,14383,14386,14388],{"class":254,"line":2760},[252,14378,13425],{"class":2102},[252,14380,263],{"class":262},[252,14382,312],{"class":311},[252,14384,14385],{"class":262}," , ",[252,14387,709],{"class":311},[252,14389,2858],{"class":262},[252,14391,14392],{"class":254,"line":8088},[252,14393,13350],{"class":262},[252,14395,14396,14398,14400,14402],{"class":254,"line":8112},[252,14397,2442],{"class":2102},[252,14399,263],{"class":262},[252,14401,2447],{"class":367},[252,14403,2858],{"class":262},[252,14405,14406],{"class":254,"line":8117},[252,14407,2539],{"emptyLinePlaceholder":181},[252,14409,14410,14412,14414],{"class":254,"line":8123},[252,14411,4229],{"class":258},[252,14413,4232],{"class":311},[252,14415,1429],{"class":262},[252,14417,14418],{"class":254,"line":8150},[252,14419,1704],{"class":262},[19,14421,14422],{},"重点：函数返回值不可以作为函数重载条件！",[224,14424,14426],{"id":14425},"_732注意事项","7.3.2注意事项",[1270,14428,14429,14432],{},[210,14430,14431],{},"引用作为重载条件!!!",[210,14433,14434],{},"函数重载碰到函数默认参数",[244,14436,14438],{"className":246,"code":14437,"language":248,"meta":169,"style":169},"\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",[22,14439,14440,14445,14450,14454,14470,14474,14487,14491,14495,14513,14517,14530,14534,14538,14542,14547,14551,14575,14579,14592,14596,14600,14614,14618,14631,14635,14639,14647,14651,14663,14673,14686,14690,14694,14702,14706,14716,14720,14728],{"__ignoreMap":169},[252,14441,14442],{"class":254,"line":255},[252,14443,14444],{"class":321},"\u002F\u002F函数重载注意事项\n",[252,14446,14447],{"class":254,"line":170},[252,14448,14449],{"class":321},"\u002F\u002F1、引用作为重载条件\n",[252,14451,14452],{"class":254,"line":1318},[252,14453,2539],{"emptyLinePlaceholder":181},[252,14455,14456,14458,14460,14462,14464,14466,14468],{"class":254,"line":1333},[252,14457,5504],{"class":258},[252,14459,11525],{"class":2102},[252,14461,263],{"class":262},[252,14463,266],{"class":258},[252,14465,10724],{"class":258},[252,14467,501],{"class":5356},[252,14469,269],{"class":262},[252,14471,14472],{"class":254,"line":1339},[252,14473,1685],{"class":262},[252,14475,14476,14478,14480,14483,14485],{"class":254,"line":1353},[252,14477,6669],{"class":262},[252,14479,1307],{"class":258},[252,14481,14482],{"class":367}," \"func (int &a) 调用 \"",[252,14484,1583],{"class":258},[252,14486,8980],{"class":262},[252,14488,14489],{"class":254,"line":1359},[252,14490,1704],{"class":262},[252,14492,14493],{"class":254,"line":1450},[252,14494,2539],{"emptyLinePlaceholder":181},[252,14496,14497,14499,14501,14503,14505,14507,14509,14511],{"class":254,"line":1456},[252,14498,5504],{"class":258},[252,14500,11525],{"class":2102},[252,14502,263],{"class":262},[252,14504,6932],{"class":258},[252,14506,2521],{"class":258},[252,14508,10724],{"class":258},[252,14510,501],{"class":5356},[252,14512,269],{"class":262},[252,14514,14515],{"class":254,"line":1468},[252,14516,1685],{"class":262},[252,14518,14519,14521,14523,14526,14528],{"class":254,"line":1751},[252,14520,6669],{"class":262},[252,14522,1307],{"class":258},[252,14524,14525],{"class":367}," \"func (const int &a) 调用 \"",[252,14527,1583],{"class":258},[252,14529,8980],{"class":262},[252,14531,14532],{"class":254,"line":1756},[252,14533,1704],{"class":262},[252,14535,14536],{"class":254,"line":1762},[252,14537,2539],{"emptyLinePlaceholder":181},[252,14539,14540],{"class":254,"line":1767},[252,14541,2539],{"emptyLinePlaceholder":181},[252,14543,14544],{"class":254,"line":1781},[252,14545,14546],{"class":321},"\u002F\u002F2、函数重载碰到函数默认参数\n",[252,14548,14549],{"class":254,"line":1786},[252,14550,2539],{"emptyLinePlaceholder":181},[252,14552,14553,14555,14557,14559,14561,14563,14565,14567,14569,14571,14573],{"class":254,"line":1792},[252,14554,5504],{"class":258},[252,14556,13758],{"class":2102},[252,14558,263],{"class":262},[252,14560,266],{"class":258},[252,14562,1537],{"class":5356},[252,14564,12575],{"class":262},[252,14566,266],{"class":258},[252,14568,2972],{"class":5356},[252,14570,13704],{"class":258},[252,14572,2177],{"class":311},[252,14574,269],{"class":262},[252,14576,14577],{"class":254,"line":1813},[252,14578,1685],{"class":262},[252,14580,14581,14583,14585,14588,14590],{"class":254,"line":1818},[252,14582,6669],{"class":262},[252,14584,1307],{"class":258},[252,14586,14587],{"class":367}," \"func2(int a, int b = 10) 调用\"",[252,14589,1583],{"class":258},[252,14591,8980],{"class":262},[252,14593,14594],{"class":254,"line":1832},[252,14595,1704],{"class":262},[252,14597,14598],{"class":254,"line":1837},[252,14599,2539],{"emptyLinePlaceholder":181},[252,14601,14602,14604,14606,14608,14610,14612],{"class":254,"line":1866},[252,14603,5504],{"class":258},[252,14605,13758],{"class":2102},[252,14607,263],{"class":262},[252,14609,266],{"class":258},[252,14611,1537],{"class":5356},[252,14613,269],{"class":262},[252,14615,14616],{"class":254,"line":1871},[252,14617,1685],{"class":262},[252,14619,14620,14622,14624,14627,14629],{"class":254,"line":1888},[252,14621,6669],{"class":262},[252,14623,1307],{"class":258},[252,14625,14626],{"class":367}," \"func2(int a) 调用\"",[252,14628,1583],{"class":258},[252,14630,8980],{"class":262},[252,14632,14633],{"class":254,"line":1893},[252,14634,1704],{"class":262},[252,14636,14637],{"class":254,"line":1898},[252,14638,2539],{"emptyLinePlaceholder":181},[252,14640,14641,14643,14645],{"class":254,"line":1903},[252,14642,266],{"class":258},[252,14644,2112],{"class":2102},[252,14646,10993],{"class":262},[252,14648,14649],{"class":254,"line":1917},[252,14650,13350],{"class":262},[252,14652,14653,14655,14657,14659,14661],{"class":254,"line":1922},[252,14654,2124],{"class":258},[252,14656,11009],{"class":262},[252,14658,308],{"class":258},[252,14660,2177],{"class":311},[252,14662,1429],{"class":262},[252,14664,14665,14667,14670],{"class":254,"line":2716},[252,14666,13425],{"class":2102},[252,14668,14669],{"class":262},"(a);",[252,14671,14672],{"class":321}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[252,14674,14675,14677,14679,14681,14683],{"class":254,"line":2730},[252,14676,13425],{"class":2102},[252,14678,263],{"class":262},[252,14680,709],{"class":311},[252,14682,6106],{"class":262},[252,14684,14685],{"class":321},"\u002F\u002F调用有const   10是个常量\n",[252,14687,14688],{"class":254,"line":2738},[252,14689,2539],{"emptyLinePlaceholder":181},[252,14691,14692],{"class":254,"line":2743},[252,14693,2539],{"emptyLinePlaceholder":181},[252,14695,14696,14699],{"class":254,"line":2749},[252,14697,14698],{"class":321},"    \u002F\u002Ffunc2(10);",[252,14700,14701],{"class":321}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[252,14703,14704],{"class":254,"line":2755},[252,14705,2539],{"emptyLinePlaceholder":181},[252,14707,14708,14710,14712,14714],{"class":254,"line":2760},[252,14709,2442],{"class":2102},[252,14711,263],{"class":262},[252,14713,2447],{"class":367},[252,14715,2858],{"class":262},[252,14717,14718],{"class":254,"line":8088},[252,14719,2539],{"emptyLinePlaceholder":181},[252,14721,14722,14724,14726],{"class":254,"line":8112},[252,14723,4229],{"class":258},[252,14725,4232],{"class":311},[252,14727,1429],{"class":262},[252,14729,14730],{"class":254,"line":8117},[252,14731,1704],{"class":262},[5266,14733,14734],{},"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":169,"searchDepth":170,"depth":170,"links":14736},[14737,14738,14739],{"id":13669,"depth":170,"text":13670},{"id":13926,"depth":170,"text":13927},{"id":14048,"depth":170,"text":14049,"children":14740},[14741,14742],{"id":14055,"depth":1318,"text":14056},{"id":14425,"depth":1318,"text":14426},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13661,"description":169},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14749,"title":14750,"body":14751,"description":23504,"extension":179,"meta":23505,"navigation":181,"path":23506,"seo":23507,"stem":23508,"__hash__":23509},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14752,"toc":23485},[14753,14756,14762,14769,14774,14777,14780,14783,14787,14791,14794,14797,14805,14810,14813,14820,14825,14984,14987,15240,15243,15246,15249,15254,15257,15260,15271,15276,15512,15516,15526,15529,15537,15684,15688,15691,15694,15698,16143,16147,16155,16163,17075,17082,17087,17715,17718,17721,17724,17843,17846,17933,17936,18062,18065,18159,18162,18515,18519,18527,18531,18538,18541,18544,18554,18560,18565,18577,18585,18605,18613,18630,18816,18819,18823,18826,18829,18832,18835,18838,18841,18844,19304,19310,19314,19317,19328,19915,19918,20407,20411,20414,20417,20420,20423,20426,20434,20830,20834,20837,20840,21287,21290,21293,21298,21301,21306,21309,21313,21316,21318,21324,21327,21633,21643,21684,21688,21691,21693,21726,21729,22036,22038,22053,22056,22079,22088,22094,22097,22101,22104,22107,22112,22123,22128,22136,22141,22271,22274,22277,22452,22457,22669,22673,22676,22790,22795,23034,23038,23042,23045,23048,23053,23158,23161,23164,23167,23171,23282,23285,23288,23293,23345,23348,23351,23356,23402,23405,23410,23478,23480,23483],[10,14754,14750],{"id":14755},"_8类和对象",[19,14757,14758,14759],{},"C++面向对象的三大特性为",[412,14760,14761],{},"封装、继承、多态",[19,14763,14764,14765,14768],{},"C++认为",[412,14766,14767],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,14770,14771],{},[412,14772,14773],{},"例如：",[19,14775,14776],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,14778,14779],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,14781,14782],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14784,14786],{"id":14785},"_81封装","8.1封装",[224,14788,14790],{"id":14789},"_811封装的意义","8.1.1封装的意义",[19,14792,14793],{},"封装是C++面向对象三大特性之一",[19,14795,14796],{},"封装的意义：",[1270,14798,14799,14802],{},[210,14800,14801],{},"将属性和行为作为一个整体，表现生活中的事物",[210,14803,14804],{},"将属性和行为加以权限控制",[19,14806,14807],{},[412,14808,14809],{},"封装意义一：",[19,14811,14812],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,14814,14815,13935,14817],{},[412,14816,5321],{},[22,14818,14819],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[207,14821,14822],{},[210,14823,14824],{},"**示例1：**设计一个圆类，求圆的周长",[244,14826,14828],{"className":246,"code":14827,"language":248,"meta":169,"style":169},"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",[22,14829,14830,14838,14842,14847,14852,14857,14862,14869,14874,14884,14888,14906,14910,14914,14922,14926,14931,14936,14941,14946,14957,14980],{"__ignoreMap":169},[252,14831,14832,14835],{"class":254,"line":255},[252,14833,14834],{"class":258},"class",[252,14836,14837],{"class":2102}," Circle\n",[252,14839,14840],{"class":254,"line":170},[252,14841,1685],{"class":262},[252,14843,14844],{"class":254,"line":1318},[252,14845,14846],{"class":321},"    \u002F\u002F访问权限\n",[252,14848,14849],{"class":254,"line":1333},[252,14850,14851],{"class":321},"    \u002F\u002F公共权限\n",[252,14853,14854],{"class":254,"line":1339},[252,14855,14856],{"class":258},"public:\n",[252,14858,14859],{"class":254,"line":1353},[252,14860,14861],{"class":321},"    \u002F\u002F属性\n",[252,14863,14864,14866],{"class":254,"line":1359},[252,14865,2124],{"class":258},[252,14867,14868],{"class":262}," m_r;\n",[252,14870,14871],{"class":254,"line":1450},[252,14872,14873],{"class":321},"    \u002F\u002F行为\n",[252,14875,14876,14879,14882],{"class":254,"line":1456},[252,14877,14878],{"class":258},"    double",[252,14880,14881],{"class":2102}," calculateZC",[252,14883,2115],{"class":262},[252,14885,14886],{"class":254,"line":1468},[252,14887,2169],{"class":262},[252,14889,14890,14893,14896,14898,14901,14903],{"class":254,"line":1751},[252,14891,14892],{"class":258},"        return",[252,14894,14895],{"class":311}," 2",[252,14897,718],{"class":258},[252,14899,14900],{"class":262},"PI",[252,14902,718],{"class":258},[252,14904,14905],{"class":262},"m_r;\n",[252,14907,14908],{"class":254,"line":1756},[252,14909,2326],{"class":262},[252,14911,14912],{"class":254,"line":1762},[252,14913,4134],{"class":262},[252,14915,14916,14918,14920],{"class":254,"line":1767},[252,14917,266],{"class":258},[252,14919,2112],{"class":2102},[252,14921,2115],{"class":262},[252,14923,14924],{"class":254,"line":1781},[252,14925,1685],{"class":262},[252,14927,14928],{"class":254,"line":1786},[252,14929,14930],{"class":321},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[252,14932,14933],{"class":254,"line":1792},[252,14934,14935],{"class":321},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[252,14937,14938],{"class":254,"line":1813},[252,14939,14940],{"class":262},"    Circle c1;\n",[252,14942,14943],{"class":254,"line":1818},[252,14944,14945],{"class":321},"    \u002F\u002F给圆对象 的属性进行赋值\n",[252,14947,14948,14951,14953,14955],{"class":254,"line":1832},[252,14949,14950],{"class":262},"    c1.m_r",[252,14952,308],{"class":258},[252,14954,709],{"class":311},[252,14956,1429],{"class":262},[252,14958,14959,14961,14963,14966,14968,14971,14974,14976,14978],{"class":254,"line":1837},[252,14960,1690],{"class":262},[252,14962,1307],{"class":258},[252,14964,14965],{"class":367},"\"圆的周长\"",[252,14967,1307],{"class":258},[252,14969,14970],{"class":262},"c1.",[252,14972,14973],{"class":2102},"calculateZC",[252,14975,2566],{"class":262},[252,14977,1307],{"class":258},[252,14979,1330],{"class":262},[252,14981,14982],{"class":254,"line":1866},[252,14983,1704],{"class":262},[19,14985,14986],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[244,14988,14990],{"className":246,"code":14989,"language":248,"meta":169,"style":169},"#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",[22,14991,14992,14998,15008,15014,15020,15024,15028,15033,15040,15045,15063,15067,15077,15081,15086,15102,15106,15116,15120,15125,15133,15137,15169,15173,15177,15185,15189,15194,15199,15213,15227,15236],{"__ignoreMap":169},[252,14993,14994,14996],{"class":254,"line":255},[252,14995,2088],{"class":258},[252,14997,2091],{"class":367},[252,14999,15000,15002,15004,15006],{"class":254,"line":170},[252,15001,2096],{"class":258},[252,15003,2099],{"class":258},[252,15005,2103],{"class":2102},[252,15007,1429],{"class":262},[252,15009,15010,15012],{"class":254,"line":1318},[252,15011,2088],{"class":258},[252,15013,7889],{"class":367},[252,15015,15016,15018],{"class":254,"line":1333},[252,15017,14834],{"class":258},[252,15019,7902],{"class":2102},[252,15021,15022],{"class":254,"line":1339},[252,15023,1685],{"class":262},[252,15025,15026],{"class":254,"line":1353},[252,15027,14856],{"class":258},[252,15029,15030],{"class":254,"line":1359},[252,15031,15032],{"class":262},"    string m_name;\n",[252,15034,15035,15037],{"class":254,"line":1450},[252,15036,2124],{"class":258},[252,15038,15039],{"class":262}," m_id;\n",[252,15041,15042],{"class":254,"line":1456},[252,15043,15044],{"class":321},"    \u002F\u002F赋值姓名\n",[252,15046,15047,15050,15053,15055,15058,15061],{"class":254,"line":1468},[252,15048,15049],{"class":258},"    void",[252,15051,15052],{"class":2102}," setName",[252,15054,263],{"class":262},[252,15056,15057],{"class":2102},"string",[252,15059,15060],{"class":5356}," name",[252,15062,269],{"class":262},[252,15064,15065],{"class":254,"line":1751},[252,15066,2169],{"class":262},[252,15068,15069,15072,15074],{"class":254,"line":1756},[252,15070,15071],{"class":262},"        m_name",[252,15073,308],{"class":258},[252,15075,15076],{"class":262},"name;\n",[252,15078,15079],{"class":254,"line":1762},[252,15080,2326],{"class":262},[252,15082,15083],{"class":254,"line":1767},[252,15084,15085],{"class":321},"    \u002F\u002F赋值学号\n",[252,15087,15088,15090,15093,15095,15097,15100],{"class":254,"line":1781},[252,15089,15049],{"class":258},[252,15091,15092],{"class":2102}," setId",[252,15094,263],{"class":262},[252,15096,266],{"class":258},[252,15098,15099],{"class":5356}," id",[252,15101,269],{"class":262},[252,15103,15104],{"class":254,"line":1786},[252,15105,2169],{"class":262},[252,15107,15108,15111,15113],{"class":254,"line":1792},[252,15109,15110],{"class":262},"        m_id",[252,15112,308],{"class":258},[252,15114,15115],{"class":262},"id;\n",[252,15117,15118],{"class":254,"line":1813},[252,15119,2326],{"class":262},[252,15121,15122],{"class":254,"line":1818},[252,15123,15124],{"class":321},"    \u002F\u002F打印学生信息\n",[252,15126,15127,15129,15131],{"class":254,"line":1832},[252,15128,15049],{"class":258},[252,15130,9755],{"class":2102},[252,15132,2115],{"class":262},[252,15134,15135],{"class":254,"line":1837},[252,15136,2169],{"class":262},[252,15138,15139,15141,15143,15146,15148,15151,15153,15155,15157,15160,15162,15165,15167],{"class":254,"line":1866},[252,15140,3590],{"class":262},[252,15142,1307],{"class":258},[252,15144,15145],{"class":367},"\"姓名：\"",[252,15147,1307],{"class":258},[252,15149,15150],{"class":262},"m_name",[252,15152,1307],{"class":258},[252,15154,4498],{"class":367},[252,15156,1307],{"class":258},[252,15158,15159],{"class":367},"\"学号：\"",[252,15161,1307],{"class":258},[252,15163,15164],{"class":262},"m_id",[252,15166,1307],{"class":258},[252,15168,1330],{"class":262},[252,15170,15171],{"class":254,"line":1871},[252,15172,2326],{"class":262},[252,15174,15175],{"class":254,"line":1888},[252,15176,4134],{"class":262},[252,15178,15179,15181,15183],{"class":254,"line":1893},[252,15180,266],{"class":258},[252,15182,2112],{"class":2102},[252,15184,2115],{"class":262},[252,15186,15187],{"class":254,"line":1898},[252,15188,1685],{"class":262},[252,15190,15191],{"class":254,"line":1903},[252,15192,15193],{"class":321},"    \u002F\u002F实例化\n",[252,15195,15196],{"class":254,"line":1917},[252,15197,15198],{"class":262},"    Student s1;\n",[252,15200,15201,15204,15207,15209,15211],{"class":254,"line":1922},[252,15202,15203],{"class":262},"    s1.",[252,15205,15206],{"class":2102},"setName",[252,15208,263],{"class":262},[252,15210,8056],{"class":367},[252,15212,2858],{"class":262},[252,15214,15215,15217,15220,15222,15225],{"class":254,"line":2716},[252,15216,15203],{"class":262},[252,15218,15219],{"class":2102},"setId",[252,15221,263],{"class":262},[252,15223,15224],{"class":311},"123456",[252,15226,2858],{"class":262},[252,15228,15229,15231,15234],{"class":254,"line":2730},[252,15230,15203],{"class":262},[252,15232,15233],{"class":2102},"printInfo",[252,15235,5776],{"class":262},[252,15237,15238],{"class":254,"line":2738},[252,15239,1704],{"class":262},[19,15241,15242],{},"类中的属性和行为统称为成员",[19,15244,15245],{},"属性：成员属性(成员变量)",[19,15247,15248],{},"方法：成员函数(成员方法)",[19,15250,15251],{},[412,15252,15253],{},"封装意义二：",[19,15255,15256],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15258,15259],{},"访问权限有三种：",[207,15261,15262,15265,15268],{},[210,15263,15264],{},"public        公共权限",[210,15266,15267],{},"protected 保护权限",[210,15269,15270],{},"private      私有权限",[19,15272,15273],{},[412,15274,15275],{},"示例：",[244,15277,15279],{"className":10081,"code":15278,"language":10083,"meta":169,"style":169},"\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",[22,15280,15281,15286,15291,15296,15301,15305,15312,15316,15321,15325,15330,15334,15339,15344,15349,15353,15358,15363,15370,15374,15378,15386,15390,15401,15413,15425,15429,15433,15437,15445,15449,15454,15466,15474,15482,15486,15496,15500,15508],{"__ignoreMap":169},[252,15282,15283],{"class":254,"line":255},[252,15284,15285],{"class":321},"\u002F\u002F三种权限\n",[252,15287,15288],{"class":254,"line":170},[252,15289,15290],{"class":321},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[252,15292,15293],{"class":254,"line":1318},[252,15294,15295],{"class":321},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[252,15297,15298],{"class":254,"line":1333},[252,15299,15300],{"class":321},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[252,15302,15303],{"class":254,"line":1339},[252,15304,2539],{"emptyLinePlaceholder":181},[252,15306,15307,15309],{"class":254,"line":1353},[252,15308,14834],{"class":258},[252,15310,15311],{"class":2102}," Person\n",[252,15313,15314],{"class":254,"line":1359},[252,15315,1685],{"class":262},[252,15317,15318],{"class":254,"line":1450},[252,15319,15320],{"class":321},"    \u002F\u002F姓名  公共权限\n",[252,15322,15323],{"class":254,"line":1456},[252,15324,14856],{"class":258},[252,15326,15327],{"class":254,"line":1468},[252,15328,15329],{"class":262},"    string m_Name;\n",[252,15331,15332],{"class":254,"line":1751},[252,15333,2539],{"emptyLinePlaceholder":181},[252,15335,15336],{"class":254,"line":1756},[252,15337,15338],{"class":321},"    \u002F\u002F汽车  保护权限\n",[252,15340,15341],{"class":254,"line":1762},[252,15342,15343],{"class":258},"protected:\n",[252,15345,15346],{"class":254,"line":1767},[252,15347,15348],{"class":262},"    string m_Car;\n",[252,15350,15351],{"class":254,"line":1781},[252,15352,2539],{"emptyLinePlaceholder":181},[252,15354,15355],{"class":254,"line":1786},[252,15356,15357],{"class":321},"    \u002F\u002F银行卡密码  私有权限\n",[252,15359,15360],{"class":254,"line":1792},[252,15361,15362],{"class":258},"private:\n",[252,15364,15365,15367],{"class":254,"line":1813},[252,15366,2124],{"class":258},[252,15368,15369],{"class":262}," m_Password;\n",[252,15371,15372],{"class":254,"line":1818},[252,15373,2539],{"emptyLinePlaceholder":181},[252,15375,15376],{"class":254,"line":1832},[252,15377,14856],{"class":258},[252,15379,15380,15382,15384],{"class":254,"line":1837},[252,15381,15049],{"class":258},[252,15383,11525],{"class":2102},[252,15385,2115],{"class":262},[252,15387,15388],{"class":254,"line":1866},[252,15389,2169],{"class":262},[252,15391,15392,15395,15397,15399],{"class":254,"line":1871},[252,15393,15394],{"class":262},"        m_Name ",[252,15396,308],{"class":258},[252,15398,9078],{"class":367},[252,15400,1429],{"class":262},[252,15402,15403,15406,15408,15411],{"class":254,"line":1888},[252,15404,15405],{"class":262},"        m_Car ",[252,15407,308],{"class":258},[252,15409,15410],{"class":367}," \"拖拉机\"",[252,15412,1429],{"class":262},[252,15414,15415,15418,15420,15423],{"class":254,"line":1893},[252,15416,15417],{"class":262},"        m_Password ",[252,15419,308],{"class":258},[252,15421,15422],{"class":311}," 123456",[252,15424,1429],{"class":262},[252,15426,15427],{"class":254,"line":1898},[252,15428,2326],{"class":262},[252,15430,15431],{"class":254,"line":1903},[252,15432,4134],{"class":262},[252,15434,15435],{"class":254,"line":1917},[252,15436,2539],{"emptyLinePlaceholder":181},[252,15438,15439,15441,15443],{"class":254,"line":1922},[252,15440,266],{"class":258},[252,15442,2112],{"class":2102},[252,15444,10993],{"class":262},[252,15446,15447],{"class":254,"line":2716},[252,15448,2539],{"emptyLinePlaceholder":181},[252,15450,15451],{"class":254,"line":2730},[252,15452,15453],{"class":262},"    Person p;\n",[252,15455,15456,15459,15461,15464],{"class":254,"line":2738},[252,15457,15458],{"class":262},"    p.m_Name ",[252,15460,308],{"class":258},[252,15462,15463],{"class":367}," \"李四\"",[252,15465,1429],{"class":262},[252,15467,15468,15471],{"class":254,"line":2743},[252,15469,15470],{"class":321},"    \u002F\u002Fp.m_Car = \"奔驰\";",[252,15472,15473],{"class":321},"  \u002F\u002F保护权限类外访问不到\n",[252,15475,15476,15479],{"class":254,"line":2749},[252,15477,15478],{"class":321},"    \u002F\u002Fp.m_Password = 123;",[252,15480,15481],{"class":321}," \u002F\u002F私有权限类外访问不到\n",[252,15483,15484],{"class":254,"line":2755},[252,15485,2539],{"emptyLinePlaceholder":181},[252,15487,15488,15490,15492,15494],{"class":254,"line":2760},[252,15489,2442],{"class":2102},[252,15491,263],{"class":262},[252,15493,2447],{"class":367},[252,15495,2858],{"class":262},[252,15497,15498],{"class":254,"line":8088},[252,15499,2539],{"emptyLinePlaceholder":181},[252,15501,15502,15504,15506],{"class":254,"line":8112},[252,15503,4229],{"class":258},[252,15505,4232],{"class":311},[252,15507,1429],{"class":262},[252,15509,15510],{"class":254,"line":8117},[252,15511,1704],{"class":262},[224,15513,15515],{"id":15514},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15517,15518,15519,15522,15523],{},"在C++中 struct和class唯一的",[412,15520,15521],{},"区别","就在于 ",[412,15524,15525],{},"默认的访问权限不同",[19,15527,15528],{},"区别：",[1270,15530,15531,15534],{},[210,15532,15533],{},"struct 默认权限为公共",[210,15535,15536],{},"class   默认权限为私有",[244,15538,15540],{"className":10081,"code":15539,"language":10083,"meta":169,"style":169},"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",[22,15541,15542,15549,15553,15563,15567,15571,15578,15582,15592,15596,15600,15608,15612,15617,15631,15635,15640,15654,15658,15668,15672,15680],{"__ignoreMap":169},[252,15543,15544,15546],{"class":254,"line":255},[252,15545,14834],{"class":258},[252,15547,15548],{"class":2102}," C1\n",[252,15550,15551],{"class":254,"line":170},[252,15552,1685],{"class":262},[252,15554,15555,15557,15560],{"class":254,"line":1318},[252,15556,2124],{"class":258},[252,15558,15559],{"class":262},"  m_A;",[252,15561,15562],{"class":321}," \u002F\u002F默认是私有权限\n",[252,15564,15565],{"class":254,"line":1333},[252,15566,4134],{"class":262},[252,15568,15569],{"class":254,"line":1339},[252,15570,2539],{"emptyLinePlaceholder":181},[252,15572,15573,15575],{"class":254,"line":1353},[252,15574,7899],{"class":258},[252,15576,15577],{"class":2102}," C2\n",[252,15579,15580],{"class":254,"line":1359},[252,15581,1685],{"class":262},[252,15583,15584,15586,15589],{"class":254,"line":1450},[252,15585,2124],{"class":258},[252,15587,15588],{"class":262}," m_A;",[252,15590,15591],{"class":321},"  \u002F\u002F默认是公共权限\n",[252,15593,15594],{"class":254,"line":1456},[252,15595,4134],{"class":262},[252,15597,15598],{"class":254,"line":1468},[252,15599,2539],{"emptyLinePlaceholder":181},[252,15601,15602,15604,15606],{"class":254,"line":1751},[252,15603,266],{"class":258},[252,15605,2112],{"class":2102},[252,15607,10993],{"class":262},[252,15609,15610],{"class":254,"line":1756},[252,15611,2539],{"emptyLinePlaceholder":181},[252,15613,15614],{"class":254,"line":1762},[252,15615,15616],{"class":262},"    C1 c1;\n",[252,15618,15619,15622,15624,15626,15628],{"class":254,"line":1767},[252,15620,15621],{"class":262},"    c1.m_A ",[252,15623,308],{"class":258},[252,15625,2177],{"class":311},[252,15627,318],{"class":262},[252,15629,15630],{"class":321}," \u002F\u002F错误，访问权限是私有\n",[252,15632,15633],{"class":254,"line":1781},[252,15634,2539],{"emptyLinePlaceholder":181},[252,15636,15637],{"class":254,"line":1786},[252,15638,15639],{"class":262},"    C2 c2;\n",[252,15641,15642,15645,15647,15649,15651],{"class":254,"line":1792},[252,15643,15644],{"class":262},"    c2.m_A ",[252,15646,308],{"class":258},[252,15648,2177],{"class":311},[252,15650,318],{"class":262},[252,15652,15653],{"class":321}," \u002F\u002F正确，访问权限是公共\n",[252,15655,15656],{"class":254,"line":1813},[252,15657,2539],{"emptyLinePlaceholder":181},[252,15659,15660,15662,15664,15666],{"class":254,"line":1818},[252,15661,2442],{"class":2102},[252,15663,263],{"class":262},[252,15665,2447],{"class":367},[252,15667,2858],{"class":262},[252,15669,15670],{"class":254,"line":1832},[252,15671,2539],{"emptyLinePlaceholder":181},[252,15673,15674,15676,15678],{"class":254,"line":1837},[252,15675,4229],{"class":258},[252,15677,4232],{"class":311},[252,15679,1429],{"class":262},[252,15681,15682],{"class":254,"line":1866},[252,15683,1704],{"class":262},[224,15685,15687],{"id":15686},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,15689,15690],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,15692,15693],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,15695,15696],{},[412,15697,15275],{},[244,15699,15701],{"className":10081,"code":15700,"language":10083,"meta":169,"style":169},"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",[22,15702,15703,15713,15717,15721,15726,15740,15749,15753,15763,15767,15774,15778,15782,15786,15791,15800,15807,15811,15816,15832,15855,15868,15875,15879,15888,15892,15896,15901,15917,15927,15931,15935,15939,15947,15951,15961,15965,15973,15977,15981,15989,15993,15997,16002,16015,16038,16042,16047,16060,16082,16086,16091,16105,16113,16117,16127,16131,16139],{"__ignoreMap":169},[252,15704,15705,15707,15710],{"class":254,"line":255},[252,15706,14834],{"class":258},[252,15708,15709],{"class":2102}," Person",[252,15711,15712],{"class":262}," {\n",[252,15714,15715],{"class":254,"line":170},[252,15716,14856],{"class":258},[252,15718,15719],{"class":254,"line":1318},[252,15720,2539],{"emptyLinePlaceholder":181},[252,15722,15723],{"class":254,"line":1333},[252,15724,15725],{"class":321},"    \u002F\u002F姓名设置可读可写\n",[252,15727,15728,15730,15732,15734,15736,15738],{"class":254,"line":1339},[252,15729,15049],{"class":258},[252,15731,15052],{"class":2102},[252,15733,263],{"class":262},[252,15735,15057],{"class":2102},[252,15737,15060],{"class":5356},[252,15739,12582],{"class":262},[252,15741,15742,15744,15746],{"class":254,"line":1353},[252,15743,15394],{"class":262},[252,15745,308],{"class":258},[252,15747,15748],{"class":262}," name;\n",[252,15750,15751],{"class":254,"line":1359},[252,15752,2326],{"class":262},[252,15754,15755,15758,15761],{"class":254,"line":1450},[252,15756,15757],{"class":2102},"    string",[252,15759,15760],{"class":2102}," getName",[252,15762,2115],{"class":262},[252,15764,15765],{"class":254,"line":1456},[252,15766,2169],{"class":262},[252,15768,15769,15771],{"class":254,"line":1468},[252,15770,14892],{"class":258},[252,15772,15773],{"class":262}," m_Name;\n",[252,15775,15776],{"class":254,"line":1751},[252,15777,2326],{"class":262},[252,15779,15780],{"class":254,"line":1756},[252,15781,2539],{"emptyLinePlaceholder":181},[252,15783,15784],{"class":254,"line":1762},[252,15785,2539],{"emptyLinePlaceholder":181},[252,15787,15788],{"class":254,"line":1767},[252,15789,15790],{"class":321},"    \u002F\u002F获取年龄 \n",[252,15792,15793,15795,15798],{"class":254,"line":1781},[252,15794,2124],{"class":258},[252,15796,15797],{"class":2102}," getAge",[252,15799,10993],{"class":262},[252,15801,15802,15804],{"class":254,"line":1786},[252,15803,14892],{"class":258},[252,15805,15806],{"class":262}," m_Age;\n",[252,15808,15809],{"class":254,"line":1792},[252,15810,2326],{"class":262},[252,15812,15813],{"class":254,"line":1813},[252,15814,15815],{"class":321},"    \u002F\u002F设置年龄\n",[252,15817,15818,15820,15823,15825,15827,15830],{"class":254,"line":1818},[252,15819,15049],{"class":258},[252,15821,15822],{"class":2102}," setAge",[252,15824,263],{"class":262},[252,15826,266],{"class":258},[252,15828,15829],{"class":5356}," age",[252,15831,12582],{"class":262},[252,15833,15834,15836,15839,15841,15843,15845,15848,15850,15853],{"class":254,"line":1832},[252,15835,2636],{"class":258},[252,15837,15838],{"class":262}," (age ",[252,15840,1173],{"class":258},[252,15842,4232],{"class":311},[252,15844,3394],{"class":258},[252,15846,15847],{"class":262}," age ",[252,15849,1223],{"class":258},[252,15851,15852],{"class":311}," 150",[252,15854,12582],{"class":262},[252,15856,15857,15859,15861,15864,15866],{"class":254,"line":1837},[252,15858,9859],{"class":262},[252,15860,1307],{"class":258},[252,15862,15863],{"class":367}," \"你个老妖精!\"",[252,15865,1583],{"class":258},[252,15867,8980],{"class":262},[252,15869,15870,15873],{"class":254,"line":1866},[252,15871,15872],{"class":258},"            return",[252,15874,1429],{"class":262},[252,15876,15877],{"class":254,"line":1871},[252,15878,2668],{"class":262},[252,15880,15881,15884,15886],{"class":254,"line":1888},[252,15882,15883],{"class":262},"        m_Age ",[252,15885,308],{"class":258},[252,15887,7937],{"class":262},[252,15889,15890],{"class":254,"line":1893},[252,15891,2326],{"class":262},[252,15893,15894],{"class":254,"line":1898},[252,15895,2539],{"emptyLinePlaceholder":181},[252,15897,15898],{"class":254,"line":1903},[252,15899,15900],{"class":321},"    \u002F\u002F情人设置为只写\n",[252,15902,15903,15905,15908,15910,15912,15915],{"class":254,"line":1917},[252,15904,15049],{"class":258},[252,15906,15907],{"class":2102}," setLover",[252,15909,263],{"class":262},[252,15911,15057],{"class":2102},[252,15913,15914],{"class":5356}," lover",[252,15916,12582],{"class":262},[252,15918,15919,15922,15924],{"class":254,"line":1922},[252,15920,15921],{"class":262},"        m_Lover ",[252,15923,308],{"class":258},[252,15925,15926],{"class":262}," lover;\n",[252,15928,15929],{"class":254,"line":2716},[252,15930,2326],{"class":262},[252,15932,15933],{"class":254,"line":2730},[252,15934,2539],{"emptyLinePlaceholder":181},[252,15936,15937],{"class":254,"line":2738},[252,15938,15362],{"class":258},[252,15940,15941,15944],{"class":254,"line":2743},[252,15942,15943],{"class":262},"    string m_Name;",[252,15945,15946],{"class":321}," \u002F\u002F可读可写  姓名\n",[252,15948,15949],{"class":254,"line":2749},[252,15950,13350],{"class":262},[252,15952,15953,15955,15958],{"class":254,"line":2755},[252,15954,2124],{"class":258},[252,15956,15957],{"class":262}," m_Age;",[252,15959,15960],{"class":321}," \u002F\u002F只读  年龄\n",[252,15962,15963],{"class":254,"line":2760},[252,15964,2539],{"emptyLinePlaceholder":181},[252,15966,15967,15970],{"class":254,"line":8088},[252,15968,15969],{"class":262},"    string m_Lover;",[252,15971,15972],{"class":321}," \u002F\u002F只写  情人\n",[252,15974,15975],{"class":254,"line":8112},[252,15976,4134],{"class":262},[252,15978,15979],{"class":254,"line":8117},[252,15980,2539],{"emptyLinePlaceholder":181},[252,15982,15983,15985,15987],{"class":254,"line":8123},[252,15984,266],{"class":258},[252,15986,2112],{"class":2102},[252,15988,10993],{"class":262},[252,15990,15991],{"class":254,"line":8150},[252,15992,2539],{"emptyLinePlaceholder":181},[252,15994,15995],{"class":254,"line":8155},[252,15996,15453],{"class":262},[252,15998,15999],{"class":254,"line":8161},[252,16000,16001],{"class":321},"    \u002F\u002F姓名设置\n",[252,16003,16004,16007,16009,16011,16013],{"class":254,"line":8173},[252,16005,16006],{"class":262},"    p.",[252,16008,15206],{"class":2102},[252,16010,263],{"class":262},[252,16012,8056],{"class":367},[252,16014,2858],{"class":262},[252,16016,16017,16019,16021,16024,16026,16029,16032,16034,16036],{"class":254,"line":8185},[252,16018,6669],{"class":262},[252,16020,1307],{"class":258},[252,16022,16023],{"class":367}," \"姓名： \"",[252,16025,1583],{"class":258},[252,16027,16028],{"class":262}," p.",[252,16030,16031],{"class":2102},"getName",[252,16033,13190],{"class":262},[252,16035,1307],{"class":258},[252,16037,8980],{"class":262},[252,16039,16040],{"class":254,"line":8197},[252,16041,2539],{"emptyLinePlaceholder":181},[252,16043,16044],{"class":254,"line":9856},[252,16045,16046],{"class":321},"    \u002F\u002F年龄设置\n",[252,16048,16049,16051,16054,16056,16058],{"class":254,"line":9881},[252,16050,16006],{"class":262},[252,16052,16053],{"class":2102},"setAge",[252,16055,263],{"class":262},[252,16057,919],{"class":311},[252,16059,2858],{"class":262},[252,16061,16062,16064,16066,16069,16071,16073,16076,16078,16080],{"class":254,"line":9904},[252,16063,6669],{"class":262},[252,16065,1307],{"class":258},[252,16067,16068],{"class":367}," \"年龄： \"",[252,16070,1583],{"class":258},[252,16072,16028],{"class":262},[252,16074,16075],{"class":2102},"getAge",[252,16077,13190],{"class":262},[252,16079,1307],{"class":258},[252,16081,8980],{"class":262},[252,16083,16084],{"class":254,"line":9928},[252,16085,2539],{"emptyLinePlaceholder":181},[252,16087,16088],{"class":254,"line":9933},[252,16089,16090],{"class":321},"    \u002F\u002F情人设置\n",[252,16092,16093,16095,16098,16100,16103],{"class":254,"line":9938},[252,16094,16006],{"class":262},[252,16096,16097],{"class":2102},"setLover",[252,16099,263],{"class":262},[252,16101,16102],{"class":367},"\"苍井\"",[252,16104,2858],{"class":262},[252,16106,16107,16110],{"class":254,"line":9943},[252,16108,16109],{"class":321},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[252,16111,16112],{"class":321},"  \u002F\u002F只写属性，不可以读取\n",[252,16114,16115],{"class":254,"line":9952},[252,16116,2539],{"emptyLinePlaceholder":181},[252,16118,16119,16121,16123,16125],{"class":254,"line":9957},[252,16120,2442],{"class":2102},[252,16122,263],{"class":262},[252,16124,2447],{"class":367},[252,16126,2858],{"class":262},[252,16128,16129],{"class":254,"line":9963},[252,16130,2539],{"emptyLinePlaceholder":181},[252,16132,16133,16135,16137],{"class":254,"line":9984},[252,16134,4229],{"class":258},[252,16136,4232],{"class":311},[252,16138,1429],{"class":262},[252,16140,16141],{"class":254,"line":9990},[252,16142,1704],{"class":262},[224,16144,16146],{"id":16145},"_814封装案例","8.1.4封装案例",[207,16148,16149],{},[210,16150,16151,16154],{},[412,16152,16153],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1270,16156,16157,16160],{},[210,16158,16159],{},"求出立方体的面积和体积",[210,16161,16162],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[244,16164,16166],{"className":246,"code":16165,"language":248,"meta":169,"style":169},"#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",[22,16167,16168,16174,16184,16191,16195,16199,16204,16234,16238,16248,16258,16268,16272,16281,16285,16321,16325,16334,16338,16354,16358,16363,16372,16376,16383,16387,16396,16400,16407,16411,16420,16424,16431,16435,16440,16457,16461,16507,16511,16520,16524,16528,16532,16541,16545,16549,16554,16558,16564,16570,16576,16580,16584,16589,16611,16615,16669,16673,16681,16685,16690,16695,16708,16715,16731,16742,16748,16771,16777,16800,16814,16834,16840,16851,16874,16896,16901,16907,16921,16934,16939,16953,16958,16964,16969,16983,16988,16993,17007,17019,17024,17037,17042,17047,17052,17065,17070],{"__ignoreMap":169},[252,16169,16170,16172],{"class":254,"line":255},[252,16171,2088],{"class":258},[252,16173,2091],{"class":367},[252,16175,16176,16178,16180,16182],{"class":254,"line":170},[252,16177,2096],{"class":258},[252,16179,2099],{"class":258},[252,16181,2103],{"class":2102},[252,16183,1429],{"class":262},[252,16185,16186,16188],{"class":254,"line":1318},[252,16187,14834],{"class":258},[252,16189,16190],{"class":2102}," Cube\n",[252,16192,16193],{"class":254,"line":1333},[252,16194,1685],{"class":262},[252,16196,16197],{"class":254,"line":1339},[252,16198,14856],{"class":258},[252,16200,16201],{"class":254,"line":1353},[252,16202,16203],{"class":321},"    \u002F\u002F输入长宽高\n",[252,16205,16206,16208,16211,16213,16215,16218,16220,16222,16225,16227,16229,16232],{"class":254,"line":1359},[252,16207,15049],{"class":258},[252,16209,16210],{"class":2102}," setLwh",[252,16212,263],{"class":262},[252,16214,266],{"class":258},[252,16216,16217],{"class":5356}," l",[252,16219,641],{"class":262},[252,16221,266],{"class":258},[252,16223,16224],{"class":5356}," w",[252,16226,641],{"class":262},[252,16228,266],{"class":258},[252,16230,16231],{"class":5356}," h",[252,16233,269],{"class":262},[252,16235,16236],{"class":254,"line":1450},[252,16237,2169],{"class":262},[252,16239,16240,16243,16245],{"class":254,"line":1456},[252,16241,16242],{"class":262},"        m_L",[252,16244,308],{"class":258},[252,16246,16247],{"class":262},"l;\n",[252,16249,16250,16253,16255],{"class":254,"line":1468},[252,16251,16252],{"class":262},"        m_W",[252,16254,308],{"class":258},[252,16256,16257],{"class":262},"w;\n",[252,16259,16260,16263,16265],{"class":254,"line":1751},[252,16261,16262],{"class":262},"        m_H",[252,16264,308],{"class":258},[252,16266,16267],{"class":262},"h;\n",[252,16269,16270],{"class":254,"line":1756},[252,16271,2326],{"class":262},[252,16273,16274,16276,16279],{"class":254,"line":1762},[252,16275,2124],{"class":258},[252,16277,16278],{"class":2102}," mianji",[252,16280,2115],{"class":262},[252,16282,16283],{"class":254,"line":1767},[252,16284,2169],{"class":262},[252,16286,16287,16289,16291,16293,16296,16298,16301,16303,16306,16308,16311,16313,16316,16318],{"class":254,"line":1781},[252,16288,14892],{"class":258},[252,16290,14895],{"class":311},[252,16292,718],{"class":258},[252,16294,16295],{"class":262},"(m_L",[252,16297,718],{"class":258},[252,16299,16300],{"class":262},"m_W ",[252,16302,744],{"class":258},[252,16304,16305],{"class":262}," m_L",[252,16307,718],{"class":258},[252,16309,16310],{"class":262},"m_H ",[252,16312,744],{"class":258},[252,16314,16315],{"class":262}," m_W",[252,16317,718],{"class":258},[252,16319,16320],{"class":262},"m_H);\n",[252,16322,16323],{"class":254,"line":1786},[252,16324,2326],{"class":262},[252,16326,16327,16329,16332],{"class":254,"line":1792},[252,16328,2124],{"class":258},[252,16330,16331],{"class":2102}," tiji",[252,16333,2115],{"class":262},[252,16335,16336],{"class":254,"line":1813},[252,16337,2169],{"class":262},[252,16339,16340,16342,16344,16346,16349,16351],{"class":254,"line":1818},[252,16341,14892],{"class":258},[252,16343,16305],{"class":262},[252,16345,718],{"class":258},[252,16347,16348],{"class":262},"m_W",[252,16350,718],{"class":258},[252,16352,16353],{"class":262},"m_H;\n",[252,16355,16356],{"class":254,"line":1832},[252,16357,2326],{"class":262},[252,16359,16360],{"class":254,"line":1837},[252,16361,16362],{"class":321},"    \u002F\u002F获取长宽高\n",[252,16364,16365,16367,16370],{"class":254,"line":1866},[252,16366,2124],{"class":258},[252,16368,16369],{"class":2102}," getLength",[252,16371,2115],{"class":262},[252,16373,16374],{"class":254,"line":1871},[252,16375,2169],{"class":262},[252,16377,16378,16380],{"class":254,"line":1888},[252,16379,14892],{"class":258},[252,16381,16382],{"class":262}," m_L;\n",[252,16384,16385],{"class":254,"line":1893},[252,16386,2326],{"class":262},[252,16388,16389,16391,16394],{"class":254,"line":1898},[252,16390,2124],{"class":258},[252,16392,16393],{"class":2102}," getWidth",[252,16395,2115],{"class":262},[252,16397,16398],{"class":254,"line":1903},[252,16399,2169],{"class":262},[252,16401,16402,16404],{"class":254,"line":1917},[252,16403,14892],{"class":258},[252,16405,16406],{"class":262}," m_W;\n",[252,16408,16409],{"class":254,"line":1922},[252,16410,2326],{"class":262},[252,16412,16413,16415,16418],{"class":254,"line":2716},[252,16414,2124],{"class":258},[252,16416,16417],{"class":2102}," getHeight",[252,16419,2115],{"class":262},[252,16421,16422],{"class":254,"line":2730},[252,16423,2169],{"class":262},[252,16425,16426,16428],{"class":254,"line":2738},[252,16427,14892],{"class":258},[252,16429,16430],{"class":262}," m_H;\n",[252,16432,16433],{"class":254,"line":2743},[252,16434,2326],{"class":262},[252,16436,16437],{"class":254,"line":2749},[252,16438,16439],{"class":321},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[252,16441,16442,16445,16448,16450,16453,16455],{"class":254,"line":2755},[252,16443,16444],{"class":258},"    bool",[252,16446,16447],{"class":2102}," isEqual",[252,16449,263],{"class":262},[252,16451,16452],{"class":2102},"Cube",[252,16454,2988],{"class":5356},[252,16456,269],{"class":262},[252,16458,16459],{"class":254,"line":2760},[252,16460,2169],{"class":262},[252,16462,16463,16465,16468,16471,16473,16475,16478,16480,16483,16486,16488,16490,16493,16495,16497,16500,16502,16504],{"class":254,"line":8088},[252,16464,2636],{"class":258},[252,16466,16467],{"class":262}," (c.",[252,16469,16470],{"class":2102},"getLength",[252,16472,13190],{"class":262},[252,16474,3088],{"class":258},[252,16476,16477],{"class":262}," m_L ",[252,16479,1854],{"class":258},[252,16481,16482],{"class":262}," c.",[252,16484,16485],{"class":2102},"getWidth",[252,16487,13190],{"class":262},[252,16489,3088],{"class":258},[252,16491,16492],{"class":262}," m_W ",[252,16494,1854],{"class":258},[252,16496,16482],{"class":262},[252,16498,16499],{"class":2102},"getHeight",[252,16501,13190],{"class":262},[252,16503,3088],{"class":258},[252,16505,16506],{"class":262}," m_H)\n",[252,16508,16509],{"class":254,"line":8112},[252,16510,2649],{"class":262},[252,16512,16513,16515,16518],{"class":254,"line":8117},[252,16514,15872],{"class":258},[252,16516,16517],{"class":311}," true",[252,16519,1429],{"class":262},[252,16521,16522],{"class":254,"line":8123},[252,16523,2668],{"class":262},[252,16525,16526],{"class":254,"line":8150},[252,16527,2709],{"class":258},[252,16529,16530],{"class":254,"line":8155},[252,16531,2649],{"class":262},[252,16533,16534,16536,16539],{"class":254,"line":8161},[252,16535,15872],{"class":258},[252,16537,16538],{"class":311}," false",[252,16540,1429],{"class":262},[252,16542,16543],{"class":254,"line":8173},[252,16544,2668],{"class":262},[252,16546,16547],{"class":254,"line":8185},[252,16548,2326],{"class":262},[252,16550,16551],{"class":254,"line":8197},[252,16552,16553],{"class":321},"    \u002F\u002F私有属性\n",[252,16555,16556],{"class":254,"line":9856},[252,16557,15362],{"class":258},[252,16559,16560,16562],{"class":254,"line":9881},[252,16561,2124],{"class":258},[252,16563,16382],{"class":262},[252,16565,16566,16568],{"class":254,"line":9904},[252,16567,2124],{"class":258},[252,16569,16406],{"class":262},[252,16571,16572,16574],{"class":254,"line":9928},[252,16573,2124],{"class":258},[252,16575,16430],{"class":262},[252,16577,16578],{"class":254,"line":9933},[252,16579,2539],{"emptyLinePlaceholder":181},[252,16581,16582],{"class":254,"line":9938},[252,16583,4134],{"class":262},[252,16585,16586],{"class":254,"line":9943},[252,16587,16588],{"class":321},"\u002F\u002F全局函数判断两个立方体是否相等\n",[252,16590,16591,16593,16595,16597,16599,16602,16604,16606,16609],{"class":254,"line":9952},[252,16592,1493],{"class":258},[252,16594,16447],{"class":2102},[252,16596,263],{"class":262},[252,16598,16452],{"class":2102},[252,16600,16601],{"class":5356}," c1",[252,16603,641],{"class":262},[252,16605,16452],{"class":2102},[252,16607,16608],{"class":5356}," c2",[252,16610,269],{"class":262},[252,16612,16613],{"class":254,"line":9957},[252,16614,1685],{"class":262},[252,16616,16617,16619,16622,16624,16626,16628,16631,16633,16636,16638,16640,16642,16644,16646,16648,16650,16652,16654,16656,16658,16660,16662,16664,16666],{"class":254,"line":9963},[252,16618,4229],{"class":258},[252,16620,16621],{"class":262}," (c1.",[252,16623,16470],{"class":2102},[252,16625,13190],{"class":262},[252,16627,3088],{"class":258},[252,16629,16630],{"class":262}," c2.",[252,16632,16470],{"class":2102},[252,16634,16635],{"class":262},"()) ",[252,16637,1854],{"class":258},[252,16639,16621],{"class":262},[252,16641,16485],{"class":2102},[252,16643,13190],{"class":262},[252,16645,3088],{"class":258},[252,16647,16630],{"class":262},[252,16649,16485],{"class":2102},[252,16651,16635],{"class":262},[252,16653,1854],{"class":258},[252,16655,16621],{"class":262},[252,16657,16499],{"class":2102},[252,16659,13190],{"class":262},[252,16661,3088],{"class":258},[252,16663,16630],{"class":262},[252,16665,16499],{"class":2102},[252,16667,16668],{"class":262},"());\n",[252,16670,16671],{"class":254,"line":9984},[252,16672,1704],{"class":262},[252,16674,16675,16677,16679],{"class":254,"line":9990},[252,16676,266],{"class":258},[252,16678,2112],{"class":2102},[252,16680,2115],{"class":262},[252,16682,16683],{"class":254,"line":10004},[252,16684,1685],{"class":262},[252,16686,16687],{"class":254,"line":10010},[252,16688,16689],{"class":262},"    Cube c1;\n",[252,16691,16692],{"class":254,"line":10037},[252,16693,16694],{"class":321},"    \u002F\u002F输入立方体的长宽高\n",[252,16696,16697,16699,16701,16704,16706],{"class":254,"line":10046},[252,16698,1690],{"class":262},[252,16700,1307],{"class":258},[252,16702,16703],{"class":367},"\"请输入第一个立方体的长、宽、高：\"",[252,16705,1307],{"class":258},[252,16707,1330],{"class":262},[252,16709,16710,16712],{"class":254,"line":10052},[252,16711,2124],{"class":258},[252,16713,16714],{"class":262}," l,w,h,l1,w1,h1;\n",[252,16716,16717,16719,16721,16723,16725,16727,16729],{"class":254,"line":10060},[252,16718,2151],{"class":262},[252,16720,1568],{"class":258},[252,16722,781],{"class":262},[252,16724,1568],{"class":258},[252,16726,1058],{"class":262},[252,16728,1568],{"class":258},[252,16730,16267],{"class":262},[252,16732,16733,16736,16739],{"class":254,"line":10065},[252,16734,16735],{"class":262},"    c1.",[252,16737,16738],{"class":2102},"setLwh",[252,16740,16741],{"class":262},"(l,w,h);\n",[252,16743,16745],{"class":254,"line":16744},66,[252,16746,16747],{"class":321},"    \u002F\u002F面积\n",[252,16749,16751,16753,16755,16758,16760,16762,16765,16767,16769],{"class":254,"line":16750},67,[252,16752,1690],{"class":262},[252,16754,1307],{"class":258},[252,16756,16757],{"class":367},"\"立方体的表面积为：\"",[252,16759,1307],{"class":258},[252,16761,14970],{"class":262},[252,16763,16764],{"class":2102},"mianji",[252,16766,2566],{"class":262},[252,16768,1307],{"class":258},[252,16770,1330],{"class":262},[252,16772,16774],{"class":254,"line":16773},68,[252,16775,16776],{"class":321},"    \u002F\u002F体积\n",[252,16778,16780,16782,16784,16787,16789,16791,16794,16796,16798],{"class":254,"line":16779},69,[252,16781,1690],{"class":262},[252,16783,1307],{"class":258},[252,16785,16786],{"class":367},"\"立方体的体积为：\"",[252,16788,1307],{"class":258},[252,16790,14970],{"class":262},[252,16792,16793],{"class":2102},"tiji",[252,16795,2566],{"class":262},[252,16797,1307],{"class":258},[252,16799,1330],{"class":262},[252,16801,16803,16805,16807,16810,16812],{"class":254,"line":16802},70,[252,16804,1690],{"class":262},[252,16806,1307],{"class":258},[252,16808,16809],{"class":367},"\"请输入第二个立方体的长、宽、高：\"",[252,16811,1307],{"class":258},[252,16813,1330],{"class":262},[252,16815,16817,16819,16821,16824,16826,16829,16831],{"class":254,"line":16816},71,[252,16818,2151],{"class":262},[252,16820,1568],{"class":258},[252,16822,16823],{"class":262},"l1",[252,16825,1568],{"class":258},[252,16827,16828],{"class":262},"w1",[252,16830,1568],{"class":258},[252,16832,16833],{"class":262},"h1;\n",[252,16835,16837],{"class":254,"line":16836},72,[252,16838,16839],{"class":262},"    Cube c2;\n",[252,16841,16843,16846,16848],{"class":254,"line":16842},73,[252,16844,16845],{"class":262},"    c2.",[252,16847,16738],{"class":2102},[252,16849,16850],{"class":262},"(l1,w1,h1);\n",[252,16852,16854,16856,16858,16861,16863,16866,16868,16870,16872],{"class":254,"line":16853},74,[252,16855,1690],{"class":262},[252,16857,1307],{"class":258},[252,16859,16860],{"class":367},"\"第二个立方体的表面积为：\"",[252,16862,1307],{"class":258},[252,16864,16865],{"class":262},"c2.",[252,16867,16764],{"class":2102},[252,16869,2566],{"class":262},[252,16871,1307],{"class":258},[252,16873,1330],{"class":262},[252,16875,16877,16879,16881,16884,16886,16888,16890,16892,16894],{"class":254,"line":16876},75,[252,16878,1690],{"class":262},[252,16880,1307],{"class":258},[252,16882,16883],{"class":367},"\"第二个立方体的体积为：\"",[252,16885,1307],{"class":258},[252,16887,16865],{"class":262},[252,16889,16793],{"class":2102},[252,16891,2566],{"class":262},[252,16893,1307],{"class":258},[252,16895,1330],{"class":262},[252,16897,16899],{"class":254,"line":16898},76,[252,16900,2539],{"emptyLinePlaceholder":181},[252,16902,16904],{"class":254,"line":16903},77,[252,16905,16906],{"class":321},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[252,16908,16910,16912,16914,16917,16919],{"class":254,"line":16909},78,[252,16911,1690],{"class":262},[252,16913,1307],{"class":258},[252,16915,16916],{"class":367},"\"内部函数判断结果：\"",[252,16918,1307],{"class":258},[252,16920,1330],{"class":262},[252,16922,16924,16926,16928,16931],{"class":254,"line":16923},79,[252,16925,3240],{"class":258},[252,16927,16621],{"class":262},[252,16929,16930],{"class":2102},"isEqual",[252,16932,16933],{"class":262},"(c2))\n",[252,16935,16937],{"class":254,"line":16936},80,[252,16938,2169],{"class":262},[252,16940,16942,16944,16946,16949,16951],{"class":254,"line":16941},81,[252,16943,3590],{"class":262},[252,16945,1307],{"class":258},[252,16947,16948],{"class":367},"\"两个立方体相等\"",[252,16950,1307],{"class":258},[252,16952,1330],{"class":262},[252,16954,16956],{"class":254,"line":16955},82,[252,16957,2326],{"class":262},[252,16959,16961],{"class":254,"line":16960},83,[252,16962,16963],{"class":258},"    else\n",[252,16965,16967],{"class":254,"line":16966},84,[252,16968,2169],{"class":262},[252,16970,16972,16974,16976,16979,16981],{"class":254,"line":16971},85,[252,16973,3590],{"class":262},[252,16975,1307],{"class":258},[252,16977,16978],{"class":367},"\"两个立方体不相等\"",[252,16980,1307],{"class":258},[252,16982,1330],{"class":262},[252,16984,16986],{"class":254,"line":16985},86,[252,16987,2326],{"class":262},[252,16989,16991],{"class":254,"line":16990},87,[252,16992,2539],{"emptyLinePlaceholder":181},[252,16994,16996,16998,17000,17003,17005],{"class":254,"line":16995},88,[252,16997,1690],{"class":262},[252,16999,1307],{"class":258},[252,17001,17002],{"class":367},"\"全局函数判断结果：\"",[252,17004,1307],{"class":258},[252,17006,1330],{"class":262},[252,17008,17010,17012,17014,17016],{"class":254,"line":17009},89,[252,17011,3240],{"class":258},[252,17013,1797],{"class":262},[252,17015,16930],{"class":2102},[252,17017,17018],{"class":262},"(c1, c2))\n",[252,17020,17022],{"class":254,"line":17021},90,[252,17023,2169],{"class":262},[252,17025,17027,17029,17031,17033,17035],{"class":254,"line":17026},91,[252,17028,3590],{"class":262},[252,17030,1307],{"class":258},[252,17032,16948],{"class":367},[252,17034,1307],{"class":258},[252,17036,1330],{"class":262},[252,17038,17040],{"class":254,"line":17039},92,[252,17041,2326],{"class":262},[252,17043,17045],{"class":254,"line":17044},93,[252,17046,16963],{"class":258},[252,17048,17050],{"class":254,"line":17049},94,[252,17051,2169],{"class":262},[252,17053,17055,17057,17059,17061,17063],{"class":254,"line":17054},95,[252,17056,3590],{"class":262},[252,17058,1307],{"class":258},[252,17060,16978],{"class":367},[252,17062,1307],{"class":258},[252,17064,1330],{"class":262},[252,17066,17068],{"class":254,"line":17067},96,[252,17069,2326],{"class":262},[252,17071,17073],{"class":254,"line":17072},97,[252,17074,1704],{"class":262},[207,17076,17077],{"start":170},[210,17078,17079],{},[412,17080,17081],{},"练习案例2：点和圆的关系",[1270,17083,17084],{},[210,17085,17086],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[244,17088,17090],{"className":246,"code":17089,"language":248,"meta":169,"style":169},"#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",[22,17091,17092,17098,17108,17115,17122,17126,17130,17135,17169,17174,17190,17204,17208,17212,17219,17226,17230,17236,17240,17244,17248,17270,17293,17298,17312,17327,17331,17335,17341,17346,17351,17355,17381,17385,17415,17443,17471,17488,17492,17505,17509,17513,17517,17530,17534,17538,17546,17550,17554,17558,17563,17567,17578,17585,17594,17604,17615,17622,17635,17646,17656,17667,17674,17688,17693,17703,17711],{"__ignoreMap":169},[252,17093,17094,17096],{"class":254,"line":255},[252,17095,2088],{"class":258},[252,17097,2091],{"class":367},[252,17099,17100,17102,17104,17106],{"class":254,"line":170},[252,17101,2096],{"class":258},[252,17103,2099],{"class":258},[252,17105,2103],{"class":2102},[252,17107,1429],{"class":262},[252,17109,17110,17112],{"class":254,"line":1318},[252,17111,2088],{"class":258},[252,17113,17114],{"class":367},"\u003Ccmath>\n",[252,17116,17117,17119],{"class":254,"line":1333},[252,17118,14834],{"class":258},[252,17120,17121],{"class":2102}," Point\n",[252,17123,17124],{"class":254,"line":1339},[252,17125,1685],{"class":262},[252,17127,17128],{"class":254,"line":1353},[252,17129,14856],{"class":258},[252,17131,17132],{"class":254,"line":1359},[252,17133,17134],{"class":321},"    \u002F\u002F赋值\n",[252,17136,17137,17139,17142,17144,17146,17149,17151,17153,17156,17159,17161,17164,17166],{"class":254,"line":1450},[252,17138,15049],{"class":258},[252,17140,17141],{"class":2102}," setPoint",[252,17143,263],{"class":262},[252,17145,14177],{"class":258},[252,17147,17148],{"class":5356}," x",[252,17150,12575],{"class":262},[252,17152,14177],{"class":258},[252,17154,17155],{"class":5356}," y",[252,17157,17158],{"class":262},") { m_x ",[252,17160,308],{"class":258},[252,17162,17163],{"class":262}," x; m_y ",[252,17165,308],{"class":258},[252,17167,17168],{"class":262}," y; }\n",[252,17170,17171],{"class":254,"line":1456},[252,17172,17173],{"class":321},"    \u002F\u002F获取坐标\n",[252,17175,17176,17178,17181,17184,17187],{"class":254,"line":1468},[252,17177,14878],{"class":258},[252,17179,17180],{"class":2102}," getX",[252,17182,17183],{"class":262},"() { ",[252,17185,17186],{"class":258},"return",[252,17188,17189],{"class":262}," m_x; }\n",[252,17191,17192,17194,17197,17199,17201],{"class":254,"line":1751},[252,17193,14878],{"class":258},[252,17195,17196],{"class":2102}," getY",[252,17198,17183],{"class":262},[252,17200,17186],{"class":258},[252,17202,17203],{"class":262}," m_y; }\n",[252,17205,17206],{"class":254,"line":1756},[252,17207,2539],{"emptyLinePlaceholder":181},[252,17209,17210],{"class":254,"line":1762},[252,17211,15362],{"class":258},[252,17213,17214,17216],{"class":254,"line":1767},[252,17215,14878],{"class":258},[252,17217,17218],{"class":262}," m_x;\n",[252,17220,17221,17223],{"class":254,"line":1781},[252,17222,14878],{"class":258},[252,17224,17225],{"class":262}," m_y;\n",[252,17227,17228],{"class":254,"line":1786},[252,17229,4134],{"class":262},[252,17231,17232,17234],{"class":254,"line":1792},[252,17233,14834],{"class":258},[252,17235,14837],{"class":2102},[252,17237,17238],{"class":254,"line":1813},[252,17239,1685],{"class":262},[252,17241,17242],{"class":254,"line":1818},[252,17243,14856],{"class":258},[252,17245,17246],{"class":254,"line":1832},[252,17247,17134],{"class":321},[252,17249,17250,17252,17255,17257,17259,17262,17265,17267],{"class":254,"line":1837},[252,17251,15049],{"class":258},[252,17253,17254],{"class":2102}," setRadius",[252,17256,263],{"class":262},[252,17258,14177],{"class":258},[252,17260,17261],{"class":5356}," r",[252,17263,17264],{"class":262},") { m_r ",[252,17266,308],{"class":258},[252,17268,17269],{"class":262}," r; }\n",[252,17271,17272,17274,17277,17279,17282,17285,17288,17290],{"class":254,"line":1866},[252,17273,15049],{"class":258},[252,17275,17276],{"class":2102}," setCenter",[252,17278,263],{"class":262},[252,17280,17281],{"class":2102},"Point",[252,17283,17284],{"class":5356}," center",[252,17286,17287],{"class":262},") { m_center ",[252,17289,308],{"class":258},[252,17291,17292],{"class":262}," center; }\n",[252,17294,17295],{"class":254,"line":1871},[252,17296,17297],{"class":321},"    \u002F\u002F获取属性\n",[252,17299,17300,17302,17305,17307,17309],{"class":254,"line":1888},[252,17301,14878],{"class":258},[252,17303,17304],{"class":2102}," getRadius",[252,17306,17183],{"class":262},[252,17308,17186],{"class":258},[252,17310,17311],{"class":262}," m_r; }\n",[252,17313,17314,17317,17320,17322,17324],{"class":254,"line":1893},[252,17315,17316],{"class":2102},"    Point",[252,17318,17319],{"class":2102}," getCenter",[252,17321,17183],{"class":262},[252,17323,17186],{"class":258},[252,17325,17326],{"class":262}," m_center; }\n",[252,17328,17329],{"class":254,"line":1898},[252,17330,2539],{"emptyLinePlaceholder":181},[252,17332,17333],{"class":254,"line":1903},[252,17334,15362],{"class":258},[252,17336,17337,17339],{"class":254,"line":1917},[252,17338,14878],{"class":258},[252,17340,14868],{"class":262},[252,17342,17343],{"class":254,"line":1922},[252,17344,17345],{"class":321},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[252,17347,17348],{"class":254,"line":2716},[252,17349,17350],{"class":262},"    Point m_center;\n",[252,17352,17353],{"class":254,"line":2730},[252,17354,4134],{"class":262},[252,17356,17357,17359,17362,17364,17367,17369,17371,17373,17375,17377,17379],{"class":254,"line":2738},[252,17358,5504],{"class":258},[252,17360,17361],{"class":2102}," isInCircle",[252,17363,263],{"class":262},[252,17365,17366],{"class":2102},"Circle",[252,17368,10724],{"class":258},[252,17370,551],{"class":5356},[252,17372,641],{"class":262},[252,17374,17281],{"class":2102},[252,17376,10724],{"class":258},[252,17378,19],{"class":5356},[252,17380,269],{"class":262},[252,17382,17383],{"class":254,"line":2743},[252,17384,1685],{"class":262},[252,17386,17387,17389,17392,17394,17396,17399,17402,17405,17407,17409,17411,17413],{"class":254,"line":2749},[252,17388,14878],{"class":258},[252,17390,17391],{"class":262}," dx ",[252,17393,308],{"class":258},[252,17395,16482],{"class":262},[252,17397,17398],{"class":2102},"getCenter",[252,17400,17401],{"class":262},"().",[252,17403,17404],{"class":2102},"getX",[252,17406,13190],{"class":262},[252,17408,795],{"class":258},[252,17410,16028],{"class":262},[252,17412,17404],{"class":2102},[252,17414,5776],{"class":262},[252,17416,17417,17419,17422,17424,17426,17428,17430,17433,17435,17437,17439,17441],{"class":254,"line":2755},[252,17418,14878],{"class":258},[252,17420,17421],{"class":262}," dy ",[252,17423,308],{"class":258},[252,17425,16482],{"class":262},[252,17427,17398],{"class":2102},[252,17429,17401],{"class":262},[252,17431,17432],{"class":2102},"getY",[252,17434,13190],{"class":262},[252,17436,795],{"class":258},[252,17438,16028],{"class":262},[252,17440,17432],{"class":2102},[252,17442,5776],{"class":262},[252,17444,17445,17447,17450,17452,17455,17458,17460,17462,17464,17466,17468],{"class":254,"line":2760},[252,17446,14878],{"class":258},[252,17448,17449],{"class":262}," distance ",[252,17451,308],{"class":258},[252,17453,17454],{"class":2102}," sqrt",[252,17456,17457],{"class":262},"(dx ",[252,17459,718],{"class":258},[252,17461,17391],{"class":262},[252,17463,744],{"class":258},[252,17465,17421],{"class":262},[252,17467,718],{"class":258},[252,17469,17470],{"class":262}," dy);\n",[252,17472,17473,17475,17478,17480,17482,17485],{"class":254,"line":8088},[252,17474,3240],{"class":258},[252,17476,17477],{"class":262}," (distance ",[252,17479,1173],{"class":258},[252,17481,16482],{"class":262},[252,17483,17484],{"class":2102},"getRadius",[252,17486,17487],{"class":262},"())\n",[252,17489,17490],{"class":254,"line":8112},[252,17491,2169],{"class":262},[252,17493,17494,17496,17498,17501,17503],{"class":254,"line":8117},[252,17495,9809],{"class":262},[252,17497,1307],{"class":258},[252,17499,17500],{"class":367}," \"点在圆内\"",[252,17502,1583],{"class":258},[252,17504,8980],{"class":262},[252,17506,17507],{"class":254,"line":8123},[252,17508,2326],{"class":262},[252,17510,17511],{"class":254,"line":8150},[252,17512,16963],{"class":258},[252,17514,17515],{"class":254,"line":8155},[252,17516,2169],{"class":262},[252,17518,17519,17521,17523,17526,17528],{"class":254,"line":8161},[252,17520,9809],{"class":262},[252,17522,1307],{"class":258},[252,17524,17525],{"class":367}," \"点在圆外\"",[252,17527,1583],{"class":258},[252,17529,8980],{"class":262},[252,17531,17532],{"class":254,"line":8173},[252,17533,2326],{"class":262},[252,17535,17536],{"class":254,"line":8185},[252,17537,1704],{"class":262},[252,17539,17540,17542,17544],{"class":254,"line":8197},[252,17541,266],{"class":258},[252,17543,2112],{"class":2102},[252,17545,2115],{"class":262},[252,17547,17548],{"class":254,"line":9856},[252,17549,1685],{"class":262},[252,17551,17552],{"class":254,"line":9881},[252,17553,15193],{"class":321},[252,17555,17556],{"class":254,"line":9904},[252,17557,14940],{"class":262},[252,17559,17560],{"class":254,"line":9928},[252,17561,17562],{"class":262},"    Point p1;\n",[252,17564,17565],{"class":254,"line":9933},[252,17566,17134],{"class":321},[252,17568,17569,17571,17573,17576],{"class":254,"line":9938},[252,17570,1690],{"class":262},[252,17572,1307],{"class":258},[252,17574,17575],{"class":367},"\"请输入圆的半径：\"",[252,17577,1429],{"class":262},[252,17579,17580,17582],{"class":254,"line":9943},[252,17581,14878],{"class":258},[252,17583,17584],{"class":262}," r;\n",[252,17586,17587,17589,17591],{"class":254,"line":9952},[252,17588,2151],{"class":262},[252,17590,1568],{"class":258},[252,17592,17593],{"class":262},"r;\n",[252,17595,17596,17598,17601],{"class":254,"line":9957},[252,17597,16735],{"class":262},[252,17599,17600],{"class":2102},"setRadius",[252,17602,17603],{"class":262},"(r);\n",[252,17605,17606,17608,17610,17613],{"class":254,"line":9963},[252,17607,1690],{"class":262},[252,17609,1307],{"class":258},[252,17611,17612],{"class":367},"\"请输入圆心坐标：\"",[252,17614,1429],{"class":262},[252,17616,17617,17619],{"class":254,"line":9984},[252,17618,14878],{"class":258},[252,17620,17621],{"class":262}," x, y;\n",[252,17623,17624,17626,17628,17630,17632],{"class":254,"line":9990},[252,17625,2151],{"class":262},[252,17627,1568],{"class":258},[252,17629,1083],{"class":262},[252,17631,1568],{"class":258},[252,17633,17634],{"class":262},"y;\n",[252,17636,17637,17640,17643],{"class":254,"line":10004},[252,17638,17639],{"class":262},"    p1.",[252,17641,17642],{"class":2102},"setPoint",[252,17644,17645],{"class":262},"(x, y);\n",[252,17647,17648,17650,17653],{"class":254,"line":10010},[252,17649,16735],{"class":262},[252,17651,17652],{"class":2102},"setCenter",[252,17654,17655],{"class":262},"(p1);\n",[252,17657,17658,17660,17662,17665],{"class":254,"line":10037},[252,17659,1690],{"class":262},[252,17661,1307],{"class":258},[252,17663,17664],{"class":367},"\"请输入测试点坐标：\"",[252,17666,1429],{"class":262},[252,17668,17669,17671],{"class":254,"line":10046},[252,17670,14878],{"class":258},[252,17672,17673],{"class":262}," x1, y1;\n",[252,17675,17676,17678,17680,17683,17685],{"class":254,"line":10052},[252,17677,2151],{"class":262},[252,17679,1568],{"class":258},[252,17681,17682],{"class":262},"x1",[252,17684,1568],{"class":258},[252,17686,17687],{"class":262},"y1;\n",[252,17689,17690],{"class":254,"line":10060},[252,17691,17692],{"class":262},"    Point p2;\n",[252,17694,17695,17698,17700],{"class":254,"line":10065},[252,17696,17697],{"class":262},"    p2.",[252,17699,17642],{"class":2102},[252,17701,17702],{"class":262},"(x1, y1);\n",[252,17704,17705,17708],{"class":254,"line":16744},[252,17706,17707],{"class":2102},"    isInCircle",[252,17709,17710],{"class":262},"(c1, p2);\n",[252,17712,17713],{"class":254,"line":16750},[252,17714,1704],{"class":262},[19,17716,17717],{},"在类中可以让另一个类作为本来的成员",[19,17719,17720],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,17722,17723],{},"创建point.h",[244,17725,17727],{"className":246,"code":17726,"language":248,"meta":169,"style":169},"#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",[22,17728,17729,17740,17746,17756,17762,17766,17771,17775,17779,17799,17803,17811,17819,17823,17827,17833,17839],{"__ignoreMap":169},[252,17730,17731,17734,17737],{"class":254,"line":255},[252,17732,17733],{"class":258},"#pragma",[252,17735,17736],{"class":2102}," once",[252,17738,17739],{"class":321}," \u002F\u002F防止头文件重复包含\n",[252,17741,17742,17744],{"class":254,"line":170},[252,17743,2088],{"class":258},[252,17745,2091],{"class":367},[252,17747,17748,17750,17752,17754],{"class":254,"line":1318},[252,17749,2096],{"class":258},[252,17751,2099],{"class":258},[252,17753,2103],{"class":2102},[252,17755,1429],{"class":262},[252,17757,17758,17760],{"class":254,"line":1333},[252,17759,14834],{"class":258},[252,17761,17121],{"class":2102},[252,17763,17764],{"class":254,"line":1339},[252,17765,1685],{"class":262},[252,17767,17768],{"class":254,"line":1353},[252,17769,17770],{"class":321},"\u002F\u002F做好声明与变量定义就可以\n",[252,17772,17773],{"class":254,"line":1359},[252,17774,14856],{"class":258},[252,17776,17777],{"class":254,"line":1450},[252,17778,17134],{"class":321},[252,17780,17781,17783,17785,17787,17789,17791,17793,17795,17797],{"class":254,"line":1456},[252,17782,15049],{"class":258},[252,17784,17141],{"class":2102},[252,17786,263],{"class":262},[252,17788,14177],{"class":258},[252,17790,17148],{"class":5356},[252,17792,12575],{"class":262},[252,17794,14177],{"class":258},[252,17796,17155],{"class":5356},[252,17798,2858],{"class":262},[252,17800,17801],{"class":254,"line":1468},[252,17802,17173],{"class":321},[252,17804,17805,17807,17809],{"class":254,"line":1751},[252,17806,14878],{"class":258},[252,17808,17180],{"class":2102},[252,17810,5776],{"class":262},[252,17812,17813,17815,17817],{"class":254,"line":1756},[252,17814,14878],{"class":258},[252,17816,17196],{"class":2102},[252,17818,5776],{"class":262},[252,17820,17821],{"class":254,"line":1762},[252,17822,2539],{"emptyLinePlaceholder":181},[252,17824,17825],{"class":254,"line":1767},[252,17826,15362],{"class":258},[252,17828,17829,17831],{"class":254,"line":1781},[252,17830,14878],{"class":258},[252,17832,17218],{"class":262},[252,17834,17835,17837],{"class":254,"line":1786},[252,17836,14878],{"class":258},[252,17838,17225],{"class":262},[252,17840,17841],{"class":254,"line":1792},[252,17842,4134],{"class":262},[19,17844,17845],{},"创建point.cpp",[244,17847,17849],{"className":246,"code":17848,"language":248,"meta":169,"style":169},"#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",[22,17850,17851,17858,17863,17897,17901,17917],{"__ignoreMap":169},[252,17852,17853,17855],{"class":254,"line":255},[252,17854,2088],{"class":258},[252,17856,17857],{"class":367},"\u003Cpoint.h>\n",[252,17859,17860],{"class":254,"line":170},[252,17861,17862],{"class":321},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[252,17864,17865,17867,17870,17873,17875,17877,17879,17881,17883,17885,17887,17889,17891,17893,17895],{"class":254,"line":1318},[252,17866,15049],{"class":258},[252,17868,17869],{"class":2102}," Point",[252,17871,17872],{"class":262},"::",[252,17874,17642],{"class":2102},[252,17876,263],{"class":262},[252,17878,14177],{"class":258},[252,17880,17148],{"class":5356},[252,17882,12575],{"class":262},[252,17884,14177],{"class":258},[252,17886,17155],{"class":5356},[252,17888,17158],{"class":262},[252,17890,308],{"class":258},[252,17892,17163],{"class":262},[252,17894,308],{"class":258},[252,17896,17168],{"class":262},[252,17898,17899],{"class":254,"line":1333},[252,17900,17173],{"class":321},[252,17902,17903,17905,17907,17909,17911,17913,17915],{"class":254,"line":1339},[252,17904,14878],{"class":258},[252,17906,17869],{"class":2102},[252,17908,17872],{"class":262},[252,17910,17404],{"class":2102},[252,17912,17183],{"class":262},[252,17914,17186],{"class":258},[252,17916,17189],{"class":262},[252,17918,17919,17921,17923,17925,17927,17929,17931],{"class":254,"line":1353},[252,17920,14878],{"class":258},[252,17922,17869],{"class":2102},[252,17924,17872],{"class":262},[252,17926,17432],{"class":2102},[252,17928,17183],{"class":262},[252,17930,17186],{"class":258},[252,17932,17203],{"class":262},[19,17934,17935],{},"创建circle.h",[244,17937,17939],{"className":246,"code":17938,"language":248,"meta":169,"style":169},"#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",[22,17940,17941,17948,17954,17964,17970,17976,17980,17984,17988,18002,18016,18020,18028,18036,18040,18044,18050,18054,18058],{"__ignoreMap":169},[252,17942,17943,17945],{"class":254,"line":255},[252,17944,17733],{"class":258},[252,17946,17947],{"class":2102}," once\n",[252,17949,17950,17952],{"class":254,"line":170},[252,17951,2088],{"class":258},[252,17953,2091],{"class":367},[252,17955,17956,17958,17960,17962],{"class":254,"line":1318},[252,17957,2096],{"class":258},[252,17959,2099],{"class":258},[252,17961,2103],{"class":2102},[252,17963,1429],{"class":262},[252,17965,17966,17968],{"class":254,"line":1333},[252,17967,2088],{"class":258},[252,17969,17857],{"class":367},[252,17971,17972,17974],{"class":254,"line":1339},[252,17973,14834],{"class":258},[252,17975,14837],{"class":2102},[252,17977,17978],{"class":254,"line":1353},[252,17979,1685],{"class":262},[252,17981,17982],{"class":254,"line":1359},[252,17983,14856],{"class":258},[252,17985,17986],{"class":254,"line":1450},[252,17987,17134],{"class":321},[252,17989,17990,17992,17994,17996,17998,18000],{"class":254,"line":1456},[252,17991,15049],{"class":258},[252,17993,17254],{"class":2102},[252,17995,263],{"class":262},[252,17997,14177],{"class":258},[252,17999,17261],{"class":5356},[252,18001,2858],{"class":262},[252,18003,18004,18006,18008,18010,18012,18014],{"class":254,"line":1468},[252,18005,15049],{"class":258},[252,18007,17276],{"class":2102},[252,18009,263],{"class":262},[252,18011,17281],{"class":2102},[252,18013,17284],{"class":5356},[252,18015,2858],{"class":262},[252,18017,18018],{"class":254,"line":1751},[252,18019,17297],{"class":321},[252,18021,18022,18024,18026],{"class":254,"line":1756},[252,18023,14878],{"class":258},[252,18025,17304],{"class":2102},[252,18027,5776],{"class":262},[252,18029,18030,18032,18034],{"class":254,"line":1762},[252,18031,17316],{"class":2102},[252,18033,17319],{"class":2102},[252,18035,5776],{"class":262},[252,18037,18038],{"class":254,"line":1767},[252,18039,2539],{"emptyLinePlaceholder":181},[252,18041,18042],{"class":254,"line":1781},[252,18043,15362],{"class":258},[252,18045,18046,18048],{"class":254,"line":1786},[252,18047,14878],{"class":258},[252,18049,14868],{"class":262},[252,18051,18052],{"class":254,"line":1792},[252,18053,17345],{"class":321},[252,18055,18056],{"class":254,"line":1813},[252,18057,17350],{"class":262},[252,18059,18060],{"class":254,"line":1818},[252,18061,4134],{"class":262},[19,18063,18064],{},"创建circle.cpp",[244,18066,18068],{"className":246,"code":18067,"language":248,"meta":169,"style":169},"#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",[22,18069,18070,18077,18100,18122,18127,18143],{"__ignoreMap":169},[252,18071,18072,18074],{"class":254,"line":255},[252,18073,2088],{"class":258},[252,18075,18076],{"class":367},"\u003Ccircle.h>\n",[252,18078,18079,18081,18084,18086,18088,18090,18092,18094,18096,18098],{"class":254,"line":170},[252,18080,5504],{"class":258},[252,18082,18083],{"class":2102}," Circle",[252,18085,17872],{"class":262},[252,18087,17600],{"class":2102},[252,18089,263],{"class":262},[252,18091,14177],{"class":258},[252,18093,17261],{"class":5356},[252,18095,17264],{"class":262},[252,18097,308],{"class":258},[252,18099,17269],{"class":262},[252,18101,18102,18104,18106,18108,18110,18112,18114,18116,18118,18120],{"class":254,"line":1318},[252,18103,5504],{"class":258},[252,18105,18083],{"class":2102},[252,18107,17872],{"class":262},[252,18109,17652],{"class":2102},[252,18111,263],{"class":262},[252,18113,17281],{"class":2102},[252,18115,17284],{"class":5356},[252,18117,17287],{"class":262},[252,18119,308],{"class":258},[252,18121,17292],{"class":262},[252,18123,18124],{"class":254,"line":1333},[252,18125,18126],{"class":321},"\u002F\u002F获取属性\n",[252,18128,18129,18131,18133,18135,18137,18139,18141],{"class":254,"line":1339},[252,18130,14177],{"class":258},[252,18132,18083],{"class":2102},[252,18134,17872],{"class":262},[252,18136,17484],{"class":2102},[252,18138,17183],{"class":262},[252,18140,17186],{"class":258},[252,18142,17311],{"class":262},[252,18144,18145,18147,18149,18151,18153,18155,18157],{"class":254,"line":1353},[252,18146,17281],{"class":2102},[252,18148,18083],{"class":2102},[252,18150,17872],{"class":262},[252,18152,17398],{"class":2102},[252,18154,17183],{"class":262},[252,18156,17186],{"class":258},[252,18158,17326],{"class":262},[19,18160,18161],{},"使用封装的类",[244,18163,18165],{"className":246,"code":18164,"language":248,"meta":169,"style":169},"#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",[22,18166,18167,18173,18183,18189,18195,18219,18223,18249,18275,18299,18313,18317,18329,18333,18337,18341,18353,18357,18361,18369,18373,18377,18381,18385,18389,18399,18405,18413,18421,18431,18437,18449,18457,18465,18475,18481,18493,18497,18505,18511],{"__ignoreMap":169},[252,18168,18169,18171],{"class":254,"line":255},[252,18170,2088],{"class":258},[252,18172,2091],{"class":367},[252,18174,18175,18177,18179,18181],{"class":254,"line":170},[252,18176,2096],{"class":258},[252,18178,2099],{"class":258},[252,18180,2103],{"class":2102},[252,18182,1429],{"class":262},[252,18184,18185,18187],{"class":254,"line":1318},[252,18186,2088],{"class":258},[252,18188,18076],{"class":367},[252,18190,18191,18193],{"class":254,"line":1333},[252,18192,2088],{"class":258},[252,18194,17857],{"class":367},[252,18196,18197,18199,18201,18203,18205,18207,18209,18211,18213,18215,18217],{"class":254,"line":1339},[252,18198,5504],{"class":258},[252,18200,17361],{"class":2102},[252,18202,263],{"class":262},[252,18204,17366],{"class":2102},[252,18206,10724],{"class":258},[252,18208,551],{"class":5356},[252,18210,641],{"class":262},[252,18212,17281],{"class":2102},[252,18214,10724],{"class":258},[252,18216,19],{"class":5356},[252,18218,269],{"class":262},[252,18220,18221],{"class":254,"line":1353},[252,18222,1685],{"class":262},[252,18224,18225,18227,18229,18231,18233,18235,18237,18239,18241,18243,18245,18247],{"class":254,"line":1359},[252,18226,14878],{"class":258},[252,18228,17391],{"class":262},[252,18230,308],{"class":258},[252,18232,16482],{"class":262},[252,18234,17398],{"class":2102},[252,18236,17401],{"class":262},[252,18238,17404],{"class":2102},[252,18240,13190],{"class":262},[252,18242,795],{"class":258},[252,18244,16028],{"class":262},[252,18246,17404],{"class":2102},[252,18248,5776],{"class":262},[252,18250,18251,18253,18255,18257,18259,18261,18263,18265,18267,18269,18271,18273],{"class":254,"line":1450},[252,18252,14878],{"class":258},[252,18254,17421],{"class":262},[252,18256,308],{"class":258},[252,18258,16482],{"class":262},[252,18260,17398],{"class":2102},[252,18262,17401],{"class":262},[252,18264,17432],{"class":2102},[252,18266,13190],{"class":262},[252,18268,795],{"class":258},[252,18270,16028],{"class":262},[252,18272,17432],{"class":2102},[252,18274,5776],{"class":262},[252,18276,18277,18279,18281,18283,18285,18287,18289,18291,18293,18295,18297],{"class":254,"line":1456},[252,18278,14878],{"class":258},[252,18280,17449],{"class":262},[252,18282,308],{"class":258},[252,18284,17454],{"class":2102},[252,18286,17457],{"class":262},[252,18288,718],{"class":258},[252,18290,17391],{"class":262},[252,18292,744],{"class":258},[252,18294,17421],{"class":262},[252,18296,718],{"class":258},[252,18298,17470],{"class":262},[252,18300,18301,18303,18305,18307,18309,18311],{"class":254,"line":1468},[252,18302,3240],{"class":258},[252,18304,17477],{"class":262},[252,18306,1173],{"class":258},[252,18308,16482],{"class":262},[252,18310,17484],{"class":2102},[252,18312,17487],{"class":262},[252,18314,18315],{"class":254,"line":1751},[252,18316,2169],{"class":262},[252,18318,18319,18321,18323,18325,18327],{"class":254,"line":1756},[252,18320,9809],{"class":262},[252,18322,1307],{"class":258},[252,18324,17500],{"class":367},[252,18326,1583],{"class":258},[252,18328,8980],{"class":262},[252,18330,18331],{"class":254,"line":1762},[252,18332,2326],{"class":262},[252,18334,18335],{"class":254,"line":1767},[252,18336,16963],{"class":258},[252,18338,18339],{"class":254,"line":1781},[252,18340,2169],{"class":262},[252,18342,18343,18345,18347,18349,18351],{"class":254,"line":1786},[252,18344,9809],{"class":262},[252,18346,1307],{"class":258},[252,18348,17525],{"class":367},[252,18350,1583],{"class":258},[252,18352,8980],{"class":262},[252,18354,18355],{"class":254,"line":1792},[252,18356,2326],{"class":262},[252,18358,18359],{"class":254,"line":1813},[252,18360,1704],{"class":262},[252,18362,18363,18365,18367],{"class":254,"line":1818},[252,18364,266],{"class":258},[252,18366,2112],{"class":2102},[252,18368,2115],{"class":262},[252,18370,18371],{"class":254,"line":1832},[252,18372,1685],{"class":262},[252,18374,18375],{"class":254,"line":1837},[252,18376,15193],{"class":321},[252,18378,18379],{"class":254,"line":1866},[252,18380,14940],{"class":262},[252,18382,18383],{"class":254,"line":1871},[252,18384,17562],{"class":262},[252,18386,18387],{"class":254,"line":1888},[252,18388,17134],{"class":321},[252,18390,18391,18393,18395,18397],{"class":254,"line":1893},[252,18392,1690],{"class":262},[252,18394,1307],{"class":258},[252,18396,17575],{"class":367},[252,18398,1429],{"class":262},[252,18400,18401,18403],{"class":254,"line":1898},[252,18402,14878],{"class":258},[252,18404,17584],{"class":262},[252,18406,18407,18409,18411],{"class":254,"line":1903},[252,18408,2151],{"class":262},[252,18410,1568],{"class":258},[252,18412,17593],{"class":262},[252,18414,18415,18417,18419],{"class":254,"line":1917},[252,18416,16735],{"class":262},[252,18418,17600],{"class":2102},[252,18420,17603],{"class":262},[252,18422,18423,18425,18427,18429],{"class":254,"line":1922},[252,18424,1690],{"class":262},[252,18426,1307],{"class":258},[252,18428,17612],{"class":367},[252,18430,1429],{"class":262},[252,18432,18433,18435],{"class":254,"line":2716},[252,18434,14878],{"class":258},[252,18436,17621],{"class":262},[252,18438,18439,18441,18443,18445,18447],{"class":254,"line":2730},[252,18440,2151],{"class":262},[252,18442,1568],{"class":258},[252,18444,1083],{"class":262},[252,18446,1568],{"class":258},[252,18448,17634],{"class":262},[252,18450,18451,18453,18455],{"class":254,"line":2738},[252,18452,17639],{"class":262},[252,18454,17642],{"class":2102},[252,18456,17645],{"class":262},[252,18458,18459,18461,18463],{"class":254,"line":2743},[252,18460,16735],{"class":262},[252,18462,17652],{"class":2102},[252,18464,17655],{"class":262},[252,18466,18467,18469,18471,18473],{"class":254,"line":2749},[252,18468,1690],{"class":262},[252,18470,1307],{"class":258},[252,18472,17664],{"class":367},[252,18474,1429],{"class":262},[252,18476,18477,18479],{"class":254,"line":2755},[252,18478,14878],{"class":258},[252,18480,17673],{"class":262},[252,18482,18483,18485,18487,18489,18491],{"class":254,"line":2760},[252,18484,2151],{"class":262},[252,18486,1568],{"class":258},[252,18488,17682],{"class":262},[252,18490,1568],{"class":258},[252,18492,17687],{"class":262},[252,18494,18495],{"class":254,"line":8088},[252,18496,17692],{"class":262},[252,18498,18499,18501,18503],{"class":254,"line":8112},[252,18500,17697],{"class":262},[252,18502,17642],{"class":2102},[252,18504,17702],{"class":262},[252,18506,18507,18509],{"class":254,"line":8117},[252,18508,17707],{"class":2102},[252,18510,17710],{"class":262},[252,18512,18513],{"class":254,"line":8123},[252,18514,1704],{"class":262},[14,18516,18518],{"id":18517},"_82对象的初始化清理","8.2对象的初始化清理",[1270,18520,18521,18524],{},[210,18522,18523],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[210,18525,18526],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[224,18528,18530],{"id":18529},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18532,18533,18534,18537],{},"对象的",[412,18535,18536],{},"初始化和清理","也是两个非常重要的安全问题",[19,18539,18540],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18542,18543],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18545,18546,18547,123,18550,18553],{},"c++利用了",[412,18548,18549],{},"构造函数",[412,18551,18552],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18555,18556,18557],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[412,18558,18559],{},"我们不提供构造和析构，编译器会提供",[19,18561,18562],{},[412,18563,18564],{},"编译器提供的构造函数和析构函数是空实现。",[1270,18566,18567,18570],{},[210,18568,18569],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[210,18571,18572,18573,18576],{},"析构函数：主要作用在于对象",[412,18574,18575],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18578,18579,18582],{},[412,18580,18581],{},"构造函数语法：",[22,18583,18584],{},"类名(){}",[207,18586,18587,18590,18593,18596,18599],{},[210,18588,18589],{},"构造函数，没有返回值也不写void",[210,18591,18592],{},"函数名称与类名相同",[210,18594,18595],{},"构造函数可以有参数，因此可以发生重载",[210,18597,18598],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[210,18600,18601,18602,692],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[22,18603,18604],{},"Person(){}",[19,18606,18607,13935,18610],{},[412,18608,18609],{},"析构函数语法：",[22,18611,18612],{},"~类名(){}",[207,18614,18615,18618,18621,18627],{},[210,18616,18617],{},"析构函数，没有返回值也不写void",[210,18619,18620],{},"函数名称与类名相同,在名称前加上符号  ~",[210,18622,18623,18624],{},"析构函数不可以有参数，因此",[412,18625,18626],{},"不可以发生重载",[210,18628,18629],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[244,18631,18633],{"className":246,"code":18632,"language":248,"meta":169,"style":169},"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",[22,18634,18635,18641,18645,18649,18654,18661,18665,18678,18682,18687,18694,18698,18711,18715,18719,18723,18727,18735,18739,18747,18751,18755,18763,18767,18772,18776,18783,18787,18800,18804,18812],{"__ignoreMap":169},[252,18636,18637,18639],{"class":254,"line":255},[252,18638,14834],{"class":258},[252,18640,15311],{"class":2102},[252,18642,18643],{"class":254,"line":170},[252,18644,1685],{"class":262},[252,18646,18647],{"class":254,"line":1318},[252,18648,14856],{"class":258},[252,18650,18651],{"class":254,"line":1333},[252,18652,18653],{"class":321},"    \u002F\u002F构造函数\n",[252,18655,18656,18659],{"class":254,"line":1339},[252,18657,18658],{"class":2102},"    Person",[252,18660,2115],{"class":262},[252,18662,18663],{"class":254,"line":1353},[252,18664,2169],{"class":262},[252,18666,18667,18669,18671,18674,18676],{"class":254,"line":1359},[252,18668,9809],{"class":262},[252,18670,1307],{"class":258},[252,18672,18673],{"class":367}," \"Person的构造函数调用\"",[252,18675,1583],{"class":258},[252,18677,8980],{"class":262},[252,18679,18680],{"class":254,"line":1450},[252,18681,2326],{"class":262},[252,18683,18684],{"class":254,"line":1456},[252,18685,18686],{"class":321},"    \u002F\u002F析构函数\n",[252,18688,18689,18692],{"class":254,"line":1468},[252,18690,18691],{"class":2102},"    ~Person",[252,18693,2115],{"class":262},[252,18695,18696],{"class":254,"line":1751},[252,18697,2169],{"class":262},[252,18699,18700,18702,18704,18707,18709],{"class":254,"line":1756},[252,18701,9809],{"class":262},[252,18703,1307],{"class":258},[252,18705,18706],{"class":367}," \"Person的析构函数调用\"",[252,18708,1583],{"class":258},[252,18710,8980],{"class":262},[252,18712,18713],{"class":254,"line":1762},[252,18714,2326],{"class":262},[252,18716,18717],{"class":254,"line":1767},[252,18718,2539],{"emptyLinePlaceholder":181},[252,18720,18721],{"class":254,"line":1781},[252,18722,4134],{"class":262},[252,18724,18725],{"class":254,"line":1786},[252,18726,2539],{"emptyLinePlaceholder":181},[252,18728,18729,18731,18733],{"class":254,"line":1792},[252,18730,5504],{"class":258},[252,18732,5728],{"class":2102},[252,18734,2115],{"class":262},[252,18736,18737],{"class":254,"line":1813},[252,18738,1685],{"class":262},[252,18740,18741,18744],{"class":254,"line":1818},[252,18742,18743],{"class":262},"    Person p;",[252,18745,18746],{"class":321},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[252,18748,18749],{"class":254,"line":1832},[252,18750,1704],{"class":262},[252,18752,18753],{"class":254,"line":1837},[252,18754,2539],{"emptyLinePlaceholder":181},[252,18756,18757,18759,18761],{"class":254,"line":1866},[252,18758,266],{"class":258},[252,18760,2112],{"class":2102},[252,18762,10993],{"class":262},[252,18764,18765],{"class":254,"line":1871},[252,18766,13350],{"class":262},[252,18768,18769],{"class":254,"line":1888},[252,18770,18771],{"class":321},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[252,18773,18774],{"class":254,"line":1893},[252,18775,2539],{"emptyLinePlaceholder":181},[252,18777,18778,18780],{"class":254,"line":1898},[252,18779,18743],{"class":262},[252,18781,18782],{"class":321},"\u002F\u002F只有构造函数\n",[252,18784,18785],{"class":254,"line":1903},[252,18786,2539],{"emptyLinePlaceholder":181},[252,18788,18789,18791,18793,18795,18797],{"class":254,"line":1917},[252,18790,2442],{"class":2102},[252,18792,263],{"class":262},[252,18794,2447],{"class":367},[252,18796,6106],{"class":262},[252,18798,18799],{"class":321},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[252,18801,18802],{"class":254,"line":1922},[252,18803,2539],{"emptyLinePlaceholder":181},[252,18805,18806,18808,18810],{"class":254,"line":2716},[252,18807,4229],{"class":258},[252,18809,4232],{"class":311},[252,18811,1429],{"class":262},[252,18813,18814],{"class":254,"line":2730},[252,18815,1704],{"class":262},[19,18817,18818],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[224,18820,18822],{"id":18821},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,18824,18825],{},"两种分类方式：",[19,18827,18828],{},"​\t按参数分为： 有参构造和无参构造",[19,18830,18831],{},"​\t按类型分为： 普通构造和拷贝构造",[19,18833,18834],{},"三种调用方式：",[19,18836,18837],{},"​\t括号法",[19,18839,18840],{},"​\t显示法",[19,18842,18843],{},"​\t隐式转换法",[244,18845,18847],{"className":246,"code":18846,"language":248,"meta":169,"style":169},"#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",[22,18848,18849,18855,18865,18870,18875,18880,18885,18889,18897,18901,18905,18909,18915,18919,18932,18936,18948,18952,18961,18974,18978,18982,18988,18992,19005,19009,19014,19030,19034,19039,19048,19061,19065,19071,19075,19080,19088,19092,19097,19101,19109,19113,19118,19123,19128,19133,19138,19142,19147,19152,19157,19162,19166,19171,19176,19192,19204,19209,19213,19218,19223,19228,19232,19237,19251,19264,19268,19276,19280,19286,19292,19300],{"__ignoreMap":169},[252,18850,18851,18853],{"class":254,"line":255},[252,18852,2088],{"class":258},[252,18854,2091],{"class":367},[252,18856,18857,18859,18861,18863],{"class":254,"line":170},[252,18858,2096],{"class":258},[252,18860,2099],{"class":258},[252,18862,2103],{"class":2102},[252,18864,1429],{"class":262},[252,18866,18867],{"class":254,"line":1318},[252,18868,18869],{"class":321},"\u002F\u002F1.构造函数的分类及调用\n",[252,18871,18872],{"class":254,"line":1333},[252,18873,18874],{"class":321},"\u002F\u002F分类\n",[252,18876,18877],{"class":254,"line":1339},[252,18878,18879],{"class":321},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[252,18881,18882],{"class":254,"line":1353},[252,18883,18884],{"class":321},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[252,18886,18887],{"class":254,"line":1359},[252,18888,2539],{"emptyLinePlaceholder":181},[252,18890,18891,18893,18895],{"class":254,"line":1450},[252,18892,14834],{"class":258},[252,18894,15709],{"class":2102},[252,18896,2813],{"class":262},[252,18898,18899],{"class":254,"line":1456},[252,18900,1685],{"class":262},[252,18902,18903],{"class":254,"line":1468},[252,18904,14856],{"class":258},[252,18906,18907],{"class":254,"line":1751},[252,18908,18653],{"class":321},[252,18910,18911,18913],{"class":254,"line":1756},[252,18912,18658],{"class":2102},[252,18914,2115],{"class":262},[252,18916,18917],{"class":254,"line":1762},[252,18918,2169],{"class":262},[252,18920,18921,18923,18925,18928,18930],{"class":254,"line":1767},[252,18922,3590],{"class":262},[252,18924,1307],{"class":258},[252,18926,18927],{"class":367},"\"Person构造函数无参构造\"",[252,18929,1307],{"class":258},[252,18931,1330],{"class":262},[252,18933,18934],{"class":254,"line":1781},[252,18935,2326],{"class":262},[252,18937,18938,18940,18942,18944,18946],{"class":254,"line":1786},[252,18939,18658],{"class":2102},[252,18941,263],{"class":262},[252,18943,266],{"class":258},[252,18945,1537],{"class":5356},[252,18947,269],{"class":262},[252,18949,18950],{"class":254,"line":1792},[252,18951,2169],{"class":262},[252,18953,18954,18957,18959],{"class":254,"line":1813},[252,18955,18956],{"class":262},"        age",[252,18958,308],{"class":258},[252,18960,6337],{"class":262},[252,18962,18963,18965,18967,18970,18972],{"class":254,"line":1818},[252,18964,3590],{"class":262},[252,18966,1307],{"class":258},[252,18968,18969],{"class":367},"\"Person构造函数有参构造\"",[252,18971,1307],{"class":258},[252,18973,1330],{"class":262},[252,18975,18976],{"class":254,"line":1832},[252,18977,2326],{"class":262},[252,18979,18980],{"class":254,"line":1837},[252,18981,18686],{"class":321},[252,18983,18984,18986],{"class":254,"line":1866},[252,18985,18691],{"class":2102},[252,18987,2115],{"class":262},[252,18989,18990],{"class":254,"line":1871},[252,18991,2169],{"class":262},[252,18993,18994,18996,18998,19001,19003],{"class":254,"line":1888},[252,18995,3590],{"class":262},[252,18997,1307],{"class":258},[252,18999,19000],{"class":367},"\"Person析构函数被调用\"",[252,19002,1307],{"class":258},[252,19004,1330],{"class":262},[252,19006,19007],{"class":254,"line":1893},[252,19008,2326],{"class":262},[252,19010,19011],{"class":254,"line":1898},[252,19012,19013],{"class":321},"    \u002F\u002F拷贝构造函数\n",[252,19015,19016,19018,19020,19022,19024,19026,19028],{"class":254,"line":1903},[252,19017,18658],{"class":2102},[252,19019,263],{"class":262},[252,19021,6932],{"class":258},[252,19023,15709],{"class":2102},[252,19025,10724],{"class":258},[252,19027,19],{"class":5356},[252,19029,269],{"class":262},[252,19031,19032],{"class":254,"line":1917},[252,19033,2169],{"class":262},[252,19035,19036],{"class":254,"line":1922},[252,19037,19038],{"class":321},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[252,19040,19041,19043,19045],{"class":254,"line":2716},[252,19042,18956],{"class":262},[252,19044,308],{"class":258},[252,19046,19047],{"class":262},"p.age;\n",[252,19049,19050,19052,19054,19057,19059],{"class":254,"line":2730},[252,19051,3590],{"class":262},[252,19053,1307],{"class":258},[252,19055,19056],{"class":367},"\"Person拷贝构造函数被调用\"",[252,19058,1307],{"class":258},[252,19060,1330],{"class":262},[252,19062,19063],{"class":254,"line":2738},[252,19064,2326],{"class":262},[252,19066,19067,19069],{"class":254,"line":2743},[252,19068,2124],{"class":258},[252,19070,7937],{"class":262},[252,19072,19073],{"class":254,"line":2749},[252,19074,4134],{"class":262},[252,19076,19077],{"class":254,"line":2755},[252,19078,19079],{"class":321},"\u002F\u002F调用\n",[252,19081,19082,19084,19086],{"class":254,"line":2760},[252,19083,5504],{"class":258},[252,19085,5728],{"class":2102},[252,19087,2115],{"class":262},[252,19089,19090],{"class":254,"line":8088},[252,19091,1685],{"class":262},[252,19093,19094],{"class":254,"line":8112},[252,19095,19096],{"class":321},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[252,19098,19099],{"class":254,"line":8117},[252,19100,1704],{"class":262},[252,19102,19103,19105,19107],{"class":254,"line":8123},[252,19104,5504],{"class":258},[252,19106,5797],{"class":2102},[252,19108,2115],{"class":262},[252,19110,19111],{"class":254,"line":8150},[252,19112,1685],{"class":262},[252,19114,19115],{"class":254,"line":8155},[252,19116,19117],{"class":321},"    \u002F\u002F1.括号法\n",[252,19119,19120],{"class":254,"line":8161},[252,19121,19122],{"class":321},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[252,19124,19125],{"class":254,"line":8173},[252,19126,19127],{"class":321},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[252,19129,19130],{"class":254,"line":8185},[252,19131,19132],{"class":321},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[252,19134,19135],{"class":254,"line":8197},[252,19136,19137],{"class":321},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[252,19139,19140],{"class":254,"line":9856},[252,19141,2539],{"emptyLinePlaceholder":181},[252,19143,19144],{"class":254,"line":9881},[252,19145,19146],{"class":321},"    \u002F\u002F注意事项\n",[252,19148,19149],{"class":254,"line":9904},[252,19150,19151],{"class":321},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[252,19153,19154],{"class":254,"line":9928},[252,19155,19156],{"class":321},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[252,19158,19159],{"class":254,"line":9933},[252,19160,19161],{"class":321},"    \u002F\u002F Person p4();\n",[252,19163,19164],{"class":254,"line":9938},[252,19165,2539],{"emptyLinePlaceholder":181},[252,19167,19168],{"class":254,"line":9943},[252,19169,19170],{"class":321},"    \u002F\u002F2.显示法\n",[252,19172,19173],{"class":254,"line":9952},[252,19174,19175],{"class":262},"    Person p1;\n",[252,19177,19178,19181,19183,19186,19188,19190],{"class":254,"line":9957},[252,19179,19180],{"class":262},"    Person p2",[252,19182,308],{"class":258},[252,19184,19185],{"class":2102},"Person",[252,19187,263],{"class":262},[252,19189,709],{"class":311},[252,19191,2858],{"class":262},[252,19193,19194,19197,19199,19201],{"class":254,"line":9963},[252,19195,19196],{"class":262},"    Person p3",[252,19198,308],{"class":258},[252,19200,19185],{"class":2102},[252,19202,19203],{"class":262},"(p2);\n",[252,19205,19206],{"class":254,"line":9984},[252,19207,19208],{"class":321},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[252,19210,19211],{"class":254,"line":9990},[252,19212,2539],{"emptyLinePlaceholder":181},[252,19214,19215],{"class":254,"line":10004},[252,19216,19217],{"class":321},"    \u002F\u002F 注意事项2\n",[252,19219,19220],{"class":254,"line":10010},[252,19221,19222],{"class":321},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[252,19224,19225],{"class":254,"line":10037},[252,19226,19227],{"class":321},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[252,19229,19230],{"class":254,"line":10046},[252,19231,2539],{"emptyLinePlaceholder":181},[252,19233,19234],{"class":254,"line":10052},[252,19235,19236],{"class":321},"    \u002F\u002F3.隐士转换法\n",[252,19238,19239,19242,19244,19246,19248],{"class":254,"line":10060},[252,19240,19241],{"class":262},"    Person p4",[252,19243,308],{"class":258},[252,19245,709],{"class":311},[252,19247,318],{"class":262},[252,19249,19250],{"class":321},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[252,19252,19253,19256,19258,19261],{"class":254,"line":10065},[252,19254,19255],{"class":262},"    Person p5",[252,19257,308],{"class":258},[252,19259,19260],{"class":262},"p4;",[252,19262,19263],{"class":321}," \u002F\u002F 这里会调用拷贝构造函数\n",[252,19265,19266],{"class":254,"line":16744},[252,19267,1704],{"class":262},[252,19269,19270,19272,19274],{"class":254,"line":16750},[252,19271,266],{"class":258},[252,19273,2112],{"class":2102},[252,19275,2115],{"class":262},[252,19277,19278],{"class":254,"line":16773},[252,19279,1685],{"class":262},[252,19281,19282,19284],{"class":254,"line":16779},[252,19283,5773],{"class":2102},[252,19285,5776],{"class":262},[252,19287,19288,19290],{"class":254,"line":16802},[252,19289,5842],{"class":2102},[252,19291,5776],{"class":262},[252,19293,19294,19296,19298],{"class":254,"line":16816},[252,19295,4229],{"class":258},[252,19297,4232],{"class":311},[252,19299,1429],{"class":262},[252,19301,19302],{"class":254,"line":16836},[252,19303,1704],{"class":262},[19,19305,19306,19309],{},[412,19307,19308],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[224,19311,19313],{"id":19312},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19315,19316],{},"C++中拷贝构造函数调用时机通常有三种情况",[1270,19318,19319,19322,19325],{},[210,19320,19321],{},"使用一个已经创建完毕的对象来初始化一个新对象",[210,19323,19324],{},"值传递的方式给函数参数传值",[210,19326,19327],{},"以值方式返回局部对象",[244,19329,19331],{"className":246,"code":19330,"language":248,"meta":169,"style":169},"#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",[22,19332,19333,19339,19349,19353,19358,19362,19367,19372,19377,19383,19387,19391,19397,19401,19414,19418,19423,19435,19439,19447,19460,19464,19468,19484,19488,19497,19510,19514,19520,19524,19536,19540,19546,19550,19554,19562,19566,19579,19587,19605,19609,19614,19619,19634,19638,19651,19655,19663,19667,19671,19679,19683,19688,19697,19701,19705,19730,19740,19744,19752,19756,19767,19792,19796,19800,19804,19812,19816,19821,19826,19833,19838,19843,19848,19853,19857,19862,19866,19871,19875,19880,19885,19889,19893,19898,19903,19911],{"__ignoreMap":169},[252,19334,19335,19337],{"class":254,"line":255},[252,19336,2088],{"class":258},[252,19338,2091],{"class":367},[252,19340,19341,19343,19345,19347],{"class":254,"line":170},[252,19342,2096],{"class":258},[252,19344,2099],{"class":258},[252,19346,2103],{"class":2102},[252,19348,1429],{"class":262},[252,19350,19351],{"class":254,"line":1318},[252,19352,2539],{"emptyLinePlaceholder":181},[252,19354,19355],{"class":254,"line":1333},[252,19356,19357],{"class":321},"\u002F\u002F拷贝构造函数调用时机\n",[252,19359,19360],{"class":254,"line":1339},[252,19361,2539],{"emptyLinePlaceholder":181},[252,19363,19364],{"class":254,"line":1353},[252,19365,19366],{"class":321},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[252,19368,19369],{"class":254,"line":1359},[252,19370,19371],{"class":321},"\u002F\u002F2.值传递的方式给函数参数传值\n",[252,19373,19374],{"class":254,"line":1450},[252,19375,19376],{"class":321},"\u002F\u002F3.以值方式返回局部对象\n",[252,19378,19379,19381],{"class":254,"line":1456},[252,19380,14834],{"class":258},[252,19382,15311],{"class":2102},[252,19384,19385],{"class":254,"line":1468},[252,19386,1685],{"class":262},[252,19388,19389],{"class":254,"line":1751},[252,19390,14856],{"class":258},[252,19392,19393,19395],{"class":254,"line":1756},[252,19394,18658],{"class":2102},[252,19396,2115],{"class":262},[252,19398,19399],{"class":254,"line":1762},[252,19400,2169],{"class":262},[252,19402,19403,19405,19407,19410,19412],{"class":254,"line":1767},[252,19404,9809],{"class":262},[252,19406,1307],{"class":258},[252,19408,19409],{"class":367}," \"Person的默认构造函数调用\"",[252,19411,1583],{"class":258},[252,19413,8980],{"class":262},[252,19415,19416],{"class":254,"line":1781},[252,19417,2326],{"class":262},[252,19419,19420],{"class":254,"line":1786},[252,19421,19422],{"class":321},"    \u002F\u002F有参构造\n",[252,19424,19425,19427,19429,19431,19433],{"class":254,"line":1792},[252,19426,18658],{"class":2102},[252,19428,263],{"class":262},[252,19430,266],{"class":258},[252,19432,15829],{"class":5356},[252,19434,269],{"class":262},[252,19436,19437],{"class":254,"line":1813},[252,19438,2169],{"class":262},[252,19440,19441,19443,19445],{"class":254,"line":1818},[252,19442,15883],{"class":262},[252,19444,308],{"class":258},[252,19446,7937],{"class":262},[252,19448,19449,19451,19453,19456,19458],{"class":254,"line":1832},[252,19450,9809],{"class":262},[252,19452,1307],{"class":258},[252,19454,19455],{"class":367}," \"Person的有参构造函数调用\"",[252,19457,1583],{"class":258},[252,19459,8980],{"class":262},[252,19461,19462],{"class":254,"line":1837},[252,19463,2326],{"class":262},[252,19465,19466],{"class":254,"line":1866},[252,19467,19013],{"class":321},[252,19469,19470,19472,19474,19476,19478,19480,19482],{"class":254,"line":1871},[252,19471,18658],{"class":2102},[252,19473,263],{"class":262},[252,19475,6932],{"class":258},[252,19477,15709],{"class":2102},[252,19479,10724],{"class":258},[252,19481,19],{"class":5356},[252,19483,269],{"class":262},[252,19485,19486],{"class":254,"line":1888},[252,19487,2169],{"class":262},[252,19489,19490,19492,19494],{"class":254,"line":1893},[252,19491,15883],{"class":262},[252,19493,308],{"class":258},[252,19495,19496],{"class":262}," p.m_Age;\n",[252,19498,19499,19501,19503,19506,19508],{"class":254,"line":1898},[252,19500,9809],{"class":262},[252,19502,1307],{"class":258},[252,19504,19505],{"class":367}," \"Person的拷贝构造函数调用\"",[252,19507,1583],{"class":258},[252,19509,8980],{"class":262},[252,19511,19512],{"class":254,"line":1903},[252,19513,2326],{"class":262},[252,19515,19516,19518],{"class":254,"line":1917},[252,19517,18691],{"class":2102},[252,19519,2115],{"class":262},[252,19521,19522],{"class":254,"line":1922},[252,19523,2169],{"class":262},[252,19525,19526,19528,19530,19532,19534],{"class":254,"line":2716},[252,19527,9809],{"class":262},[252,19529,1307],{"class":258},[252,19531,18706],{"class":367},[252,19533,1583],{"class":258},[252,19535,8980],{"class":262},[252,19537,19538],{"class":254,"line":2730},[252,19539,2326],{"class":262},[252,19541,19542,19544],{"class":254,"line":2738},[252,19543,2124],{"class":258},[252,19545,15806],{"class":262},[252,19547,19548],{"class":254,"line":2743},[252,19549,4134],{"class":262},[252,19551,19552],{"class":254,"line":2749},[252,19553,19366],{"class":321},[252,19555,19556,19558,19560],{"class":254,"line":2755},[252,19557,5504],{"class":258},[252,19559,5728],{"class":2102},[252,19561,2115],{"class":262},[252,19563,19564],{"class":254,"line":2760},[252,19565,1685],{"class":262},[252,19567,19568,19571,19573,19575,19577],{"class":254,"line":8088},[252,19569,19570],{"class":262},"    Person ",[252,19572,7270],{"class":2102},[252,19574,263],{"class":262},[252,19576,963],{"class":311},[252,19578,2858],{"class":262},[252,19580,19581,19583,19585],{"class":254,"line":8112},[252,19582,19570],{"class":262},[252,19584,7173],{"class":2102},[252,19586,17655],{"class":262},[252,19588,19589,19591,19593,19596,19598,19601,19603],{"class":254,"line":8117},[252,19590,1690],{"class":262},[252,19592,1307],{"class":258},[252,19594,19595],{"class":367},"\"P2的年龄为：\"",[252,19597,1307],{"class":258},[252,19599,19600],{"class":262},"p2.m_Age",[252,19602,1307],{"class":258},[252,19604,1330],{"class":262},[252,19606,19607],{"class":254,"line":8123},[252,19608,1704],{"class":262},[252,19610,19611],{"class":254,"line":8150},[252,19612,19613],{"class":321},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[252,19615,19616],{"class":254,"line":8155},[252,19617,19618],{"class":321},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[252,19620,19621,19623,19626,19628,19630,19632],{"class":254,"line":8161},[252,19622,5504],{"class":258},[252,19624,19625],{"class":2102}," doWork",[252,19627,263],{"class":262},[252,19629,19185],{"class":2102},[252,19631,6965],{"class":5356},[252,19633,269],{"class":262},[252,19635,19636],{"class":254,"line":8173},[252,19637,1685],{"class":262},[252,19639,19640,19642,19644,19647,19649],{"class":254,"line":8185},[252,19641,6669],{"class":262},[252,19643,1307],{"class":258},[252,19645,19646],{"class":367}," \"doWork函数调用\"",[252,19648,1583],{"class":258},[252,19650,8980],{"class":262},[252,19652,19653],{"class":254,"line":8197},[252,19654,1704],{"class":262},[252,19656,19657,19659,19661],{"class":254,"line":9856},[252,19658,5504],{"class":258},[252,19660,5797],{"class":2102},[252,19662,2115],{"class":262},[252,19664,19665],{"class":254,"line":9881},[252,19666,1685],{"class":262},[252,19668,19669],{"class":254,"line":9904},[252,19670,15453],{"class":262},[252,19672,19673,19676],{"class":254,"line":9928},[252,19674,19675],{"class":2102},"    doWork",[252,19677,19678],{"class":262},"(p);\n",[252,19680,19681],{"class":254,"line":9933},[252,19682,1704],{"class":262},[252,19684,19685],{"class":254,"line":9938},[252,19686,19687],{"class":321},"\u002F\u002F 3.以值方式返回局部对象\n",[252,19689,19690,19692,19695],{"class":254,"line":9943},[252,19691,19185],{"class":2102},[252,19693,19694],{"class":2102}," doWork2",[252,19696,2115],{"class":262},[252,19698,19699],{"class":254,"line":9952},[252,19700,1685],{"class":262},[252,19702,19703],{"class":254,"line":9957},[252,19704,19175],{"class":262},[252,19706,19707,19709,19711,19713,19715,19717,19719,19721,19723,19725,19727],{"class":254,"line":9963},[252,19708,1690],{"class":262},[252,19710,1307],{"class":258},[252,19712,263],{"class":262},[252,19714,266],{"class":258},[252,19716,6658],{"class":258},[252,19718,692],{"class":262},[252,19720,616],{"class":258},[252,19722,7270],{"class":262},[252,19724,1307],{"class":258},[252,19726,1377],{"class":262},[252,19728,19729],{"class":321},"\u002F\u002F打印p1的地址\n",[252,19731,19732,19734,19737],{"class":254,"line":9984},[252,19733,4229],{"class":258},[252,19735,19736],{"class":262}," p1;",[252,19738,19739],{"class":321},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[252,19741,19742],{"class":254,"line":9990},[252,19743,1704],{"class":262},[252,19745,19746,19748,19750],{"class":254,"line":10004},[252,19747,5504],{"class":258},[252,19749,5869],{"class":2102},[252,19751,2115],{"class":262},[252,19753,19754],{"class":254,"line":10010},[252,19755,1685],{"class":262},[252,19757,19758,19761,19763,19765],{"class":254,"line":10037},[252,19759,19760],{"class":262},"    Person p ",[252,19762,308],{"class":258},[252,19764,19694],{"class":2102},[252,19766,5776],{"class":262},[252,19768,19769,19771,19773,19775,19777,19779,19781,19783,19785,19787,19789],{"class":254,"line":10046},[252,19770,1690],{"class":262},[252,19772,1307],{"class":258},[252,19774,263],{"class":262},[252,19776,266],{"class":258},[252,19778,6658],{"class":258},[252,19780,692],{"class":262},[252,19782,616],{"class":258},[252,19784,19],{"class":262},[252,19786,1307],{"class":258},[252,19788,1377],{"class":262},[252,19790,19791],{"class":321},"\u002F\u002F打印p的地址\n",[252,19793,19794],{"class":254,"line":10052},[252,19795,1704],{"class":262},[252,19797,19798],{"class":254,"line":10060},[252,19799,2539],{"emptyLinePlaceholder":181},[252,19801,19802],{"class":254,"line":10065},[252,19803,2539],{"emptyLinePlaceholder":181},[252,19805,19806,19808,19810],{"class":254,"line":16744},[252,19807,266],{"class":258},[252,19809,2112],{"class":2102},[252,19811,2115],{"class":262},[252,19813,19814],{"class":254,"line":16750},[252,19815,1685],{"class":262},[252,19817,19818],{"class":254,"line":16773},[252,19819,19820],{"class":321},"    \u002F\u002F test01();\n",[252,19822,19823],{"class":254,"line":16779},[252,19824,19825],{"class":321},"    \u002F\u002F test02();\n",[252,19827,19828,19831],{"class":254,"line":16802},[252,19829,19830],{"class":2102},"    test03",[252,19832,5776],{"class":262},[252,19834,19835],{"class":254,"line":16816},[252,19836,19837],{"class":321},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[252,19839,19840],{"class":254,"line":16836},[252,19841,19842],{"class":321},"\u002F\u002F 输出结果如下：\n",[252,19844,19845],{"class":254,"line":16842},[252,19846,19847],{"class":321},"\u002F\u002F Person的默认构造函数调用\n",[252,19849,19850],{"class":254,"line":16853},[252,19851,19852],{"class":321},"\u002F\u002F 0x7fffffffceec\n",[252,19854,19855],{"class":254,"line":16876},[252,19856,19852],{"class":321},[252,19858,19859],{"class":254,"line":16898},[252,19860,19861],{"class":321},"\u002F\u002F Person的析构函数调用\n",[252,19863,19864],{"class":254,"line":16903},[252,19865,2539],{"emptyLinePlaceholder":181},[252,19867,19868],{"class":254,"line":16909},[252,19869,19870],{"class":321},"\u002F\u002F 之前的输出结果如下：\n",[252,19872,19873],{"class":254,"line":16923},[252,19874,19847],{"class":321},[252,19876,19877],{"class":254,"line":16936},[252,19878,19879],{"class":321},"\u002F\u002F 地址\n",[252,19881,19882],{"class":254,"line":16941},[252,19883,19884],{"class":321},"\u002F\u002F Person的拷贝构造函数调用\n",[252,19886,19887],{"class":254,"line":16955},[252,19888,19861],{"class":321},[252,19890,19891],{"class":254,"line":16960},[252,19892,19879],{"class":321},[252,19894,19895],{"class":254,"line":16966},[252,19896,19897],{"class":321},"\u002F\u002F (这两次输出的地址也是不同的) \n",[252,19899,19900],{"class":254,"line":16971},[252,19901,19902],{"class":321},"\u002F\u002F Person的析构函数调用     \n",[252,19904,19905,19907,19909],{"class":254,"line":16985},[252,19906,4229],{"class":258},[252,19908,4232],{"class":311},[252,19910,1429],{"class":262},[252,19912,19913],{"class":254,"line":16990},[252,19914,1704],{"class":262},[19,19916,19917],{},"简化版理解",[244,19919,19921],{"className":246,"code":19920,"language":248,"meta":169,"style":169},"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",[22,19922,19923,19931,19935,19941,19954,19965,19969,19981,19994,20002,20006,20022,20035,20044,20048,20053,20059,20072,20076,20080,20087,20091,20095,20100,20108,20112,20128,20141,20154,20158,20163,20171,20175,20179,20184,20189,20205,20213,20220,20226,20230,20234,20239,20247,20251,20255,20278,20285,20289,20293,20301,20305,20315,20337,20341,20345,20349,20357,20361,20366,20371,20377,20381,20391,20395,20403],{"__ignoreMap":169},[252,19924,19925,19927,19929],{"class":254,"line":255},[252,19926,14834],{"class":258},[252,19928,15709],{"class":2102},[252,19930,15712],{"class":262},[252,19932,19933],{"class":254,"line":170},[252,19934,14856],{"class":258},[252,19936,19937,19939],{"class":254,"line":1318},[252,19938,18658],{"class":2102},[252,19940,10993],{"class":262},[252,19942,19943,19945,19947,19950,19952],{"class":254,"line":1333},[252,19944,9809],{"class":262},[252,19946,1307],{"class":258},[252,19948,19949],{"class":367}," \"无参构造函数!\"",[252,19951,1583],{"class":258},[252,19953,8980],{"class":262},[252,19955,19956,19959,19961,19963],{"class":254,"line":1339},[252,19957,19958],{"class":262},"        mAge ",[252,19960,308],{"class":258},[252,19962,4232],{"class":311},[252,19964,1429],{"class":262},[252,19966,19967],{"class":254,"line":1353},[252,19968,2326],{"class":262},[252,19970,19971,19973,19975,19977,19979],{"class":254,"line":1359},[252,19972,18658],{"class":2102},[252,19974,263],{"class":262},[252,19976,266],{"class":258},[252,19978,15829],{"class":5356},[252,19980,12582],{"class":262},[252,19982,19983,19985,19987,19990,19992],{"class":254,"line":1450},[252,19984,9809],{"class":262},[252,19986,1307],{"class":258},[252,19988,19989],{"class":367}," \"有参构造函数!\"",[252,19991,1583],{"class":258},[252,19993,8980],{"class":262},[252,19995,19996,19998,20000],{"class":254,"line":1456},[252,19997,19958],{"class":262},[252,19999,308],{"class":258},[252,20001,7937],{"class":262},[252,20003,20004],{"class":254,"line":1468},[252,20005,2326],{"class":262},[252,20007,20008,20010,20012,20014,20016,20018,20020],{"class":254,"line":1751},[252,20009,18658],{"class":2102},[252,20011,263],{"class":262},[252,20013,6932],{"class":258},[252,20015,15709],{"class":2102},[252,20017,616],{"class":258},[252,20019,6965],{"class":5356},[252,20021,12582],{"class":262},[252,20023,20024,20026,20028,20031,20033],{"class":254,"line":1756},[252,20025,9809],{"class":262},[252,20027,1307],{"class":258},[252,20029,20030],{"class":367}," \"拷贝构造函数!\"",[252,20032,1583],{"class":258},[252,20034,8980],{"class":262},[252,20036,20037,20039,20041],{"class":254,"line":1762},[252,20038,19958],{"class":262},[252,20040,308],{"class":258},[252,20042,20043],{"class":262}," p.mAge;\n",[252,20045,20046],{"class":254,"line":1767},[252,20047,2326],{"class":262},[252,20049,20050],{"class":254,"line":1781},[252,20051,20052],{"class":321},"    \u002F\u002F析构函数在释放内存之前调用\n",[252,20054,20055,20057],{"class":254,"line":1786},[252,20056,18691],{"class":2102},[252,20058,10993],{"class":262},[252,20060,20061,20063,20065,20068,20070],{"class":254,"line":1792},[252,20062,9809],{"class":262},[252,20064,1307],{"class":258},[252,20066,20067],{"class":367}," \"析构函数!\"",[252,20069,1583],{"class":258},[252,20071,8980],{"class":262},[252,20073,20074],{"class":254,"line":1813},[252,20075,2326],{"class":262},[252,20077,20078],{"class":254,"line":1818},[252,20079,14856],{"class":258},[252,20081,20082,20084],{"class":254,"line":1832},[252,20083,2124],{"class":258},[252,20085,20086],{"class":262}," mAge;\n",[252,20088,20089],{"class":254,"line":1837},[252,20090,4134],{"class":262},[252,20092,20093],{"class":254,"line":1866},[252,20094,2539],{"emptyLinePlaceholder":181},[252,20096,20097],{"class":254,"line":1871},[252,20098,20099],{"class":321},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[252,20101,20102,20104,20106],{"class":254,"line":1888},[252,20103,5504],{"class":258},[252,20105,5728],{"class":2102},[252,20107,10993],{"class":262},[252,20109,20110],{"class":254,"line":1893},[252,20111,2539],{"emptyLinePlaceholder":181},[252,20113,20114,20116,20119,20121,20123,20125],{"class":254,"line":1898},[252,20115,19570],{"class":262},[252,20117,20118],{"class":2102},"man",[252,20120,263],{"class":262},[252,20122,574],{"class":311},[252,20124,6106],{"class":262},[252,20126,20127],{"class":321}," \u002F\u002Fp对象已经创建完毕\n",[252,20129,20130,20132,20135,20138],{"class":254,"line":1903},[252,20131,19570],{"class":262},[252,20133,20134],{"class":2102},"newman",[252,20136,20137],{"class":262},"(man);",[252,20139,20140],{"class":321}," \u002F\u002F调用拷贝构造函数\n",[252,20142,20143,20146,20148,20151],{"class":254,"line":1917},[252,20144,20145],{"class":262},"    Person newman2 ",[252,20147,308],{"class":258},[252,20149,20150],{"class":262}," man;",[252,20152,20153],{"class":321}," \u002F\u002F拷贝构造\n",[252,20155,20156],{"class":254,"line":1922},[252,20157,2539],{"emptyLinePlaceholder":181},[252,20159,20160],{"class":254,"line":2716},[252,20161,20162],{"class":321},"    \u002F\u002FPerson newman3;\n",[252,20164,20165,20168],{"class":254,"line":2730},[252,20166,20167],{"class":321},"    \u002F\u002Fnewman3 = man;",[252,20169,20170],{"class":321}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[252,20172,20173],{"class":254,"line":2738},[252,20174,1704],{"class":262},[252,20176,20177],{"class":254,"line":2743},[252,20178,2539],{"emptyLinePlaceholder":181},[252,20180,20181],{"class":254,"line":2749},[252,20182,20183],{"class":321},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[252,20185,20186],{"class":254,"line":2755},[252,20187,20188],{"class":321},"\u002F\u002F相当于Person p1 = p;\n",[252,20190,20191,20193,20195,20197,20199,20202],{"class":254,"line":2760},[252,20192,5504],{"class":258},[252,20194,19625],{"class":2102},[252,20196,263],{"class":262},[252,20198,19185],{"class":2102},[252,20200,20201],{"class":5356}," p1",[252,20203,20204],{"class":262},") {}\n",[252,20206,20207,20209,20211],{"class":254,"line":8088},[252,20208,5504],{"class":258},[252,20210,5797],{"class":2102},[252,20212,10993],{"class":262},[252,20214,20215,20217],{"class":254,"line":8112},[252,20216,18743],{"class":262},[252,20218,20219],{"class":321}," \u002F\u002F无参构造函数\n",[252,20221,20222,20224],{"class":254,"line":8117},[252,20223,19675],{"class":2102},[252,20225,19678],{"class":262},[252,20227,20228],{"class":254,"line":8123},[252,20229,1704],{"class":262},[252,20231,20232],{"class":254,"line":8150},[252,20233,2539],{"emptyLinePlaceholder":181},[252,20235,20236],{"class":254,"line":8155},[252,20237,20238],{"class":321},"\u002F\u002F3. 以值方式返回局部对象\n",[252,20240,20241,20243,20245],{"class":254,"line":8161},[252,20242,19185],{"class":2102},[252,20244,19694],{"class":2102},[252,20246,2115],{"class":262},[252,20248,20249],{"class":254,"line":8173},[252,20250,1685],{"class":262},[252,20252,20253],{"class":254,"line":8185},[252,20254,19175],{"class":262},[252,20256,20257,20259,20261,20263,20265,20267,20269,20271,20274,20276],{"class":254,"line":8197},[252,20258,6669],{"class":262},[252,20260,1307],{"class":258},[252,20262,1797],{"class":262},[252,20264,266],{"class":258},[252,20266,6658],{"class":258},[252,20268,692],{"class":262},[252,20270,616],{"class":258},[252,20272,20273],{"class":262},"p1 ",[252,20275,1307],{"class":258},[252,20277,8980],{"class":262},[252,20279,20280,20282],{"class":254,"line":9856},[252,20281,4229],{"class":258},[252,20283,20284],{"class":262}," p1;\n",[252,20286,20287],{"class":254,"line":9881},[252,20288,1704],{"class":262},[252,20290,20291],{"class":254,"line":9904},[252,20292,2539],{"emptyLinePlaceholder":181},[252,20294,20295,20297,20299],{"class":254,"line":9928},[252,20296,5504],{"class":258},[252,20298,5869],{"class":2102},[252,20300,2115],{"class":262},[252,20302,20303],{"class":254,"line":9933},[252,20304,1685],{"class":262},[252,20306,20307,20309,20311,20313],{"class":254,"line":9938},[252,20308,19760],{"class":262},[252,20310,308],{"class":258},[252,20312,19694],{"class":2102},[252,20314,5776],{"class":262},[252,20316,20317,20319,20321,20323,20325,20327,20329,20331,20333,20335],{"class":254,"line":9943},[252,20318,6669],{"class":262},[252,20320,1307],{"class":258},[252,20322,1797],{"class":262},[252,20324,266],{"class":258},[252,20326,6658],{"class":258},[252,20328,692],{"class":262},[252,20330,616],{"class":258},[252,20332,11588],{"class":262},[252,20334,1307],{"class":258},[252,20336,8980],{"class":262},[252,20338,20339],{"class":254,"line":9952},[252,20340,1704],{"class":262},[252,20342,20343],{"class":254,"line":9957},[252,20344,2539],{"emptyLinePlaceholder":181},[252,20346,20347],{"class":254,"line":9963},[252,20348,2539],{"emptyLinePlaceholder":181},[252,20350,20351,20353,20355],{"class":254,"line":9984},[252,20352,266],{"class":258},[252,20354,2112],{"class":2102},[252,20356,10993],{"class":262},[252,20358,20359],{"class":254,"line":9990},[252,20360,2539],{"emptyLinePlaceholder":181},[252,20362,20363],{"class":254,"line":10004},[252,20364,20365],{"class":321},"    \u002F\u002Ftest01();\n",[252,20367,20368],{"class":254,"line":10010},[252,20369,20370],{"class":321},"    \u002F\u002Ftest02();\n",[252,20372,20373,20375],{"class":254,"line":10037},[252,20374,19830],{"class":2102},[252,20376,5776],{"class":262},[252,20378,20379],{"class":254,"line":10046},[252,20380,2539],{"emptyLinePlaceholder":181},[252,20382,20383,20385,20387,20389],{"class":254,"line":10052},[252,20384,2442],{"class":2102},[252,20386,263],{"class":262},[252,20388,2447],{"class":367},[252,20390,2858],{"class":262},[252,20392,20393],{"class":254,"line":10060},[252,20394,2539],{"emptyLinePlaceholder":181},[252,20396,20397,20399,20401],{"class":254,"line":10065},[252,20398,4229],{"class":258},[252,20400,4232],{"class":311},[252,20402,1429],{"class":262},[252,20404,20405],{"class":254,"line":16744},[252,20406,1704],{"class":262},[224,20408,20410],{"id":20409},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20412,20413],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20415,20416],{},"1．默认构造函数(无参，函数体为空)",[19,20418,20419],{},"2．默认析构函数(无参，函数体为空)",[19,20421,20422],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20424,20425],{},"构造函数调用规则如下：",[1270,20427,20428,20431],{},[210,20429,20430],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[210,20432,20433],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[244,20435,20437],{"className":246,"code":20436,"language":248,"meta":169,"style":169},"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",[22,20438,20439,20447,20451,20456,20462,20474,20478,20483,20495,20504,20516,20520,20524,20540,20549,20561,20565,20569,20575,20587,20591,20595,20601,20605,20609,20617,20621,20633,20638,20646,20650,20668,20672,20676,20684,20688,20693,20701,20716,20729,20733,20738,20745,20761,20774,20778,20782,20790,20794,20800,20804,20814,20818,20826],{"__ignoreMap":169},[252,20440,20441,20443,20445],{"class":254,"line":255},[252,20442,14834],{"class":258},[252,20444,15709],{"class":2102},[252,20446,15712],{"class":262},[252,20448,20449],{"class":254,"line":170},[252,20450,14856],{"class":258},[252,20452,20453],{"class":254,"line":1318},[252,20454,20455],{"class":321},"    \u002F\u002F无参（默认）构造函数\n",[252,20457,20458,20460],{"class":254,"line":1333},[252,20459,18658],{"class":2102},[252,20461,10993],{"class":262},[252,20463,20464,20466,20468,20470,20472],{"class":254,"line":1339},[252,20465,9809],{"class":262},[252,20467,1307],{"class":258},[252,20469,19949],{"class":367},[252,20471,1583],{"class":258},[252,20473,8980],{"class":262},[252,20475,20476],{"class":254,"line":1353},[252,20477,2326],{"class":262},[252,20479,20480],{"class":254,"line":1359},[252,20481,20482],{"class":321},"    \u002F\u002F有参构造函数\n",[252,20484,20485,20487,20489,20491,20493],{"class":254,"line":1450},[252,20486,18658],{"class":2102},[252,20488,263],{"class":262},[252,20490,266],{"class":258},[252,20492,1537],{"class":5356},[252,20494,12582],{"class":262},[252,20496,20497,20500,20502],{"class":254,"line":1456},[252,20498,20499],{"class":262},"        age ",[252,20501,308],{"class":258},[252,20503,1571],{"class":262},[252,20505,20506,20508,20510,20512,20514],{"class":254,"line":1468},[252,20507,9809],{"class":262},[252,20509,1307],{"class":258},[252,20511,19989],{"class":367},[252,20513,1583],{"class":258},[252,20515,8980],{"class":262},[252,20517,20518],{"class":254,"line":1751},[252,20519,2326],{"class":262},[252,20521,20522],{"class":254,"line":1756},[252,20523,19013],{"class":321},[252,20525,20526,20528,20530,20532,20534,20536,20538],{"class":254,"line":1762},[252,20527,18658],{"class":2102},[252,20529,263],{"class":262},[252,20531,6932],{"class":258},[252,20533,15709],{"class":2102},[252,20535,616],{"class":258},[252,20537,6965],{"class":5356},[252,20539,12582],{"class":262},[252,20541,20542,20544,20546],{"class":254,"line":1767},[252,20543,20499],{"class":262},[252,20545,308],{"class":258},[252,20547,20548],{"class":262}," p.age;\n",[252,20550,20551,20553,20555,20557,20559],{"class":254,"line":1781},[252,20552,9809],{"class":262},[252,20554,1307],{"class":258},[252,20556,20030],{"class":367},[252,20558,1583],{"class":258},[252,20560,8980],{"class":262},[252,20562,20563],{"class":254,"line":1786},[252,20564,2326],{"class":262},[252,20566,20567],{"class":254,"line":1792},[252,20568,18686],{"class":321},[252,20570,20571,20573],{"class":254,"line":1813},[252,20572,18691],{"class":2102},[252,20574,10993],{"class":262},[252,20576,20577,20579,20581,20583,20585],{"class":254,"line":1818},[252,20578,9809],{"class":262},[252,20580,1307],{"class":258},[252,20582,20067],{"class":367},[252,20584,1583],{"class":258},[252,20586,8980],{"class":262},[252,20588,20589],{"class":254,"line":1832},[252,20590,2326],{"class":262},[252,20592,20593],{"class":254,"line":1837},[252,20594,14856],{"class":258},[252,20596,20597,20599],{"class":254,"line":1866},[252,20598,2124],{"class":258},[252,20600,7937],{"class":262},[252,20602,20603],{"class":254,"line":1871},[252,20604,4134],{"class":262},[252,20606,20607],{"class":254,"line":1888},[252,20608,2539],{"emptyLinePlaceholder":181},[252,20610,20611,20613,20615],{"class":254,"line":1893},[252,20612,5504],{"class":258},[252,20614,5728],{"class":2102},[252,20616,2115],{"class":262},[252,20618,20619],{"class":254,"line":1898},[252,20620,1685],{"class":262},[252,20622,20623,20625,20627,20629,20631],{"class":254,"line":1903},[252,20624,19570],{"class":262},[252,20626,7270],{"class":2102},[252,20628,263],{"class":262},[252,20630,913],{"class":311},[252,20632,2858],{"class":262},[252,20634,20635],{"class":254,"line":1917},[252,20636,20637],{"class":321},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[252,20639,20640,20642,20644],{"class":254,"line":1922},[252,20641,19570],{"class":262},[252,20643,7173],{"class":2102},[252,20645,17655],{"class":262},[252,20647,20648],{"class":254,"line":2716},[252,20649,2539],{"emptyLinePlaceholder":181},[252,20651,20652,20654,20656,20659,20661,20664,20666],{"class":254,"line":2730},[252,20653,6669],{"class":262},[252,20655,1307],{"class":258},[252,20657,20658],{"class":367}," \"p2的年龄为： \"",[252,20660,1583],{"class":258},[252,20662,20663],{"class":262}," p2.age ",[252,20665,1307],{"class":258},[252,20667,8980],{"class":262},[252,20669,20670],{"class":254,"line":2738},[252,20671,1704],{"class":262},[252,20673,20674],{"class":254,"line":2743},[252,20675,2539],{"emptyLinePlaceholder":181},[252,20677,20678,20680,20682],{"class":254,"line":2749},[252,20679,5504],{"class":258},[252,20681,5797],{"class":2102},[252,20683,2115],{"class":262},[252,20685,20686],{"class":254,"line":2755},[252,20687,1685],{"class":262},[252,20689,20690],{"class":254,"line":2760},[252,20691,20692],{"class":321},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[252,20694,20695,20698],{"class":254,"line":8088},[252,20696,20697],{"class":262},"    Person p1;",[252,20699,20700],{"class":321}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[252,20702,20703,20705,20707,20709,20711,20713],{"class":254,"line":8112},[252,20704,19570],{"class":262},[252,20706,7173],{"class":2102},[252,20708,263],{"class":262},[252,20710,709],{"class":311},[252,20712,6106],{"class":262},[252,20714,20715],{"class":321}," \u002F\u002F用户提供的有参\n",[252,20717,20718,20720,20723,20726],{"class":254,"line":8117},[252,20719,19570],{"class":262},[252,20721,20722],{"class":2102},"p3",[252,20724,20725],{"class":262},"(p2);",[252,20727,20728],{"class":321}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[252,20730,20731],{"class":254,"line":8123},[252,20732,2539],{"emptyLinePlaceholder":181},[252,20734,20735],{"class":254,"line":8150},[252,20736,20737],{"class":321},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[252,20739,20740,20743],{"class":254,"line":8155},[252,20741,20742],{"class":262},"    Person p4;",[252,20744,20700],{"class":321},[252,20746,20747,20749,20752,20754,20756,20758],{"class":254,"line":8161},[252,20748,19570],{"class":262},[252,20750,20751],{"class":2102},"p5",[252,20753,263],{"class":262},[252,20755,709],{"class":311},[252,20757,6106],{"class":262},[252,20759,20760],{"class":321}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[252,20762,20763,20765,20768,20771],{"class":254,"line":8173},[252,20764,19570],{"class":262},[252,20766,20767],{"class":2102},"p6",[252,20769,20770],{"class":262},"(p5);",[252,20772,20773],{"class":321}," \u002F\u002F用户自己提供拷贝构造\n",[252,20775,20776],{"class":254,"line":8185},[252,20777,1704],{"class":262},[252,20779,20780],{"class":254,"line":8197},[252,20781,2539],{"emptyLinePlaceholder":181},[252,20783,20784,20786,20788],{"class":254,"line":9856},[252,20785,266],{"class":258},[252,20787,2112],{"class":2102},[252,20789,10993],{"class":262},[252,20791,20792],{"class":254,"line":9881},[252,20793,2539],{"emptyLinePlaceholder":181},[252,20795,20796,20798],{"class":254,"line":9904},[252,20797,5773],{"class":2102},[252,20799,5776],{"class":262},[252,20801,20802],{"class":254,"line":9928},[252,20803,2539],{"emptyLinePlaceholder":181},[252,20805,20806,20808,20810,20812],{"class":254,"line":9933},[252,20807,2442],{"class":2102},[252,20809,263],{"class":262},[252,20811,2447],{"class":367},[252,20813,2858],{"class":262},[252,20815,20816],{"class":254,"line":9938},[252,20817,2539],{"emptyLinePlaceholder":181},[252,20819,20820,20822,20824],{"class":254,"line":9943},[252,20821,4229],{"class":258},[252,20823,4232],{"class":311},[252,20825,1429],{"class":262},[252,20827,20828],{"class":254,"line":9952},[252,20829,1704],{"class":262},[224,20831,20833],{"id":20832},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,20835,20836],{},"浅拷贝：简单的赋值拷贝操作",[19,20838,20839],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[244,20841,20843],{"className":246,"code":20842,"language":248,"meta":169,"style":169},"#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",[22,20844,20845,20851,20861,20867,20871,20875,20880,20886,20890,20903,20907,20911,20918,20922,20932,20947,20960,20964,20969,20974,20990,20994,21007,21012,21017,21022,21031,21036,21051,21055,21059,21063,21069,21073,21078,21093,21097,21108,21122,21126,21135,21139,21145,21157,21161,21169,21173,21190,21221,21229,21257,21261,21265,21273,21277,21283],{"__ignoreMap":169},[252,20846,20847,20849],{"class":254,"line":255},[252,20848,2088],{"class":258},[252,20850,2091],{"class":367},[252,20852,20853,20855,20857,20859],{"class":254,"line":170},[252,20854,2096],{"class":258},[252,20856,2099],{"class":258},[252,20858,2103],{"class":2102},[252,20860,1429],{"class":262},[252,20862,20863,20865],{"class":254,"line":1318},[252,20864,14834],{"class":258},[252,20866,15311],{"class":2102},[252,20868,20869],{"class":254,"line":1333},[252,20870,1685],{"class":262},[252,20872,20873],{"class":254,"line":1339},[252,20874,14856],{"class":258},[252,20876,20877],{"class":254,"line":1353},[252,20878,20879],{"class":321},"    \u002F\u002F默认构造函数\n",[252,20881,20882,20884],{"class":254,"line":1359},[252,20883,18658],{"class":2102},[252,20885,2115],{"class":262},[252,20887,20888],{"class":254,"line":1450},[252,20889,2169],{"class":262},[252,20891,20892,20894,20896,20899,20901],{"class":254,"line":1456},[252,20893,3590],{"class":262},[252,20895,1307],{"class":258},[252,20897,20898],{"class":367},"\"默认构造函数\"",[252,20900,1307],{"class":258},[252,20902,1330],{"class":262},[252,20904,20905],{"class":254,"line":1468},[252,20906,2326],{"class":262},[252,20908,20909],{"class":254,"line":1751},[252,20910,20482],{"class":321},[252,20912,20913,20915],{"class":254,"line":1756},[252,20914,18691],{"class":2102},[252,20916,20917],{"class":262},"(int age,int height)\n",[252,20919,20920],{"class":254,"line":1762},[252,20921,2169],{"class":262},[252,20923,20924,20927,20929],{"class":254,"line":1767},[252,20925,20926],{"class":262},"        m_Age",[252,20928,308],{"class":258},[252,20930,20931],{"class":262},"age;\n",[252,20933,20934,20937,20939,20941,20944],{"class":254,"line":1781},[252,20935,20936],{"class":262},"        m_Height",[252,20938,11857],{"class":258},[252,20940,2521],{"class":258},[252,20942,20943],{"class":262},"(height);",[252,20945,20946],{"class":321},"\u002F\u002F放到堆区\n",[252,20948,20949,20951,20953,20956,20958],{"class":254,"line":1786},[252,20950,3590],{"class":262},[252,20952,1307],{"class":258},[252,20954,20955],{"class":367},"\"有参构造函数\"",[252,20957,1307],{"class":258},[252,20959,1330],{"class":262},[252,20961,20962],{"class":254,"line":1792},[252,20963,2326],{"class":262},[252,20965,20966],{"class":254,"line":1813},[252,20967,20968],{"class":321},"    \u002F\u002F深拷贝解决上述问题\n",[252,20970,20971],{"class":254,"line":1818},[252,20972,20973],{"class":321},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[252,20975,20976,20978,20980,20982,20984,20986,20988],{"class":254,"line":1832},[252,20977,18658],{"class":2102},[252,20979,263],{"class":262},[252,20981,6932],{"class":258},[252,20983,15709],{"class":2102},[252,20985,10724],{"class":258},[252,20987,19],{"class":5356},[252,20989,269],{"class":262},[252,20991,20992],{"class":254,"line":1837},[252,20993,2169],{"class":262},[252,20995,20996,20998,21000,21003,21005],{"class":254,"line":1866},[252,20997,3590],{"class":262},[252,20999,1307],{"class":258},[252,21001,21002],{"class":367},"\"拷贝构造函数\"",[252,21004,1307],{"class":258},[252,21006,1330],{"class":262},[252,21008,21009],{"class":254,"line":1871},[252,21010,21011],{"class":321},"        \u002F\u002F编译器默认的写如下注释部分\n",[252,21013,21014],{"class":254,"line":1888},[252,21015,21016],{"class":321},"        \u002F\u002Fm_Age=p.m_Age;\n",[252,21018,21019],{"class":254,"line":1893},[252,21020,21021],{"class":321},"        \u002F\u002Fm_Height=p.m_Height;\n",[252,21023,21024,21026,21028],{"class":254,"line":1898},[252,21025,20926],{"class":262},[252,21027,308],{"class":258},[252,21029,21030],{"class":262},"p.m_Age;\n",[252,21032,21033],{"class":254,"line":1903},[252,21034,21035],{"class":321},"        \u002F\u002F深拷贝操作\n",[252,21037,21038,21040,21042,21044,21046,21048],{"class":254,"line":1917},[252,21039,20936],{"class":262},[252,21041,11857],{"class":258},[252,21043,2521],{"class":258},[252,21045,263],{"class":262},[252,21047,718],{"class":258},[252,21049,21050],{"class":262},"p.m_Height);\n",[252,21052,21053],{"class":254,"line":1922},[252,21054,2326],{"class":262},[252,21056,21057],{"class":254,"line":2716},[252,21058,2539],{"emptyLinePlaceholder":181},[252,21060,21061],{"class":254,"line":2730},[252,21062,18686],{"class":321},[252,21064,21065,21067],{"class":254,"line":2738},[252,21066,18691],{"class":2102},[252,21068,2115],{"class":262},[252,21070,21071],{"class":254,"line":2743},[252,21072,2169],{"class":262},[252,21074,21075],{"class":254,"line":2749},[252,21076,21077],{"class":321},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[252,21079,21080,21082,21085,21088,21091],{"class":254,"line":2755},[252,21081,2636],{"class":258},[252,21083,21084],{"class":262},"(m_Height ",[252,21086,21087],{"class":258},"!=",[252,21089,21090],{"class":311}," NULL",[252,21092,269],{"class":262},[252,21094,21095],{"class":254,"line":2760},[252,21096,2649],{"class":262},[252,21098,21099,21102,21105],{"class":254,"line":8088},[252,21100,21101],{"class":258},"            delete",[252,21103,21104],{"class":262}," m_Height;",[252,21106,21107],{"class":321}," \u002F\u002F释放堆区内存\n",[252,21109,21110,21113,21115,21117,21119],{"class":254,"line":8112},[252,21111,21112],{"class":262},"            m_Height",[252,21114,308],{"class":258},[252,21116,2531],{"class":311},[252,21118,318],{"class":262},[252,21120,21121],{"class":321}," \u002F\u002F防止野指针\n",[252,21123,21124],{"class":254,"line":8117},[252,21125,2668],{"class":262},[252,21127,21128,21130,21132],{"class":254,"line":8123},[252,21129,3590],{"class":262},[252,21131,1307],{"class":258},[252,21133,21134],{"class":367},"\"Person的析构函数调用\"\n",[252,21136,21137],{"class":254,"line":8150},[252,21138,2326],{"class":262},[252,21140,21141,21143],{"class":254,"line":8155},[252,21142,2124],{"class":258},[252,21144,15806],{"class":262},[252,21146,21147,21149,21151,21154],{"class":254,"line":8161},[252,21148,2124],{"class":258},[252,21150,6658],{"class":258},[252,21152,21153],{"class":262},"m_Height;",[252,21155,21156],{"class":321}," \u002F\u002F定义一个指针，指向身高\n",[252,21158,21159],{"class":254,"line":8173},[252,21160,4134],{"class":262},[252,21162,21163,21165,21167],{"class":254,"line":8185},[252,21164,5504],{"class":258},[252,21166,5728],{"class":2102},[252,21168,2115],{"class":262},[252,21170,21171],{"class":254,"line":8197},[252,21172,1685],{"class":262},[252,21174,21175,21177,21179,21181,21183,21185,21188],{"class":254,"line":9856},[252,21176,19570],{"class":262},[252,21178,7270],{"class":2102},[252,21180,263],{"class":262},[252,21182,913],{"class":311},[252,21184,641],{"class":262},[252,21186,21187],{"class":311},"160",[252,21189,2858],{"class":262},[252,21191,21192,21194,21196,21199,21201,21204,21206,21209,21211,21214,21216,21218],{"class":254,"line":9881},[252,21193,1690],{"class":262},[252,21195,1307],{"class":258},[252,21197,21198],{"class":367},"\"p1的年龄为:\"",[252,21200,1307],{"class":258},[252,21202,21203],{"class":262},"p1.m_Age",[252,21205,1307],{"class":258},[252,21207,21208],{"class":367},"\"身高为：\"",[252,21210,6559],{"class":258},[252,21212,21213],{"class":262},"p1.m_Height",[252,21215,1307],{"class":258},[252,21217,1377],{"class":262},[252,21219,21220],{"class":321},"  \u002F\u002F18\n",[252,21222,21223,21225,21227],{"class":254,"line":9904},[252,21224,19570],{"class":262},[252,21226,7173],{"class":2102},[252,21228,17655],{"class":262},[252,21230,21231,21233,21235,21238,21240,21242,21244,21246,21248,21251,21253,21255],{"class":254,"line":9928},[252,21232,1690],{"class":262},[252,21234,1307],{"class":258},[252,21236,21237],{"class":367},"\"p2的年龄为：\"",[252,21239,1307],{"class":258},[252,21241,19600],{"class":262},[252,21243,1307],{"class":258},[252,21245,21208],{"class":367},[252,21247,6559],{"class":258},[252,21249,21250],{"class":262},"p2.m_Height",[252,21252,1307],{"class":258},[252,21254,1377],{"class":262},[252,21256,21220],{"class":321},[252,21258,21259],{"class":254,"line":9933},[252,21260,13350],{"class":262},[252,21262,21263],{"class":254,"line":9938},[252,21264,1704],{"class":262},[252,21266,21267,21269,21271],{"class":254,"line":9943},[252,21268,266],{"class":258},[252,21270,2112],{"class":2102},[252,21272,2115],{"class":262},[252,21274,21275],{"class":254,"line":9952},[252,21276,1685],{"class":262},[252,21278,21279,21281],{"class":254,"line":9957},[252,21280,5773],{"class":2102},[252,21282,5776],{"class":262},[252,21284,21285],{"class":254,"line":9963},[252,21286,1704],{"class":262},[19,21288,21289],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21291,21292],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21294,21295],{},[1601,21296],{"alt":169,"src":21297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21299,21300],{},"浅拷贝问题要使用深拷贝来解决",[19,21302,21303],{},[1601,21304],{"alt":169,"src":21305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21307,21308],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[224,21310,21312],{"id":21311},"_826初始化列表","8.2.6初始化列表",[19,21314,21315],{},"作用：初始化属性",[19,21317,5321],{},[244,21319,21322],{"className":21320,"code":21321,"language":5327},[5325],"构造函数():属性1(值1),属性2(值2).....{}\n",[22,21323,21321],{"__ignoreMap":169},[19,21325,21326],{},"例子",[244,21328,21330],{"className":246,"code":21329,"language":248,"meta":169,"style":169},"#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",[22,21331,21332,21338,21348,21354,21358,21363,21367,21372,21377,21382,21387,21392,21397,21401,21406,21411,21454,21463,21481,21499,21517,21521,21525,21532,21539,21546,21550,21554,21562,21566,21570,21590,21599,21603,21607,21617,21621,21629],{"__ignoreMap":169},[252,21333,21334,21336],{"class":254,"line":255},[252,21335,2088],{"class":258},[252,21337,2091],{"class":367},[252,21339,21340,21342,21344,21346],{"class":254,"line":170},[252,21341,2096],{"class":258},[252,21343,2099],{"class":258},[252,21345,2103],{"class":2102},[252,21347,1429],{"class":262},[252,21349,21350,21352],{"class":254,"line":1318},[252,21351,14834],{"class":258},[252,21353,15311],{"class":2102},[252,21355,21356],{"class":254,"line":1333},[252,21357,1685],{"class":262},[252,21359,21360],{"class":254,"line":1339},[252,21361,21362],{"class":258},"    public:\n",[252,21364,21365],{"class":254,"line":1353},[252,21366,2539],{"emptyLinePlaceholder":181},[252,21368,21369],{"class":254,"line":1359},[252,21370,21371],{"class":321},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[252,21373,21374],{"class":254,"line":1450},[252,21375,21376],{"class":321},"    \u002F\u002FPerson(int a, int b, int c) {\n",[252,21378,21379],{"class":254,"line":1456},[252,21380,21381],{"class":321},"    \u002F\u002F  m_A = a;\n",[252,21383,21384],{"class":254,"line":1468},[252,21385,21386],{"class":321},"    \u002F\u002F  m_B = b;\n",[252,21388,21389],{"class":254,"line":1751},[252,21390,21391],{"class":321},"    \u002F\u002F  m_C = c;\n",[252,21393,21394],{"class":254,"line":1756},[252,21395,21396],{"class":321},"    \u002F\u002F}\n",[252,21398,21399],{"class":254,"line":1762},[252,21400,2539],{"emptyLinePlaceholder":181},[252,21402,21403],{"class":254,"line":1767},[252,21404,21405],{"class":321},"    \u002F\u002F初始化列表方式初始化\n",[252,21407,21408],{"class":254,"line":1781},[252,21409,21410],{"class":321},"    \u002F\u002F使用有参构造函数\n",[252,21412,21413,21415,21417,21419,21421,21423,21425,21427,21429,21431,21433,21436,21439,21442,21445,21448,21451],{"class":254,"line":1786},[252,21414,18658],{"class":2102},[252,21416,263],{"class":262},[252,21418,266],{"class":258},[252,21420,1537],{"class":5356},[252,21422,12575],{"class":262},[252,21424,266],{"class":258},[252,21426,2972],{"class":5356},[252,21428,12575],{"class":262},[252,21430,266],{"class":258},[252,21432,2988],{"class":5356},[252,21434,21435],{"class":262},") :",[252,21437,21438],{"class":2102},"m_A",[252,21440,21441],{"class":262},"(a), ",[252,21443,21444],{"class":2102},"m_B",[252,21446,21447],{"class":262},"(b), ",[252,21449,21450],{"class":2102},"m_C",[252,21452,21453],{"class":262},"(c) {}\n",[252,21455,21456,21458,21461],{"class":254,"line":1792},[252,21457,15049],{"class":258},[252,21459,21460],{"class":2102}," PrintPerson",[252,21462,10993],{"class":262},[252,21464,21465,21467,21469,21472,21474,21477,21479],{"class":254,"line":1813},[252,21466,9809],{"class":262},[252,21468,1307],{"class":258},[252,21470,21471],{"class":367}," \"mA:\"",[252,21473,1583],{"class":258},[252,21475,21476],{"class":262}," m_A ",[252,21478,1307],{"class":258},[252,21480,8980],{"class":262},[252,21482,21483,21485,21487,21490,21492,21495,21497],{"class":254,"line":1818},[252,21484,9809],{"class":262},[252,21486,1307],{"class":258},[252,21488,21489],{"class":367}," \"mB:\"",[252,21491,1583],{"class":258},[252,21493,21494],{"class":262}," m_B ",[252,21496,1307],{"class":258},[252,21498,8980],{"class":262},[252,21500,21501,21503,21505,21508,21510,21513,21515],{"class":254,"line":1832},[252,21502,9809],{"class":262},[252,21504,1307],{"class":258},[252,21506,21507],{"class":367}," \"mC:\"",[252,21509,1583],{"class":258},[252,21511,21512],{"class":262}," m_C ",[252,21514,1307],{"class":258},[252,21516,8980],{"class":262},[252,21518,21519],{"class":254,"line":1837},[252,21520,2326],{"class":262},[252,21522,21523],{"class":254,"line":1866},[252,21524,15362],{"class":258},[252,21526,21527,21529],{"class":254,"line":1871},[252,21528,2124],{"class":258},[252,21530,21531],{"class":262}," m_A;\n",[252,21533,21534,21536],{"class":254,"line":1888},[252,21535,2124],{"class":258},[252,21537,21538],{"class":262}," m_B;\n",[252,21540,21541,21543],{"class":254,"line":1893},[252,21542,2124],{"class":258},[252,21544,21545],{"class":262}," m_C;\n",[252,21547,21548],{"class":254,"line":1898},[252,21549,4134],{"class":262},[252,21551,21552],{"class":254,"line":1903},[252,21553,2539],{"emptyLinePlaceholder":181},[252,21555,21556,21558,21560],{"class":254,"line":1917},[252,21557,266],{"class":258},[252,21559,2112],{"class":2102},[252,21561,6118],{"class":262},[252,21563,21564],{"class":254,"line":1922},[252,21565,1685],{"class":262},[252,21567,21568],{"class":254,"line":2716},[252,21569,2539],{"emptyLinePlaceholder":181},[252,21571,21572,21574,21576,21578,21580,21582,21584,21586,21588],{"class":254,"line":2730},[252,21573,19570],{"class":262},[252,21575,19],{"class":2102},[252,21577,263],{"class":262},[252,21579,480],{"class":311},[252,21581,12575],{"class":262},[252,21583,340],{"class":311},[252,21585,12575],{"class":262},[252,21587,334],{"class":311},[252,21589,2858],{"class":262},[252,21591,21592,21594,21597],{"class":254,"line":2738},[252,21593,16006],{"class":262},[252,21595,21596],{"class":2102},"PrintPerson",[252,21598,5776],{"class":262},[252,21600,21601],{"class":254,"line":2743},[252,21602,2539],{"emptyLinePlaceholder":181},[252,21604,21605],{"class":254,"line":2749},[252,21606,2539],{"emptyLinePlaceholder":181},[252,21608,21609,21611,21613,21615],{"class":254,"line":2755},[252,21610,2442],{"class":2102},[252,21612,263],{"class":262},[252,21614,2447],{"class":367},[252,21616,2858],{"class":262},[252,21618,21619],{"class":254,"line":2760},[252,21620,2539],{"emptyLinePlaceholder":181},[252,21622,21623,21625,21627],{"class":254,"line":8088},[252,21624,4229],{"class":258},[252,21626,4232],{"class":311},[252,21628,1429],{"class":262},[252,21630,21631],{"class":254,"line":8112},[252,21632,1704],{"class":262},[19,21634,21635,21636,21639,21640],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[412,21637,21638],{},"参数名就是定义的对象属性","，",[412,21641,21642],{},"属性后面的值为有参构造函数的形参",[244,21644,21646],{"className":246,"code":21645,"language":248,"meta":169,"style":169},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[22,21647,21648],{"__ignoreMap":169},[252,21649,21650,21652,21654,21656,21659,21661,21664,21666,21669,21671,21674,21676,21679,21681],{"class":254,"line":255},[252,21651,19185],{"class":2102},[252,21653,263],{"class":262},[252,21655,266],{"class":258},[252,21657,21658],{"class":262}," a.",[252,21660,266],{"class":258},[252,21662,21663],{"class":262}," b,",[252,21665,266],{"class":258},[252,21667,21668],{"class":262}," b):",[252,21670,21438],{"class":2102},[252,21672,21673],{"class":262},"(a),",[252,21675,21444],{"class":2102},[252,21677,21678],{"class":262},"(c),",[252,21680,21450],{"class":2102},[252,21682,21683],{"class":262},"(b) {}\n",[224,21685,21687],{"id":21686},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,21689,21690],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,21692,14773],{},[244,21694,21696],{"className":246,"code":21695,"language":248,"meta":169,"style":169},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[22,21697,21698,21703,21708,21712,21717,21721],{"__ignoreMap":169},[252,21699,21700],{"class":254,"line":255},[252,21701,21702],{"class":262},"A{};\n",[252,21704,21705],{"class":254,"line":170},[252,21706,21707],{"class":262},"B\n",[252,21709,21710],{"class":254,"line":1318},[252,21711,1685],{"class":262},[252,21713,21714],{"class":254,"line":1333},[252,21715,21716],{"class":262},"    A a;\n",[252,21718,21719],{"class":254,"line":1339},[252,21720,1704],{"class":262},[252,21722,21723],{"class":254,"line":1353},[252,21724,21725],{"class":321},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,21727,21728],{},"案例",[244,21730,21732],{"className":246,"code":21731,"language":248,"meta":169,"style":169},"\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",[22,21733,21734,21739,21746,21750,21755,21760,21774,21778,21788,21799,21803,21810,21814,21827,21831,21836,21841,21845,21851,21855,21859,21863,21894,21898,21909,21913,21919,21923,21936,21940,21944,21948,21953,21958,21962,21970,21974,21991,22010,22014,22022,22026,22032],{"__ignoreMap":169},[252,21735,21736],{"class":254,"line":255},[252,21737,21738],{"class":321},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[252,21740,21741,21743],{"class":254,"line":170},[252,21742,14834],{"class":258},[252,21744,21745],{"class":2102}," Phone\n",[252,21747,21748],{"class":254,"line":1318},[252,21749,1685],{"class":262},[252,21751,21752],{"class":254,"line":1333},[252,21753,21754],{"class":262},"public：\n",[252,21756,21757],{"class":254,"line":1339},[252,21758,21759],{"class":321},"    \u002F\u002F 赋值(构造函数)\n",[252,21761,21762,21765,21767,21769,21772],{"class":254,"line":1353},[252,21763,21764],{"class":2102},"    Phone",[252,21766,263],{"class":262},[252,21768,15057],{"class":2102},[252,21770,21771],{"class":5356}," pName",[252,21773,269],{"class":262},[252,21775,21776],{"class":254,"line":1359},[252,21777,2169],{"class":262},[252,21779,21780,21783,21785],{"class":254,"line":1450},[252,21781,21782],{"class":262},"        m_pName",[252,21784,308],{"class":258},[252,21786,21787],{"class":262},"pName;\n",[252,21789,21790,21792,21794,21797],{"class":254,"line":1456},[252,21791,3590],{"class":262},[252,21793,1307],{"class":258},[252,21795,21796],{"class":367},"\"Phone的构造函数调用\"",[252,21798,1429],{"class":262},[252,21800,21801],{"class":254,"line":1468},[252,21802,2326],{"class":262},[252,21804,21805,21808],{"class":254,"line":1751},[252,21806,21807],{"class":2102},"    ~Phone",[252,21809,2115],{"class":262},[252,21811,21812],{"class":254,"line":1756},[252,21813,2169],{"class":262},[252,21815,21816,21818,21820,21823,21825],{"class":254,"line":1762},[252,21817,3590],{"class":262},[252,21819,1307],{"class":258},[252,21821,21822],{"class":367},"\"Phone析构函数调用\"",[252,21824,1307],{"class":258},[252,21826,1330],{"class":262},[252,21828,21829],{"class":254,"line":1767},[252,21830,2326],{"class":262},[252,21832,21833],{"class":254,"line":1781},[252,21834,21835],{"class":321},"    \u002F\u002F\n",[252,21837,21838],{"class":254,"line":1786},[252,21839,21840],{"class":262},"    string m_PName;\n",[252,21842,21843],{"class":254,"line":1792},[252,21844,4134],{"class":262},[252,21846,21847,21849],{"class":254,"line":1813},[252,21848,14834],{"class":258},[252,21850,15311],{"class":2102},[252,21852,21853],{"class":254,"line":1818},[252,21854,1685],{"class":262},[252,21856,21857],{"class":254,"line":1832},[252,21858,14856],{"class":258},[252,21860,21861],{"class":254,"line":1837},[252,21862,17134],{"class":321},[252,21864,21865,21867,21869,21871,21873,21875,21877,21880,21883,21885,21888,21891],{"class":254,"line":1866},[252,21866,18658],{"class":2102},[252,21868,263],{"class":262},[252,21870,15057],{"class":2102},[252,21872,15060],{"class":5356},[252,21874,641],{"class":262},[252,21876,15057],{"class":2102},[252,21878,21879],{"class":5356}," pname",[252,21881,21882],{"class":262},"):",[252,21884,15150],{"class":2102},[252,21886,21887],{"class":262},"(name),m_phone.",[252,21889,21890],{"class":2102},"m_PName",[252,21892,21893],{"class":262},"(pname) \n",[252,21895,21896],{"class":254,"line":1871},[252,21897,2169],{"class":262},[252,21899,21900,21902,21904,21907],{"class":254,"line":1888},[252,21901,3590],{"class":262},[252,21903,1307],{"class":258},[252,21905,21906],{"class":367},"\"Person的构造函数调用\"",[252,21908,1429],{"class":262},[252,21910,21911],{"class":254,"line":1893},[252,21912,2326],{"class":262},[252,21914,21915,21917],{"class":254,"line":1898},[252,21916,18691],{"class":2102},[252,21918,2115],{"class":262},[252,21920,21921],{"class":254,"line":1903},[252,21922,2169],{"class":262},[252,21924,21925,21927,21929,21932,21934],{"class":254,"line":1917},[252,21926,3590],{"class":262},[252,21928,1307],{"class":258},[252,21930,21931],{"class":367},"\"Person析构函数调用\"",[252,21933,1307],{"class":258},[252,21935,1330],{"class":262},[252,21937,21938],{"class":254,"line":1922},[252,21939,2326],{"class":262},[252,21941,21942],{"class":254,"line":2716},[252,21943,7920],{"class":321},[252,21945,21946],{"class":254,"line":2730},[252,21947,15032],{"class":262},[252,21949,21950],{"class":254,"line":2738},[252,21951,21952],{"class":321},"    \u002F\u002F手机\n",[252,21954,21955],{"class":254,"line":2743},[252,21956,21957],{"class":262},"    Phone m_Phone;\n",[252,21959,21960],{"class":254,"line":2749},[252,21961,4134],{"class":262},[252,21963,21964,21966,21968],{"class":254,"line":2755},[252,21965,5504],{"class":258},[252,21967,5728],{"class":2102},[252,21969,2115],{"class":262},[252,21971,21972],{"class":254,"line":2760},[252,21973,1685],{"class":262},[252,21975,21976,21978,21980,21982,21984,21986,21989],{"class":254,"line":8088},[252,21977,19570],{"class":262},[252,21979,19],{"class":2102},[252,21981,263],{"class":262},[252,21983,8056],{"class":367},[252,21985,641],{"class":262},[252,21987,21988],{"class":367},"\"安卓\"",[252,21990,2858],{"class":262},[252,21992,21993,21995,21997,22000,22002,22005,22007],{"class":254,"line":8112},[252,21994,1690],{"class":262},[252,21996,1307],{"class":258},[252,21998,21999],{"class":262},"p.Name",[252,22001,1307],{"class":258},[252,22003,22004],{"class":367},"\"拿着：\"",[252,22006,1307],{"class":258},[252,22008,22009],{"class":262},"p.m_phone.m_PName;\n",[252,22011,22012],{"class":254,"line":8117},[252,22013,1704],{"class":262},[252,22015,22016,22018,22020],{"class":254,"line":8123},[252,22017,266],{"class":258},[252,22019,2112],{"class":2102},[252,22021,2115],{"class":262},[252,22023,22024],{"class":254,"line":8150},[252,22025,1685],{"class":262},[252,22027,22028,22030],{"class":254,"line":8155},[252,22029,5773],{"class":2102},[252,22031,5776],{"class":262},[252,22033,22034],{"class":254,"line":8161},[252,22035,1704],{"class":262},[19,22037,9165],{},[244,22039,22041],{"className":246,"code":22040,"language":248,"meta":169,"style":169},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[22,22042,22043,22048],{"__ignoreMap":169},[252,22044,22045],{"class":254,"line":255},[252,22046,22047],{"class":321},"    \u002F\u002F不需要写这个：\n",[252,22049,22050],{"class":254,"line":170},[252,22051,22052],{"class":321},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22054,22055],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[244,22057,22059],{"className":246,"code":22058,"language":248,"meta":169,"style":169},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[22,22060,22061],{"__ignoreMap":169},[252,22062,22063,22065,22068,22070,22073,22076],{"class":254,"line":255},[252,22064,19185],{"class":2102},[252,22066,22067],{"class":262},"(string name.string pname):",[252,22069,15150],{"class":2102},[252,22071,22072],{"class":262},"(name),",[252,22074,22075],{"class":2102},"m_phone",[252,22077,22078],{"class":262},"(pname) {}\n",[19,22080,22081,22082,308,22085],{},"采用的是隐式转换法，实际为如下：\n",[22,22083,22084],{},"m_phone(pname)",[22,22086,22087],{},"Phone m_phone=pname",[19,22089,22090,22093],{},[412,22091,22092],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22095,22096],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[224,22098,22100],{"id":22099},"_828静态对象","8.2.8静态对象",[19,22102,22103],{},"静态对象在成员对象前static，称为静态对象",[19,22105,22106],{},"静态对象分为两类：",[207,22108,22109],{},[210,22110,22111],{},"静态成员变量",[1270,22113,22114,22117,22120],{},[210,22115,22116],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[210,22118,22119],{},"②在编译阶段分配内存",[210,22121,22122],{},"③类内声明，类外初始化",[207,22124,22125],{"start":170},[210,22126,22127],{},"静态成员函数",[1270,22129,22130,22133],{},[210,22131,22132],{},"①所有对象共享同一个函数",[210,22134,22135],{},"②静态成员函数只能访问静态成员变量",[22137,22138,22140],"h4",{"id":22139},"_8281静态成员变量","8.2.8.1静态成员变量",[244,22142,22144],{"className":246,"code":22143,"language":248,"meta":169,"style":169},"#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",[22,22145,22146,22152,22162,22168,22172,22176,22181,22186,22191,22199,22203,22207,22211,22219,22223,22227,22232,22245,22249,22257,22261,22267],{"__ignoreMap":169},[252,22147,22148,22150],{"class":254,"line":255},[252,22149,2088],{"class":258},[252,22151,2091],{"class":367},[252,22153,22154,22156,22158,22160],{"class":254,"line":170},[252,22155,2096],{"class":258},[252,22157,2099],{"class":258},[252,22159,2103],{"class":2102},[252,22161,1429],{"class":262},[252,22163,22164,22166],{"class":254,"line":1318},[252,22165,14834],{"class":258},[252,22167,15311],{"class":2102},[252,22169,22170],{"class":254,"line":1333},[252,22171,1685],{"class":262},[252,22173,22174],{"class":254,"line":1339},[252,22175,14856],{"class":258},[252,22177,22178],{"class":254,"line":1353},[252,22179,22180],{"class":321},"    \u002F\u002F非静态成员变量\n",[252,22182,22183],{"class":254,"line":1359},[252,22184,22185],{"class":321},"    \u002F\u002F int m_A;\n",[252,22187,22188],{"class":254,"line":1450},[252,22189,22190],{"class":321},"    \u002F\u002F定义静态成员变量\n",[252,22192,22193,22195,22197],{"class":254,"line":1456},[252,22194,11160],{"class":258},[252,22196,2521],{"class":258},[252,22198,21531],{"class":262},[252,22200,22201],{"class":254,"line":1468},[252,22202,2539],{"emptyLinePlaceholder":181},[252,22204,22205],{"class":254,"line":1751},[252,22206,2539],{"emptyLinePlaceholder":181},[252,22208,22209],{"class":254,"line":1756},[252,22210,4134],{"class":262},[252,22212,22213,22215,22217],{"class":254,"line":1762},[252,22214,5504],{"class":258},[252,22216,5728],{"class":2102},[252,22218,2115],{"class":262},[252,22220,22221],{"class":254,"line":1767},[252,22222,1685],{"class":262},[252,22224,22225],{"class":254,"line":1781},[252,22226,15453],{"class":262},[252,22228,22229],{"class":254,"line":1786},[252,22230,22231],{"class":321},"    \u002F\u002F输出类成员变量这块内存\n",[252,22233,22234,22236,22238,22241,22243],{"class":254,"line":1792},[252,22235,1690],{"class":262},[252,22237,1307],{"class":258},[252,22239,22240],{"class":262},"p.m_A",[252,22242,1307],{"class":258},[252,22244,1330],{"class":262},[252,22246,22247],{"class":254,"line":1813},[252,22248,1704],{"class":262},[252,22250,22251,22253,22255],{"class":254,"line":1818},[252,22252,266],{"class":258},[252,22254,2112],{"class":2102},[252,22256,2115],{"class":262},[252,22258,22259],{"class":254,"line":1832},[252,22260,1685],{"class":262},[252,22262,22263,22265],{"class":254,"line":1837},[252,22264,5773],{"class":2102},[252,22266,2115],{"class":262},[252,22268,22269],{"class":254,"line":1866},[252,22270,1704],{"class":262},[19,22272,22273],{},"此时输出是报错的：无法解析外部命令",[19,22275,22276],{},"解决这一问题：必须用到类内声明，类外初始化操作",[244,22278,22280],{"className":246,"code":22279,"language":248,"meta":169,"style":169},"#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",[22,22281,22282,22288,22298,22304,22308,22312,22317,22325,22329,22334,22349,22357,22361,22365,22370,22375,22387,22392,22403,22408,22413,22426,22430,22438,22442,22448],{"__ignoreMap":169},[252,22283,22284,22286],{"class":254,"line":255},[252,22285,2088],{"class":258},[252,22287,2091],{"class":367},[252,22289,22290,22292,22294,22296],{"class":254,"line":170},[252,22291,2096],{"class":258},[252,22293,2099],{"class":258},[252,22295,2103],{"class":2102},[252,22297,1429],{"class":262},[252,22299,22300,22302],{"class":254,"line":1318},[252,22301,14834],{"class":258},[252,22303,15311],{"class":2102},[252,22305,22306],{"class":254,"line":1333},[252,22307,1685],{"class":262},[252,22309,22310],{"class":254,"line":1339},[252,22311,14856],{"class":258},[252,22313,22314],{"class":254,"line":1353},[252,22315,22316],{"class":321},"    \u002F\u002F类内声明\n",[252,22318,22319,22321,22323],{"class":254,"line":1359},[252,22320,11160],{"class":258},[252,22322,2521],{"class":258},[252,22324,21531],{"class":262},[252,22326,22327],{"class":254,"line":1450},[252,22328,4134],{"class":262},[252,22330,22331],{"class":254,"line":1456},[252,22332,22333],{"class":321},"\u002F\u002F类外初始化\n",[252,22335,22336,22338,22340,22343,22345,22347],{"class":254,"line":1468},[252,22337,266],{"class":258},[252,22339,15709],{"class":2102},[252,22341,22342],{"class":262},"::m_A",[252,22344,308],{"class":258},[252,22346,709],{"class":311},[252,22348,1429],{"class":262},[252,22350,22351,22353,22355],{"class":254,"line":1751},[252,22352,5504],{"class":258},[252,22354,5728],{"class":2102},[252,22356,2115],{"class":262},[252,22358,22359],{"class":254,"line":1756},[252,22360,1685],{"class":262},[252,22362,22363],{"class":254,"line":1762},[252,22364,15453],{"class":262},[252,22366,22367],{"class":254,"line":1767},[252,22368,22369],{"class":321},"    \u002F\u002F访问变量的原内存空间\n",[252,22371,22372],{"class":254,"line":1781},[252,22373,22374],{"class":321},"    \u002F\u002F100\n",[252,22376,22377,22379,22381,22383,22385],{"class":254,"line":1786},[252,22378,1690],{"class":262},[252,22380,1307],{"class":258},[252,22382,22240],{"class":262},[252,22384,1307],{"class":258},[252,22386,1330],{"class":262},[252,22388,22389],{"class":254,"line":1792},[252,22390,22391],{"class":262},"    Person p2;\n",[252,22393,22394,22397,22399,22401],{"class":254,"line":1813},[252,22395,22396],{"class":262},"    p2.m_A",[252,22398,308],{"class":258},[252,22400,1861],{"class":311},[252,22402,1429],{"class":262},[252,22404,22405],{"class":254,"line":1818},[252,22406,22407],{"class":321},"    \u002F\u002F继续访问这片空间\n",[252,22409,22410],{"class":254,"line":1832},[252,22411,22412],{"class":321},"    \u002F\u002F200\n",[252,22414,22415,22417,22419,22422,22424],{"class":254,"line":1837},[252,22416,1690],{"class":262},[252,22418,1307],{"class":258},[252,22420,22421],{"class":262},"p2.m_A",[252,22423,1307],{"class":258},[252,22425,1330],{"class":262},[252,22427,22428],{"class":254,"line":1866},[252,22429,1704],{"class":262},[252,22431,22432,22434,22436],{"class":254,"line":1871},[252,22433,266],{"class":258},[252,22435,2112],{"class":2102},[252,22437,2115],{"class":262},[252,22439,22440],{"class":254,"line":1888},[252,22441,1685],{"class":262},[252,22443,22444,22446],{"class":254,"line":1893},[252,22445,5773],{"class":2102},[252,22447,5776],{"class":262},[252,22449,22450],{"class":254,"line":1898},[252,22451,1704],{"class":262},[19,22453,22454],{},[412,22455,22456],{},"静态变量的访问",[244,22458,22460],{"className":246,"code":22459,"language":248,"meta":169,"style":169},"#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",[22,22461,22462,22468,22478,22484,22488,22492,22496,22504,22508,22513,22521,22525,22529,22543,22558,22566,22570,22575,22580,22585,22590,22602,22607,22612,22626,22643,22647,22655,22659,22665],{"__ignoreMap":169},[252,22463,22464,22466],{"class":254,"line":255},[252,22465,2088],{"class":258},[252,22467,2091],{"class":367},[252,22469,22470,22472,22474,22476],{"class":254,"line":170},[252,22471,2096],{"class":258},[252,22473,2099],{"class":258},[252,22475,2103],{"class":2102},[252,22477,1429],{"class":262},[252,22479,22480,22482],{"class":254,"line":1318},[252,22481,14834],{"class":258},[252,22483,15311],{"class":2102},[252,22485,22486],{"class":254,"line":1333},[252,22487,1685],{"class":262},[252,22489,22490],{"class":254,"line":1339},[252,22491,14856],{"class":258},[252,22493,22494],{"class":254,"line":1353},[252,22495,22316],{"class":321},[252,22497,22498,22500,22502],{"class":254,"line":1359},[252,22499,11160],{"class":258},[252,22501,2521],{"class":258},[252,22503,21531],{"class":262},[252,22505,22506],{"class":254,"line":1450},[252,22507,15362],{"class":258},[252,22509,22510],{"class":254,"line":1456},[252,22511,22512],{"class":321},"    \u002F\u002F静态成员变量也是有访问权限的\n",[252,22514,22515,22517,22519],{"class":254,"line":1468},[252,22516,11160],{"class":258},[252,22518,2521],{"class":258},[252,22520,21538],{"class":262},[252,22522,22523],{"class":254,"line":1751},[252,22524,4134],{"class":262},[252,22526,22527],{"class":254,"line":1756},[252,22528,22333],{"class":321},[252,22530,22531,22533,22535,22537,22539,22541],{"class":254,"line":1762},[252,22532,266],{"class":258},[252,22534,15709],{"class":2102},[252,22536,22342],{"class":262},[252,22538,308],{"class":258},[252,22540,709],{"class":311},[252,22542,1429],{"class":262},[252,22544,22545,22547,22549,22552,22554,22556],{"class":254,"line":1767},[252,22546,266],{"class":258},[252,22548,15709],{"class":2102},[252,22550,22551],{"class":262},"::m_B",[252,22553,308],{"class":258},[252,22555,963],{"class":311},[252,22557,1429],{"class":262},[252,22559,22560,22562,22564],{"class":254,"line":1781},[252,22561,5504],{"class":258},[252,22563,5797],{"class":2102},[252,22565,2115],{"class":262},[252,22567,22568],{"class":254,"line":1786},[252,22569,1685],{"class":262},[252,22571,22572],{"class":254,"line":1792},[252,22573,22574],{"class":321},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[252,22576,22577],{"class":254,"line":1813},[252,22578,22579],{"class":321},"    \u002F\u002F静态成员变量有两种访问方式：\n",[252,22581,22582],{"class":254,"line":1818},[252,22583,22584],{"class":321},"    \u002F\u002F1.通过对象进行访问\n",[252,22586,22587],{"class":254,"line":1832},[252,22588,22589],{"class":262},"    Person p;  \n",[252,22591,22592,22594,22596,22598,22600],{"class":254,"line":1837},[252,22593,1690],{"class":262},[252,22595,1307],{"class":258},[252,22597,22240],{"class":262},[252,22599,1307],{"class":258},[252,22601,1330],{"class":262},[252,22603,22604],{"class":254,"line":1866},[252,22605,22606],{"class":321},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[252,22608,22609],{"class":254,"line":1871},[252,22610,22611],{"class":321},"    \u002F\u002F2.通过类名进行访问\n",[252,22613,22614,22616,22618,22620,22622,22624],{"class":254,"line":1888},[252,22615,1690],{"class":262},[252,22617,1307],{"class":258},[252,22619,19185],{"class":2102},[252,22621,22342],{"class":262},[252,22623,1307],{"class":258},[252,22625,1330],{"class":262},[252,22627,22628,22630,22632,22634,22636,22638,22640],{"class":254,"line":1893},[252,22629,1690],{"class":262},[252,22631,1307],{"class":258},[252,22633,19185],{"class":2102},[252,22635,22551],{"class":262},[252,22637,1307],{"class":258},[252,22639,1377],{"class":262},[252,22641,22642],{"class":321}," \u002F\u002F没有访问权限，报错\n",[252,22644,22645],{"class":254,"line":1898},[252,22646,1704],{"class":262},[252,22648,22649,22651,22653],{"class":254,"line":1903},[252,22650,266],{"class":258},[252,22652,2112],{"class":2102},[252,22654,2115],{"class":262},[252,22656,22657],{"class":254,"line":1917},[252,22658,1685],{"class":262},[252,22660,22661,22663],{"class":254,"line":1922},[252,22662,5842],{"class":2102},[252,22664,5776],{"class":262},[252,22666,22667],{"class":254,"line":2716},[252,22668,1704],{"class":262},[22137,22670,22672],{"id":22671},"_8282静态成员函数","8.2.8.2静态成员函数",[19,22674,22675],{},"1.静态成员函数定义与访问",[244,22677,22679],{"className":246,"code":22678,"language":248,"meta":169,"style":169},"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",[22,22680,22681,22687,22691,22695,22700,22711,22715,22729,22733,22737,22745,22749,22754,22759,22763,22771,22776,22786],{"__ignoreMap":169},[252,22682,22683,22685],{"class":254,"line":255},[252,22684,14834],{"class":258},[252,22686,15311],{"class":2102},[252,22688,22689],{"class":254,"line":170},[252,22690,1685],{"class":262},[252,22692,22693],{"class":254,"line":1318},[252,22694,14856],{"class":258},[252,22696,22697],{"class":254,"line":1333},[252,22698,22699],{"class":321},"    \u002F\u002F在公共权限下定义静态成员函数\n",[252,22701,22702,22704,22707,22709],{"class":254,"line":1339},[252,22703,11160],{"class":258},[252,22705,22706],{"class":258}," void",[252,22708,11525],{"class":2102},[252,22710,2115],{"class":262},[252,22712,22713],{"class":254,"line":1353},[252,22714,2169],{"class":262},[252,22716,22717,22720,22722,22725,22727],{"class":254,"line":1359},[252,22718,22719],{"class":262},"        coout",[252,22721,1307],{"class":258},[252,22723,22724],{"class":367},"\"静态成员函数的调用\"",[252,22726,1307],{"class":258},[252,22728,1330],{"class":262},[252,22730,22731],{"class":254,"line":1450},[252,22732,2326],{"class":262},[252,22734,22735],{"class":254,"line":1456},[252,22736,4134],{"class":262},[252,22738,22739,22741,22743],{"class":254,"line":1468},[252,22740,5504],{"class":258},[252,22742,5728],{"class":2102},[252,22744,2115],{"class":262},[252,22746,22747],{"class":254,"line":1751},[252,22748,1685],{"class":262},[252,22750,22751],{"class":254,"line":1756},[252,22752,22753],{"class":321},"    \u002F\u002F静态成员函数的调用方式:\n",[252,22755,22756],{"class":254,"line":1762},[252,22757,22758],{"class":321},"    \u002F\u002F1.通过对象访问\n",[252,22760,22761],{"class":254,"line":1767},[252,22762,15453],{"class":262},[252,22764,22765,22767,22769],{"class":254,"line":1781},[252,22766,16006],{"class":262},[252,22768,11691],{"class":2102},[252,22770,5776],{"class":262},[252,22772,22773],{"class":254,"line":1786},[252,22774,22775],{"class":321},"    \u002F\u002F2.通过类名访问\n",[252,22777,22778,22780,22782,22784],{"class":254,"line":1792},[252,22779,18658],{"class":2102},[252,22781,17872],{"class":262},[252,22783,11691],{"class":2102},[252,22785,5776],{"class":262},[252,22787,22788],{"class":254,"line":1813},[252,22789,1704],{"class":262},[207,22791,22792],{"start":170},[210,22793,22794],{},"静态成员函数只能访问静态成员变量",[244,22796,22798],{"className":246,"code":22797,"language":248,"meta":169,"style":169},"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",[22,22799,22800,22806,22810,22814,22818,22828,22832,22846,22851,22863,22867,22878,22888,22892,22896,22900,22910,22914,22927,22931,22935,22939,22943,22957,22965,22969,22973,22977,22981,22989,22993,23003,23008,23012,23020,23024,23030],{"__ignoreMap":169},[252,22801,22802,22804],{"class":254,"line":255},[252,22803,14834],{"class":258},[252,22805,15311],{"class":2102},[252,22807,22808],{"class":254,"line":170},[252,22809,1685],{"class":262},[252,22811,22812],{"class":254,"line":1318},[252,22813,14856],{"class":258},[252,22815,22816],{"class":254,"line":1333},[252,22817,22699],{"class":321},[252,22819,22820,22822,22824,22826],{"class":254,"line":1339},[252,22821,11160],{"class":258},[252,22823,22706],{"class":258},[252,22825,11525],{"class":2102},[252,22827,2115],{"class":262},[252,22829,22830],{"class":254,"line":1353},[252,22831,2169],{"class":262},[252,22833,22834,22837,22839,22841,22843],{"class":254,"line":1359},[252,22835,22836],{"class":262},"        m_A",[252,22838,308],{"class":258},[252,22840,574],{"class":311},[252,22842,318],{"class":262},[252,22844,22845],{"class":321}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[252,22847,22848],{"class":254,"line":1450},[252,22849,22850],{"class":321},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[252,22852,22853,22855,22857,22859,22861],{"class":254,"line":1456},[252,22854,22719],{"class":262},[252,22856,1307],{"class":258},[252,22858,22724],{"class":367},[252,22860,1307],{"class":258},[252,22862,1330],{"class":262},[252,22864,22865],{"class":254,"line":1468},[252,22866,2326],{"class":262},[252,22868,22869,22871,22873,22875],{"class":254,"line":1751},[252,22870,11160],{"class":258},[252,22872,2521],{"class":258},[252,22874,15588],{"class":262},[252,22876,22877],{"class":321}," \u002F\u002F静态成员变量\n",[252,22879,22880,22882,22885],{"class":254,"line":1756},[252,22881,2124],{"class":258},[252,22883,22884],{"class":262}," m_B;",[252,22886,22887],{"class":321}," \u002F\u002F非静态成员变量\n",[252,22889,22890],{"class":254,"line":1762},[252,22891,2539],{"emptyLinePlaceholder":181},[252,22893,22894],{"class":254,"line":1767},[252,22895,15362],{"class":258},[252,22897,22898],{"class":254,"line":1781},[252,22899,22512],{"class":321},[252,22901,22902,22904,22906,22908],{"class":254,"line":1786},[252,22903,11160],{"class":258},[252,22905,22706],{"class":258},[252,22907,13758],{"class":2102},[252,22909,2115],{"class":262},[252,22911,22912],{"class":254,"line":1792},[252,22913,2169],{"class":262},[252,22915,22916,22918,22920,22923,22925],{"class":254,"line":1813},[252,22917,3590],{"class":262},[252,22919,1307],{"class":258},[252,22921,22922],{"class":367},"\"这是私有权限下的静态函数调用\"",[252,22924,1307],{"class":258},[252,22926,1330],{"class":262},[252,22928,22929],{"class":254,"line":1818},[252,22930,2326],{"class":262},[252,22932,22933],{"class":254,"line":1832},[252,22934,2539],{"emptyLinePlaceholder":181},[252,22936,22937],{"class":254,"line":1837},[252,22938,2539],{"emptyLinePlaceholder":181},[252,22940,22941],{"class":254,"line":1866},[252,22942,4134],{"class":262},[252,22944,22945,22947,22949,22951,22953,22955],{"class":254,"line":1871},[252,22946,266],{"class":258},[252,22948,15709],{"class":2102},[252,22950,22342],{"class":262},[252,22952,308],{"class":258},[252,22954,454],{"class":311},[252,22956,1429],{"class":262},[252,22958,22959,22961,22963],{"class":254,"line":1888},[252,22960,5504],{"class":258},[252,22962,5728],{"class":2102},[252,22964,2115],{"class":262},[252,22966,22967],{"class":254,"line":1893},[252,22968,1685],{"class":262},[252,22970,22971],{"class":254,"line":1898},[252,22972,22753],{"class":321},[252,22974,22975],{"class":254,"line":1903},[252,22976,22758],{"class":321},[252,22978,22979],{"class":254,"line":1917},[252,22980,15453],{"class":262},[252,22982,22983,22985,22987],{"class":254,"line":1922},[252,22984,16006],{"class":262},[252,22986,11691],{"class":2102},[252,22988,5776],{"class":262},[252,22990,22991],{"class":254,"line":2716},[252,22992,22775],{"class":321},[252,22994,22995,22997,22999,23001],{"class":254,"line":2730},[252,22996,18658],{"class":2102},[252,22998,17872],{"class":262},[252,23000,11691],{"class":2102},[252,23002,5776],{"class":262},[252,23004,23005],{"class":254,"line":2738},[252,23006,23007],{"class":321},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[252,23009,23010],{"class":254,"line":2743},[252,23011,1704],{"class":262},[252,23013,23014,23016,23018],{"class":254,"line":2749},[252,23015,266],{"class":258},[252,23017,2112],{"class":2102},[252,23019,2115],{"class":262},[252,23021,23022],{"class":254,"line":2755},[252,23023,1685],{"class":262},[252,23025,23026,23028],{"class":254,"line":2760},[252,23027,5773],{"class":2102},[252,23029,5776],{"class":262},[252,23031,23032],{"class":254,"line":8088},[252,23033,1704],{"class":262},[224,23035,23037],{"id":23036},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22137,23039,23041],{"id":23040},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23043,23044],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23046,23047],{},"只有非静态成员变量才属于类的对象上",[23049,23050,23052],"h5",{"id":23051},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[244,23054,23056],{"className":246,"code":23055,"language":248,"meta":169,"style":169},"#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",[22,23057,23058,23065,23075,23081,23085,23089,23093,23101,23105,23109,23132,23136,23144,23148,23154],{"__ignoreMap":169},[252,23059,23060,23062],{"class":254,"line":255},[252,23061,2088],{"class":258},[252,23063,23064],{"class":367},"\u003Ciostraem>\n",[252,23066,23067,23069,23071,23073],{"class":254,"line":170},[252,23068,2096],{"class":258},[252,23070,2099],{"class":258},[252,23072,2103],{"class":2102},[252,23074,1429],{"class":262},[252,23076,23077,23079],{"class":254,"line":1318},[252,23078,14834],{"class":258},[252,23080,15311],{"class":2102},[252,23082,23083],{"class":254,"line":1333},[252,23084,1685],{"class":262},[252,23086,23087],{"class":254,"line":1339},[252,23088,2539],{"emptyLinePlaceholder":181},[252,23090,23091],{"class":254,"line":1353},[252,23092,4134],{"class":262},[252,23094,23095,23097,23099],{"class":254,"line":1359},[252,23096,5504],{"class":258},[252,23098,5728],{"class":2102},[252,23100,2115],{"class":262},[252,23102,23103],{"class":254,"line":1450},[252,23104,1685],{"class":262},[252,23106,23107],{"class":254,"line":1456},[252,23108,15453],{"class":262},[252,23110,23111,23113,23115,23118,23120,23123,23125,23127,23129],{"class":254,"line":1468},[252,23112,1690],{"class":262},[252,23114,1307],{"class":258},[252,23116,23117],{"class":367},"\"size of p=\"",[252,23119,1307],{"class":258},[252,23121,23122],{"class":2102},"sizeoif",[252,23124,6679],{"class":262},[252,23126,1307],{"class":258},[252,23128,1377],{"class":262},[252,23130,23131],{"class":321}," \u002F\u002F查看这个空类的占用的内存空间\n",[252,23133,23134],{"class":254,"line":1751},[252,23135,1704],{"class":262},[252,23137,23138,23140,23142],{"class":254,"line":1756},[252,23139,266],{"class":258},[252,23141,2112],{"class":2102},[252,23143,2115],{"class":262},[252,23145,23146],{"class":254,"line":1762},[252,23147,1685],{"class":262},[252,23149,23150,23152],{"class":254,"line":1767},[252,23151,5773],{"class":2102},[252,23153,5776],{"class":262},[252,23155,23156],{"class":254,"line":1781},[252,23157,1704],{"class":262},[19,23159,23160],{},"输出结果为：size of p=1",[19,23162,23163],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23165,23166],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23049,23168,23170],{"id":23169},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[244,23172,23174],{"className":246,"code":23173,"language":248,"meta":169,"style":169},"#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",[22,23175,23176,23182,23192,23200,23204,23213,23217,23225,23229,23233,23252,23256,23260,23268,23272,23278],{"__ignoreMap":169},[252,23177,23178,23180],{"class":254,"line":255},[252,23179,2088],{"class":258},[252,23181,2091],{"class":367},[252,23183,23184,23186,23188,23190],{"class":254,"line":170},[252,23185,2096],{"class":258},[252,23187,2099],{"class":258},[252,23189,2103],{"class":2102},[252,23191,1429],{"class":262},[252,23193,23194,23196,23198],{"class":254,"line":1318},[252,23195,14834],{"class":258},[252,23197,15709],{"class":2102},[252,23199,2813],{"class":262},[252,23201,23202],{"class":254,"line":1333},[252,23203,1685],{"class":262},[252,23205,23206,23208,23210],{"class":254,"line":1339},[252,23207,2124],{"class":258},[252,23209,15588],{"class":262},[252,23211,23212],{"class":321},"\u002F\u002F非静态成员变量\n",[252,23214,23215],{"class":254,"line":1353},[252,23216,4134],{"class":262},[252,23218,23219,23221,23223],{"class":254,"line":1359},[252,23220,5504],{"class":258},[252,23222,5728],{"class":2102},[252,23224,2115],{"class":262},[252,23226,23227],{"class":254,"line":1450},[252,23228,1685],{"class":262},[252,23230,23231],{"class":254,"line":1456},[252,23232,15453],{"class":262},[252,23234,23235,23237,23239,23241,23243,23245,23247,23249],{"class":254,"line":1468},[252,23236,1690],{"class":262},[252,23238,1307],{"class":258},[252,23240,23117],{"class":367},[252,23242,1511],{"class":258},[252,23244,6679],{"class":262},[252,23246,1307],{"class":258},[252,23248,1377],{"class":262},[252,23250,23251],{"class":321}," \u002F\u002F查看不是空对象时占用多少内存\n",[252,23253,23254],{"class":254,"line":1751},[252,23255,2539],{"emptyLinePlaceholder":181},[252,23257,23258],{"class":254,"line":1756},[252,23259,1704],{"class":262},[252,23261,23262,23264,23266],{"class":254,"line":1762},[252,23263,266],{"class":258},[252,23265,2112],{"class":2102},[252,23267,2115],{"class":262},[252,23269,23270],{"class":254,"line":1767},[252,23271,1685],{"class":262},[252,23273,23274,23276],{"class":254,"line":1781},[252,23275,5773],{"class":2102},[252,23277,5776],{"class":262},[252,23279,23280],{"class":254,"line":1786},[252,23281,1704],{"class":262},[19,23283,23284],{},"输出结果：size of p=4",[19,23286,23287],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[207,23289,23290],{},[210,23291,23292],{},"如果加上非静态成员变量，Person类修改如下",[244,23294,23296],{"className":246,"code":23295,"language":248,"meta":169,"style":169},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[22,23297,23298,23304,23308,23314,23322,23326,23331],{"__ignoreMap":169},[252,23299,23300,23302],{"class":254,"line":255},[252,23301,14834],{"class":258},[252,23303,15311],{"class":2102},[252,23305,23306],{"class":254,"line":170},[252,23307,1685],{"class":262},[252,23309,23310,23312],{"class":254,"line":1318},[252,23311,2124],{"class":258},[252,23313,21531],{"class":262},[252,23315,23316,23318,23320],{"class":254,"line":1333},[252,23317,11160],{"class":258},[252,23319,2521],{"class":258},[252,23321,21538],{"class":262},[252,23323,23324],{"class":254,"line":1339},[252,23325,4134],{"class":262},[252,23327,23328],{"class":254,"line":1353},[252,23329,23330],{"class":321},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[252,23332,23333,23335,23337,23339,23341,23343],{"class":254,"line":1359},[252,23334,266],{"class":258},[252,23336,15709],{"class":2102},[252,23338,22551],{"class":262},[252,23340,308],{"class":258},[252,23342,454],{"class":311},[252,23344,1429],{"class":262},[19,23346,23347],{},"输出结果：4",[19,23349,23350],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[207,23352,23353],{"start":170},[210,23354,23355],{},"加上非静态成员函数",[244,23357,23359],{"className":246,"code":23358,"language":248,"meta":169,"style":169},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[22,23360,23361,23368,23372,23378,23386,23390,23394,23398],{"__ignoreMap":169},[252,23362,23363,23365],{"class":254,"line":255},[252,23364,14834],{"class":258},[252,23366,23367],{"class":2102},"  Person\n",[252,23369,23370],{"class":254,"line":170},[252,23371,1685],{"class":262},[252,23373,23374,23376],{"class":254,"line":1318},[252,23375,2124],{"class":258},[252,23377,21531],{"class":262},[252,23379,23380,23382,23384],{"class":254,"line":1333},[252,23381,15049],{"class":258},[252,23383,11525],{"class":2102},[252,23385,2115],{"class":262},[252,23387,23388],{"class":254,"line":1339},[252,23389,2169],{"class":262},[252,23391,23392],{"class":254,"line":1353},[252,23393,2539],{"emptyLinePlaceholder":181},[252,23395,23396],{"class":254,"line":1359},[252,23397,2326],{"class":262},[252,23399,23400],{"class":254,"line":1450},[252,23401,4134],{"class":262},[19,23403,23404],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[207,23406,23407],{"start":1318},[210,23408,23409],{},"加上静态成员函数",[244,23411,23413],{"className":246,"code":23412,"language":248,"meta":169,"style":169},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[22,23414,23415,23421,23425,23431,23439,23443,23447,23451,23462,23466,23470,23474],{"__ignoreMap":169},[252,23416,23417,23419],{"class":254,"line":255},[252,23418,14834],{"class":258},[252,23420,23367],{"class":2102},[252,23422,23423],{"class":254,"line":170},[252,23424,1685],{"class":262},[252,23426,23427,23429],{"class":254,"line":1318},[252,23428,2124],{"class":258},[252,23430,21531],{"class":262},[252,23432,23433,23435,23437],{"class":254,"line":1333},[252,23434,15049],{"class":258},[252,23436,11525],{"class":2102},[252,23438,2115],{"class":262},[252,23440,23441],{"class":254,"line":1339},[252,23442,2169],{"class":262},[252,23444,23445],{"class":254,"line":1353},[252,23446,2539],{"emptyLinePlaceholder":181},[252,23448,23449],{"class":254,"line":1359},[252,23450,2326],{"class":262},[252,23452,23453,23455,23457,23460],{"class":254,"line":1450},[252,23454,11160],{"class":258},[252,23456,22706],{"class":258},[252,23458,23459],{"class":2102}," func1",[252,23461,2115],{"class":262},[252,23463,23464],{"class":254,"line":1456},[252,23465,2169],{"class":262},[252,23467,23468],{"class":254,"line":1468},[252,23469,2539],{"emptyLinePlaceholder":181},[252,23471,23472],{"class":254,"line":1751},[252,23473,2326],{"class":262},[252,23475,23476],{"class":254,"line":1756},[252,23477,4134],{"class":262},[19,23479,23347],{},[19,23481,23482],{},"解释：静态成员函数也不属于类上",[5266,23484,7814],{},{"title":169,"searchDepth":170,"depth":170,"links":23486},[23487,23493],{"id":14785,"depth":170,"text":14786,"children":23488},[23489,23490,23491,23492],{"id":14789,"depth":1318,"text":14790},{"id":15514,"depth":1318,"text":15515},{"id":15686,"depth":1318,"text":15687},{"id":16145,"depth":1318,"text":16146},{"id":18517,"depth":170,"text":18518,"children":23494},[23495,23496,23497,23498,23499,23500,23501,23502,23503],{"id":18529,"depth":1318,"text":18530},{"id":18821,"depth":1318,"text":18822},{"id":19312,"depth":1318,"text":19313},{"id":20409,"depth":1318,"text":20410},{"id":20832,"depth":1318,"text":20833},{"id":21311,"depth":1318,"text":21312},{"id":21686,"depth":1318,"text":21687},{"id":22099,"depth":1318,"text":22100},{"id":23036,"depth":1318,"text":23037},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14750,"description":23504},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23511,"title":248,"body":23512,"description":178,"extension":179,"meta":23516,"navigation":181,"path":23518,"seo":23519,"stem":23520,"__hash__":23521},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23513,"toc":23514},[],{"title":169,"searchDepth":170,"depth":170,"links":23515},[],{"category":23517},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":248,"description":178},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23523,"title":23524,"body":23525,"description":169,"extension":179,"meta":24116,"navigation":181,"path":24117,"seo":24118,"stem":24119,"__hash__":24120},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23526,"toc":24098},[23527,23530,23534,23537,23540,23543,23561,23566,23569,23572,23575,23578,23583,23586,23591,23594,23597,23601,23604,23607,23613,23616,23634,23638,23642,23645,23650,23653,23657,23660,23673,23676,23680,23683,23686,23689,23714,23717,23726,23737,23752,23784,23788,23795,23803,23807,23810,23813,23818,23822,23825,23828,23833,23836,23840,23843,23846,23851,23854,23858,23863,23867,23934,23938,23941,23944,23947,23950,23953,23959,23980,23983,23997,24006,24010,24013,24016,24021,24024,24029,24034,24037,24040,24045,24050,24053,24058,24063,24066,24071,24076,24079,24082,24087,24090,24095],[10,23528,23524],{"id":23529},"_1强化学习基本认识",[14,23531,23533],{"id":23532},"_11什么是强化学习","1.1.什么是强化学习",[19,23535,23536],{},"强化学习有两部分组成：智能体和环境；",[19,23538,23539],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23541,23542],{},"强化学习与监督学习的区别:",[207,23544,23545,23548,23551,23554],{},[210,23546,23547],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[210,23549,23550],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[210,23552,23553],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[210,23555,23556,23557,23560],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[412,23558,23559],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23562,23563],{},[1601,23564],{"alt":169,"src":23565},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23567,23568],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23570,23571],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23573,23574],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23576,23577],{},"获取奖励",[19,23579,23580],{},[1601,23581],{"alt":169,"src":23582},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23584,23585],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23587,23588],{},[1601,23589],{"alt":169,"src":23590},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23592,23593],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23595,23596],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23598,23600],{"id":23599},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23602,23603],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23605,23606],{},"具身智能中的应用",[19,23608,23609,23612],{},[412,23610,23611],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23614,23615],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23617,23618,23619,23622,23623,23626,23627,23630,23631],{},"机器人是",[412,23620,23621],{},"躯体","，深度学习是",[412,23624,23625],{},"神经元****网络","，VLA是",[412,23628,23629],{},"通用的行为逻辑","，而强化学习是",[412,23632,23633],{},"教练",[14,23635,23637],{"id":23636},"_13序列决策","1.3.序列决策",[224,23639,23641],{"id":23640},"_131智能体与环境","1.3.1.智能体与环境",[19,23643,23644],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23646,23647],{},[1601,23648],{"alt":169,"src":23649},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23651,23652],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[224,23654,23656],{"id":23655},"_132奖励","1.3.2.奖励",[19,23658,23659],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,23661,23662,23663,23672],{},"取某个策略的表现如何。强化学习的目的就是",[412,23664,23665,23666,23671],{},"最大化",[412,23667,23668],{},[412,23669,23670],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,23674,23675],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[224,23677,23679],{"id":23678},"_133序列决策","1.3.3.序列决策",[19,23681,23682],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,23684,23685],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,23687,23688],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,23690,23691,23695,23696,23698,23699,23701,23702,23704,23705,13935,23708,13935,23711],{},[23692,23693,23694],"em",{},"Ht"," = ",[23692,23697,859],{},"1*, a",[23692,23700,480],{},", r",[23692,23703,480],{},", . . . ,* ",[23692,23706,23707],{},"ot",[23692,23709,23710],{},", at ,",[23692,23712,23713],{},"rt",[19,23715,23716],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,23718,23719,23695,23722,1797,23724,692],{},[23692,23720,23721],{},"st",[23692,23723,315],{},[23692,23725,23694],{},[19,23727,23728,23729,23732,23733,23736],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[412,23730,23731],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[412,23734,23735],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,23738,23739,23740,23743,23744,23747,23748,23751],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[412,23741,23742],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[412,23745,23746],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23692,23749,23750],{},"S, A, T, R, Ω, O, γ",")。",[19,23753,23754,23755,23757,23758,23760,23761,263,23763,23766,23767,23769,23770,263,23773,23776,23777,23779,23780,23783],{},"其中 ",[23692,23756,952],{}," 表示状态空间，为隐变量，",[23692,23759,495],{}," 为动作空间，",[23692,23762,977],{},[23692,23764,23765],{},"s ′ |s, a",") 为状态转移概率，",[23692,23768,927],{}," 为奖励函数，",[23692,23771,23772],{},"Ω",[23692,23774,23775],{},"o|s, a",") 为观测概率，",[23692,23778,853],{}," 为观测空间，",[23692,23781,23782],{},"γ"," 为折扣因子。",[14,23785,23787],{"id":23786},"_14动作空间","1.4.动作空间",[19,23789,23790,23791,23794],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[412,23792,23793],{},"动作空间"," ，动作空间分为:",[207,23796,23797,23800],{},[210,23798,23799],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[210,23801,23802],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23804,23806],{"id":23805},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,23808,23809],{},"由策略、价值函数、模型三部分组成",[19,23811,23812],{},"这三者组成马尔可夫决策过程",[19,23814,23815],{},[1601,23816],{"alt":169,"src":23817},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[224,23819,23821],{"id":23820},"_151策略","1.5.1.策略",[19,23823,23824],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,23826,23827],{},"策略可分为两种：",[19,23829,23830],{},[1601,23831],{"alt":169,"src":23832},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,23834,23835],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[224,23837,23839],{"id":23838},"_152价值函数","1.5.2.价值函数",[19,23841,23842],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,23844,23845],{},"价值函数中有一个折扣因子，类似于存款利息",[19,23847,23848],{},[1601,23849],{"alt":169,"src":23850},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,23852,23853],{},"进入某个状态采取的最优动作可以通过Q函数得到",[224,23855,23857],{"id":23856},"_153模型","1.5.3.模型",[19,23859,23860],{},[1601,23861],{"alt":169,"src":23862},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23864,23866],{"id":23865},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[400,23868,23869,23880],{},[403,23870,23871],{},[406,23872,23873,23877],{},[409,23874,23876],{"align":23875},"left","类型",[409,23878,23879],{"align":23875},"特点",[447,23881,23882,23892,23902,23912,23924],{},[406,23883,23884,23889],{},[452,23885,23886],{"align":23875},[412,23887,23888],{},"基于价值的智能体",[452,23890,23891],{"align":23875},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[406,23893,23894,23899],{},[452,23895,23896],{"align":23875},[412,23897,23898],{},"基于策略的智能体",[452,23900,23901],{"align":23875},"直接学习策略，没有学习价值函数",[406,23903,23904,23909],{},[452,23905,23906],{"align":23875},[412,23907,23908],{},"演员-评论员智能体",[452,23910,23911],{"align":23875},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[406,23913,23914,23919],{},[452,23915,23916],{"align":23875},[412,23917,23918],{},"有模型强化学习智能体",[452,23920,23921],{"align":23875},[1601,23922],{"alt":169,"src":23923},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[406,23925,23926,23931],{},[452,23927,23928],{"align":23875},[412,23929,23930],{},"免模型强化学习智能体",[452,23932,23933],{"align":23875},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,23935,23937],{"id":23936},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,23939,23940],{},"学习和规划是序列决策的两个基本问题",[19,23942,23943],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,23945,23946],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,23948,23949],{},"强化学习用到的库：Gym",[19,23951,23952],{},"Gym可以检验强化学习算法的优劣",[19,23954,23955,23958],{},[412,23956,23957],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[244,23960,23964],{"className":23961,"code":23962,"language":23963,"meta":169,"style":169},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[22,23965,23966],{"__ignoreMap":169},[252,23967,23968,23971,23974,23977],{"class":254,"line":255},[252,23969,23970],{"class":2102},"pip",[252,23972,23973],{"class":367}," install",[252,23975,23976],{"class":367}," gym==",[252,23978,23979],{"class":311},"0.25.2\n",[19,23981,23982],{},"显示图形界面需要",[244,23984,23986],{"className":23961,"code":23985,"language":23963,"meta":169,"style":169},"pip install pygame\n",[22,23987,23988],{"__ignoreMap":169},[252,23989,23990,23992,23994],{"class":254,"line":255},[252,23991,23970],{"class":2102},[252,23993,23973],{"class":367},[252,23995,23996],{"class":367}," pygame\n",[19,23998,23999,24000],{},"有关Gym库的相关文档介绍：",[501,24001,24005],{"href":24002,"rel":24003},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24004],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24007,24009],{"id":24008},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24011,24012],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24014,24015],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24017,24018],{},[1601,24019],{"alt":169,"src":24020},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24022,24023],{},"折扣率需要自己来设定",[19,24025,24026],{},[1601,24027],{"alt":169,"src":24028},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[207,24030,24031],{},[210,24032,24033],{},"状态转移函数：",[19,24035,24036],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24038,24039],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24041,24042],{},[1601,24043],{"alt":169,"src":24044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[207,24046,24047],{"start":170},[210,24048,24049],{},"动作价值函数：",[19,24051,24052],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24054,24055],{},[1601,24056],{"alt":169,"src":24057},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[207,24059,24060],{"start":1318},[210,24061,24062],{},"最优动作价值函数：",[19,24064,24065],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[19,24067,24068],{},[1601,24069],{"alt":169,"src":24070},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[207,24072,24073],{"start":1333},[210,24074,24075],{},"状态价值函数:",[19,24077,24078],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24080,24081],{},"它衡量的是“一个具体动作”的长期价值",[19,24083,24084],{},[1601,24085],{"alt":169,"src":24086},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24088,24089],{},"几个价值函数之间的比较：",[19,24091,24092],{},[1601,24093],{"alt":169,"src":24094},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5266,24096,24097],{},"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":169,"searchDepth":170,"depth":170,"links":24099},[24100,24101,24102,24107,24108,24113,24114,24115],{"id":23532,"depth":170,"text":23533},{"id":23599,"depth":170,"text":23600},{"id":23636,"depth":170,"text":23637,"children":24103},[24104,24105,24106],{"id":23640,"depth":1318,"text":23641},{"id":23655,"depth":1318,"text":23656},{"id":23678,"depth":1318,"text":23679},{"id":23786,"depth":170,"text":23787},{"id":23805,"depth":170,"text":23806,"children":24109},[24110,24111,24112],{"id":23820,"depth":1318,"text":23821},{"id":23838,"depth":1318,"text":23839},{"id":23856,"depth":1318,"text":23857},{"id":23865,"depth":170,"text":23866},{"id":23936,"depth":170,"text":23937},{"id":24008,"depth":170,"text":24009},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23524,"description":169},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24122,"title":24123,"body":24124,"description":24131,"extension":179,"meta":24142,"navigation":181,"path":24143,"seo":24144,"stem":24145,"__hash__":24146},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24125,"toc":24140},[24126,24129,24132,24137],[10,24127,24123],{"id":24128},"_2马尔可夫决策过程",[19,24130,24131],{},"这是强化学习的基本框架",[19,24133,24134],{},[1601,24135],{"alt":169,"src":24136},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24138,24139],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":169,"searchDepth":170,"depth":170,"links":24141},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24123,"description":24131},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24148,"title":24149,"body":24150,"description":169,"extension":179,"meta":24266,"navigation":181,"path":24267,"seo":24268,"stem":24269,"__hash__":24270},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24151,"toc":24261},[24152,24155,24159,24162,24167,24172,24175,24180,24183,24188,24191,24195,24200,24203,24208,24213,24218,24221,24225,24230,24233,24238,24243,24248,24253,24256],[10,24153,24149],{"id":24154},"_3动作价值函数",[14,24156,24158],{"id":24157},"_31dqn","3.1.DQN",[19,24160,24161],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24163,24164],{},[1601,24165],{"alt":169,"src":24166},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24168,24169],{},[1601,24170],{"alt":169,"src":24171},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24173,24174],{},"DQN算法的描述：",[19,24176,24177],{},[1601,24178],{"alt":169,"src":24179},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24181,24182],{},"这里的Dense指的是全连接层",[19,24184,24185],{},[1601,24186],{"alt":169,"src":24187},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24189,24190],{},"当前观测的状态为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算法",[14,24192,24194],{"id":24193},"_32dqn的举例","3.2.DQN的举例",[19,24196,24197],{},[1601,24198],{"alt":169,"src":24199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24201,24202],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24204,24205],{},[1601,24206],{"alt":169,"src":24207},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24209,24210],{},[1601,24211],{"alt":169,"src":24212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24214,24215],{},[1601,24216],{"alt":169,"src":24217},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24219,24220],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24222,24224],{"id":24223},"_33td算法","3.3.TD算法",[19,24226,24227],{},[1601,24228],{"alt":169,"src":24229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24231,24232],{},"强化学习TD算法公式的粗略解释：",[19,24234,24235],{},[1601,24236],{"alt":169,"src":24237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24239,24240],{},[1601,24241],{"alt":169,"src":24242},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24244,24245],{},[1601,24246],{"alt":169,"src":24247},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24249,24250],{},[1601,24251],{"alt":169,"src":24252},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24254,24255],{},"TD算法总结：",[19,24257,24258],{},[1601,24259],{"alt":169,"src":24260},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":169,"searchDepth":170,"depth":170,"links":24262},[24263,24264,24265],{"id":24157,"depth":170,"text":24158},{"id":24193,"depth":170,"text":24194},{"id":24223,"depth":170,"text":24224},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24149,"description":169},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24272,"title":24273,"body":24274,"description":169,"extension":179,"meta":24507,"navigation":181,"path":24508,"seo":24509,"stem":24510,"__hash__":24511},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24275,"toc":24503},[24276,24279,24283,24286,24289,24294,24299,24302,24307,24312,24315,24320,24323,24328,24331,24336,24339,24344,24347,24352,24357,24360,24365,24368,24371,24376,24379,24384,24389,24393,24396,24399,24404,24409,24412,24417,24422,24425,24430,24433,24436,24441,24444,24449,24452,24457,24462,24465,24470,24475,24478,24483,24486,24491,24494],[10,24277,24273],{"id":24278},"_4策略学习",[14,24280,24282],{"id":24281},"_41概念描述","4.1.概念描述",[19,24284,24285],{},"用神经网络（策略网络）近似策略函数",[19,24287,24288],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24290,24291],{},[1601,24292],{"alt":169,"src":24293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24295,24296],{},[1601,24297],{"alt":169,"src":24298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24300,24301],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24303,24304],{},[1601,24305],{"alt":169,"src":24306},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24308,24309],{},[1601,24310],{"alt":169,"src":24311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24313,24314],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24316,24317],{},[1601,24318],{"alt":169,"src":24319},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24321,24322],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24324,24325],{},[1601,24326],{"alt":169,"src":24327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24329,24330],{},"改进theta要用到策略梯度算法",[19,24332,24333],{},[1601,24334],{"alt":169,"src":24335},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24337,24338],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24340,24341],{},[1601,24342],{"alt":169,"src":24343},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24345,24346],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24348,24349],{},[1601,24350],{"alt":169,"src":24351},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24353,24354],{},[1601,24355],{"alt":169,"src":24356},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24358,24359],{},"梯度公式总结：",[19,24361,24362],{},[1601,24363],{"alt":169,"src":24364},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24366,24367],{},"两个公式的分别应用场景：",[19,24369,24370],{},"对于离散的动作：",[19,24372,24373],{},[1601,24374],{"alt":169,"src":24375},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24377,24378],{},"对于连续的动作：",[19,24380,24381],{},[1601,24382],{"alt":169,"src":24383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24385,24386],{},[1601,24387],{"alt":169,"src":24388},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24390,24392],{"id":24391},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24394,24395],{},"使用蒙特卡洛来近似计算策略梯度",[19,24397,24398],{},"蒙特卡洛法的解释如下：",[19,24400,24401],{},[1601,24402],{"alt":169,"src":24403},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24405,24406],{},[1601,24407],{"alt":169,"src":24408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24410,24411],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[207,24413,24414],{},[210,24415,24416],{},"方法一：reinforce算法",[19,24418,24419],{},[1601,24420],{"alt":169,"src":24421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24423,24424],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[207,24426,24427],{"start":170},[210,24428,24429],{},"方法二：actor-critic算法",[19,24431,24432],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24434,24435],{},"两个网络的构建：",[19,24437,24438],{},[1601,24439],{"alt":169,"src":24440},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24442,24443],{},"actor网路：",[19,24445,24446],{},[1601,24447],{"alt":169,"src":24448},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24450,24451],{},"critic网络",[19,24453,24454],{},[1601,24455],{"alt":169,"src":24456},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[207,24458,24459],{"start":1318},[210,24460,24461],{},"网络的训练",[19,24463,24464],{},"网络描述",[19,24466,24467],{},[1601,24468],{"alt":169,"src":24469},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24471,24472],{},[1601,24473],{"alt":169,"src":24474},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24476,24477],{},"TD算法更新梯度：",[19,24479,24480],{},[1601,24481],{"alt":169,"src":24482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24484,24485],{},"策略网络更新梯度：",[19,24487,24488],{},[1601,24489],{"alt":169,"src":24490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24492,24493],{},"训练整个流程的具体描述：",[19,24495,24496,24499,24500],{},[1601,24497],{"alt":169,"src":24498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1601,24501],{"alt":169,"src":24502},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":169,"searchDepth":170,"depth":170,"links":24504},[24505,24506],{"id":24281,"depth":170,"text":24282},{"id":24391,"depth":170,"text":24392},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24273,"description":169},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24513,"title":24514,"body":24515,"description":24522,"extension":179,"meta":24572,"navigation":181,"path":24573,"seo":24574,"stem":24575,"__hash__":24576},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24516,"toc":24568},[24517,24520,24523,24527,24530,24535,24539,24542,24547,24550,24555,24560,24563],[10,24518,24514],{"id":24519},"_5alphago算法",[19,24521,24522],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24524,24526],{"id":24525},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24528,24529],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24531,24532],{},[1601,24533],{"alt":169,"src":24534},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24536,24538],{"id":24537},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24540,24541],{},"采用强化学习的方式训练策略网络",[19,24543,24544],{},[1601,24545],{"alt":169,"src":24546},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24548,24549],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24551,24552],{},[1601,24553],{"alt":169,"src":24554},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24556,24557],{},[1601,24558],{"alt":169,"src":24559},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24561,24562],{},"强化学习训练策略网络的总结：",[19,24564,24565],{},[1601,24566],{"alt":169,"src":24567},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":169,"searchDepth":170,"depth":170,"links":24569},[24570,24571],{"id":24525,"depth":170,"text":24526},{"id":24537,"depth":170,"text":24538},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24514,"description":24522},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24578,"title":24579,"body":24580,"description":24587,"extension":179,"meta":24590,"navigation":181,"path":24591,"seo":24592,"stem":24593,"__hash__":24594},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24581,"toc":24588},[24582,24585],[10,24583,24579],{"id":24584},"_6价值网络",[19,24586,24587],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":169,"searchDepth":170,"depth":170,"links":24589},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24579,"description":24587},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24596,"title":24597,"body":24598,"description":24602,"extension":179,"meta":24603,"navigation":181,"path":24604,"seo":24605,"stem":24606,"__hash__":24607},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24599,"toc":24600},[],{"title":169,"searchDepth":170,"depth":170,"links":24601},[],"记录自己的强化学习笔记。",{"category":23517},"\u002Fwiki\u002F2025-12-04",{"title":24597,"description":24602},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24609,"title":24610,"body":24611,"description":178,"extension":179,"meta":24650,"navigation":181,"path":24651,"seo":24652,"stem":24653,"__hash__":24654},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24612,"toc":24648},[24613,24616,24619,24625,24628,24634,24637,24642,24645],[10,24614,24610],{"id":24615},"_1-项目概览与官方资源",[19,24617,24618],{},"官方文档：",[19,24620,24621],{},[501,24622,24623],{"href":24623,"rel":24624},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24004],[19,24626,24627],{},"官方代码仓库：",[19,24629,24630],{},[501,24631,24632],{"href":24632,"rel":24633},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24004],[19,24635,24636],{},"复现大体流程：",[19,24638,24639],{},[1601,24640],{"alt":169,"src":24641},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24643,24644],{},"本教程的目标是打通这条链路：",[19,24646,24647],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":169,"searchDepth":170,"depth":170,"links":24649},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24610,"description":178},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24656,"title":24657,"body":24658,"description":178,"extension":179,"meta":24774,"navigation":181,"path":24775,"seo":24776,"stem":24777,"__hash__":24778},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24659,"toc":24769},[24660,24663,24667,24670,24677,24681,24684,24693,24703,24707,24737,24740,24766],[10,24661,24657],{"id":24662},"_2-环境准备与设备连接",[14,24664,24666],{"id":24665},"_21-系统与环境","2.1 系统与环境",[19,24668,24669],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,24671,24672,24673,24676],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[22,24674,24675],{},"lerobot"," 依赖。",[14,24678,24680],{"id":24679},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,24682,24683],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[244,24685,24687],{"className":23961,"code":24686,"language":23963,"meta":169,"style":169},"lerobot-find-out\n",[22,24688,24689],{"__ignoreMap":169},[252,24690,24691],{"class":254,"line":255},[252,24692,24686],{"class":2102},[19,24694,24695,24696,475,24699,24702],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[22,24697,24698],{},"\u002Fdev\u002FttyACM0",[22,24700,24701],{},"\u002Fdev\u002FttyACM1","）。",[14,24704,24706],{"id":24705},"_23-串口授权","2.3 串口授权",[244,24708,24710],{"className":23961,"code":24709,"language":23963,"meta":169,"style":169},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[22,24711,24712,24726],{"__ignoreMap":169},[252,24713,24714,24717,24720,24723],{"class":254,"line":255},[252,24715,24716],{"class":2102},"sudo",[252,24718,24719],{"class":367}," chmod",[252,24721,24722],{"class":311}," 666",[252,24724,24725],{"class":367}," \u002Fdev\u002FttyACM0\n",[252,24727,24728,24730,24732,24734],{"class":254,"line":170},[252,24729,24716],{"class":2102},[252,24731,24719],{"class":367},[252,24733,24722],{"class":311},[252,24735,24736],{"class":367}," \u002Fdev\u002FttyACM1\n",[19,24738,24739],{},"说明：",[1270,24741,24742,24747,24753,24763],{},[210,24743,24744,24746],{},[22,24745,24716],{},"：以 root 权限执行命令。",[210,24748,24749,24752],{},[22,24750,24751],{},"chmod","：修改设备节点权限。",[210,24754,24755,24758,24759,24762],{},[22,24756,24757],{},"666","：",[22,24760,24761],{},"rw-rw-rw-","，所有用户可读写。",[210,24764,24765],{},"串口号必须替换为你机器上的真实端口。",[5266,24767,24768],{},"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":169,"searchDepth":170,"depth":170,"links":24770},[24771,24772,24773],{"id":24665,"depth":170,"text":24666},{"id":24679,"depth":170,"text":24680},{"id":24705,"depth":170,"text":24706},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24657,"description":178},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24780,"title":24781,"body":24782,"description":178,"extension":179,"meta":24943,"navigation":181,"path":24944,"seo":24945,"stem":24946,"__hash__":24947},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24783,"toc":24939},[24784,24788,24792,24798,24801,24858,24861,24865,24868,24936],[10,24785,24787],{"id":24786},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24789,24791],{"id":24790},"_31-配置电机-id","3.1 配置电机 ID",[19,24793,24794,24795,24797],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[22,24796,480],{},"，需要改成机械臂链路里不冲突的编号。",[19,24799,24800],{},"方式一：用 LeRobot 命令逐步写入。",[244,24802,24804],{"className":23961,"code":24803,"language":23963,"meta":169,"style":169},"# 主臂舵机配置 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",[22,24805,24806,24811,24819,24826,24831,24835,24840,24846,24853],{"__ignoreMap":169},[252,24807,24808],{"class":254,"line":255},[252,24809,24810],{"class":321},"# 主臂舵机配置 ID\n",[252,24812,24813,24816],{"class":254,"line":170},[252,24814,24815],{"class":2102},"lerobot-setup-motors",[252,24817,24818],{"class":311}," \\\n",[252,24820,24821,24824],{"class":254,"line":1318},[252,24822,24823],{"class":311},"  --teleop.type=so101_leader",[252,24825,24818],{"class":311},[252,24827,24828],{"class":254,"line":1333},[252,24829,24830],{"class":311},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[252,24832,24833],{"class":254,"line":1339},[252,24834,2539],{"emptyLinePlaceholder":181},[252,24836,24837],{"class":254,"line":1353},[252,24838,24839],{"class":321},"# 从臂舵机配置 ID\n",[252,24841,24842,24844],{"class":254,"line":1359},[252,24843,24815],{"class":2102},[252,24845,24818],{"class":311},[252,24847,24848,24851],{"class":254,"line":1450},[252,24849,24850],{"class":311},"  --robot.type=so101_follower",[252,24852,24818],{"class":311},[252,24854,24855],{"class":254,"line":1456},[252,24856,24857],{"class":311},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,24859,24860],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24862,24864],{"id":24863},"_32-机械臂校准","3.2 机械臂校准",[19,24866,24867],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[244,24869,24871],{"className":23961,"code":24870,"language":23963,"meta":169,"style":169},"# 主臂校准\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",[22,24872,24873,24878,24885,24891,24898,24903,24907,24912,24918,24924,24931],{"__ignoreMap":169},[252,24874,24875],{"class":254,"line":255},[252,24876,24877],{"class":321},"# 主臂校准\n",[252,24879,24880,24883],{"class":254,"line":170},[252,24881,24882],{"class":2102},"lerobot-calibrate",[252,24884,24818],{"class":311},[252,24886,24887,24889],{"class":254,"line":1318},[252,24888,24823],{"class":311},[252,24890,24818],{"class":311},[252,24892,24893,24896],{"class":254,"line":1333},[252,24894,24895],{"class":311},"  --teleop.port=\u002Fdev\u002FttyACM0",[252,24897,24818],{"class":311},[252,24899,24900],{"class":254,"line":1339},[252,24901,24902],{"class":311},"  --teleop.id=my_awesome_leader_arm\n",[252,24904,24905],{"class":254,"line":1353},[252,24906,2539],{"emptyLinePlaceholder":181},[252,24908,24909],{"class":254,"line":1359},[252,24910,24911],{"class":321},"# 从臂校准\n",[252,24913,24914,24916],{"class":254,"line":1450},[252,24915,24882],{"class":2102},[252,24917,24818],{"class":311},[252,24919,24920,24922],{"class":254,"line":1456},[252,24921,24850],{"class":311},[252,24923,24818],{"class":311},[252,24925,24926,24929],{"class":254,"line":1468},[252,24927,24928],{"class":311},"  --robot.port=\u002Fdev\u002FttyACM1",[252,24930,24818],{"class":311},[252,24932,24933],{"class":254,"line":1751},[252,24934,24935],{"class":311},"  --robot.id=my_awesome_follower_arm\n",[5266,24937,24938],{},"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":169,"searchDepth":170,"depth":170,"links":24940},[24941,24942],{"id":24790,"depth":170,"text":24791},{"id":24863,"depth":170,"text":24864},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24781,"description":178},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24949,"title":24950,"body":24951,"description":178,"extension":179,"meta":25142,"navigation":181,"path":25143,"seo":25144,"stem":25145,"__hash__":25146},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24952,"toc":25138},[24953,24956,24960,25007,25011,25024,25087,25090,25135],[10,24954,24950],{"id":24955},"_4-遥操与相机接入",[14,24957,24959],{"id":24958},"_41-不带相机遥操","4.1 不带相机遥操",[244,24961,24963],{"className":23961,"code":24962,"language":23963,"meta":169,"style":169},"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",[22,24964,24965,24972,24978,24984,24991,24997,25003],{"__ignoreMap":169},[252,24966,24967,24970],{"class":254,"line":255},[252,24968,24969],{"class":2102},"lerobot-teleoperate",[252,24971,24818],{"class":311},[252,24973,24974,24976],{"class":254,"line":170},[252,24975,24850],{"class":311},[252,24977,24818],{"class":311},[252,24979,24980,24982],{"class":254,"line":1318},[252,24981,24928],{"class":311},[252,24983,24818],{"class":311},[252,24985,24986,24989],{"class":254,"line":1333},[252,24987,24988],{"class":311},"  --robot.id=my_awesome_follower_arm",[252,24990,24818],{"class":311},[252,24992,24993,24995],{"class":254,"line":1339},[252,24994,24823],{"class":311},[252,24996,24818],{"class":311},[252,24998,24999,25001],{"class":254,"line":1353},[252,25000,24895],{"class":311},[252,25002,24818],{"class":311},[252,25004,25005],{"class":254,"line":1359},[252,25006,24902],{"class":311},[14,25008,25010],{"id":25009},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[244,25012,25014],{"className":23961,"code":25013,"language":23963,"meta":169,"style":169},"lerobot-find-cameras opencv\n",[22,25015,25016],{"__ignoreMap":169},[252,25017,25018,25021],{"class":254,"line":255},[252,25019,25020],{"class":2102},"lerobot-find-cameras",[252,25022,25023],{"class":367}," opencv\n",[244,25025,25027],{"className":23961,"code":25026,"language":23963,"meta":169,"style":169},"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",[22,25028,25029,25035,25041,25047,25053,25063,25069,25075,25082],{"__ignoreMap":169},[252,25030,25031,25033],{"class":254,"line":255},[252,25032,24969],{"class":2102},[252,25034,24818],{"class":311},[252,25036,25037,25039],{"class":254,"line":170},[252,25038,24850],{"class":311},[252,25040,24818],{"class":311},[252,25042,25043,25045],{"class":254,"line":1318},[252,25044,24928],{"class":311},[252,25046,24818],{"class":311},[252,25048,25049,25051],{"class":254,"line":1333},[252,25050,24988],{"class":311},[252,25052,24818],{"class":311},[252,25054,25055,25058,25061],{"class":254,"line":1339},[252,25056,25057],{"class":311},"  --robot.cameras=",[252,25059,25060],{"class":367},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[252,25062,24818],{"class":311},[252,25064,25065,25067],{"class":254,"line":1353},[252,25066,24823],{"class":311},[252,25068,24818],{"class":311},[252,25070,25071,25073],{"class":254,"line":1359},[252,25072,24895],{"class":311},[252,25074,24818],{"class":311},[252,25076,25077,25080],{"class":254,"line":1450},[252,25078,25079],{"class":311},"  --teleop.id=my_awesome_leader_arm",[252,25081,24818],{"class":311},[252,25083,25084],{"class":254,"line":1456},[252,25085,25086],{"class":311},"  --display_data=true\n",[19,25088,25089],{},"相机参数说明：",[1270,25091,25092,25098,25104,25113,25123,25129],{},[210,25093,25094,25097],{},[22,25095,25096],{},"front","：相机名称。",[210,25099,25100,25103],{},[22,25101,25102],{},"type: opencv","：相机驱动类型。",[210,25105,25106,25109,25110,24702],{},[22,25107,25108],{},"index_or_path","：设备编号或设备路径（如 ",[22,25111,25112],{},"\u002Fdev\u002Fvideo4",[210,25114,25115,25118,25119,25122],{},[22,25116,25117],{},"width"," \u002F ",[22,25120,25121],{},"height","：图像分辨率。",[210,25124,25125,25128],{},[22,25126,25127],{},"fps","：采样帧率。",[210,25130,25131,25134],{},[22,25132,25133],{},"--display_data=true","：启用实时可视化。",[5266,25136,25137],{},"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":169,"searchDepth":170,"depth":170,"links":25139},[25140,25141],{"id":24958,"depth":170,"text":24959},{"id":25009,"depth":170,"text":25010},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24950,"description":178},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25148,"title":25149,"body":25150,"description":178,"extension":179,"meta":25322,"navigation":181,"path":25323,"seo":25324,"stem":25325,"__hash__":25326},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25151,"toc":25317},[25152,25156,25160,25165,25170,25173,25215,25221,25225,25274,25279,25283,25286,25294,25299,25304,25309,25314],[10,25153,25155],{"id":25154},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25157,25159],{"id":25158},"_51-生成访问令牌","5.1 生成访问令牌",[19,25161,25162],{},[1601,25163],{"alt":169,"src":25164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25166,25167],{},[1601,25168],{"alt":169,"src":25169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25171,25172],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[244,25174,25176],{"className":23961,"code":25175,"language":23963,"meta":169,"style":169},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[22,25177,25178,25191],{"__ignoreMap":169},[252,25179,25180,25183,25186,25188],{"class":254,"line":255},[252,25181,25182],{"class":258},"export",[252,25184,25185],{"class":262}," HF_TOKEN",[252,25187,308],{"class":258},[252,25189,25190],{"class":367},"\"your_huggingface_token\"\n",[252,25192,25193,25196,25199,25202,25205,25207,25210,25212],{"class":254,"line":170},[252,25194,25195],{"class":2102},"hf",[252,25197,25198],{"class":367}," auth",[252,25200,25201],{"class":367}," login",[252,25203,25204],{"class":311}," --token",[252,25206,9864],{"class":367},[252,25208,25209],{"class":262},"$HF_TOKEN",[252,25211,514],{"class":367},[252,25213,25214],{"class":311}," --add-to-git-credential\n",[19,25216,25217,25220],{},[22,25218,25219],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25222,25224],{"id":25223},"_52-验证登录","5.2 验证登录",[244,25226,25228],{"className":23961,"code":25227,"language":23963,"meta":169,"style":169},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[22,25229,25230,25261],{"__ignoreMap":169},[252,25231,25232,25235,25237,25240,25242,25244,25247,25250,25253,25256,25259],{"class":254,"line":255},[252,25233,25234],{"class":262},"HF_USER",[252,25236,308],{"class":258},[252,25238,25239],{"class":262},"$(",[252,25241,25195],{"class":2102},[252,25243,25198],{"class":367},[252,25245,25246],{"class":367}," whoami",[252,25248,25249],{"class":258}," |",[252,25251,25252],{"class":2102}," head",[252,25254,25255],{"class":311}," -n",[252,25257,25258],{"class":311}," 1",[252,25260,269],{"class":262},[252,25262,25263,25266,25268,25271],{"class":254,"line":170},[252,25264,25265],{"class":311},"echo",[252,25267,9864],{"class":367},[252,25269,25270],{"class":262},"$HF_USER",[252,25272,25273],{"class":367},"\"\n",[19,25275,25276],{},[1601,25277],{"alt":169,"src":25278},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25280,25282],{"id":25281},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25284,25285],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1270,25287,25288,25291],{},[210,25289,25290],{},"Dataset Repo（用于上传演示数据）",[210,25292,25293],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25295,25296],{},[1601,25297],{"alt":169,"src":25298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25300,25301],{},[1601,25302],{"alt":169,"src":25303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25305,25306],{},[1601,25307],{"alt":169,"src":25308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25310,25311],{},[1601,25312],{"alt":169,"src":25313},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5266,25315,25316],{},"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":169,"searchDepth":170,"depth":170,"links":25318},[25319,25320,25321],{"id":25158,"depth":170,"text":25159},{"id":25223,"depth":170,"text":25224},{"id":25281,"depth":170,"text":25282},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25149,"description":178},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25328,"title":25329,"body":25330,"description":178,"extension":179,"meta":25527,"navigation":181,"path":25528,"seo":25529,"stem":25530,"__hash__":25531},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25331,"toc":25522},[25332,25336,25340,25436,25444,25449,25453,25469,25472,25476,25519],[10,25333,25335],{"id":25334},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25337,25339],{"id":25338},"_61-录制示教数据","6.1 录制示教数据",[244,25341,25343],{"className":23961,"code":25342,"language":23963,"meta":169,"style":169},"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",[22,25344,25345,25352,25358,25364,25370,25379,25385,25391,25397,25404,25414,25421,25431],{"__ignoreMap":169},[252,25346,25347,25350],{"class":254,"line":255},[252,25348,25349],{"class":2102},"lerobot-record",[252,25351,24818],{"class":311},[252,25353,25354,25356],{"class":254,"line":170},[252,25355,24850],{"class":311},[252,25357,24818],{"class":311},[252,25359,25360,25362],{"class":254,"line":1318},[252,25361,24928],{"class":311},[252,25363,24818],{"class":311},[252,25365,25366,25368],{"class":254,"line":1333},[252,25367,24988],{"class":311},[252,25369,24818],{"class":311},[252,25371,25372,25374,25377],{"class":254,"line":1339},[252,25373,25057],{"class":311},[252,25375,25376],{"class":367},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[252,25378,24818],{"class":311},[252,25380,25381,25383],{"class":254,"line":1353},[252,25382,24823],{"class":311},[252,25384,24818],{"class":311},[252,25386,25387,25389],{"class":254,"line":1359},[252,25388,24895],{"class":311},[252,25390,24818],{"class":311},[252,25392,25393,25395],{"class":254,"line":1450},[252,25394,25079],{"class":311},[252,25396,24818],{"class":311},[252,25398,25399,25402],{"class":254,"line":1456},[252,25400,25401],{"class":311},"  --display_data=true",[252,25403,24818],{"class":311},[252,25405,25406,25409,25412],{"class":254,"line":1468},[252,25407,25408],{"class":311},"  --dataset.repo_id=",[252,25410,25411],{"class":367},"\"Embodied-AI-6\u002Fso101_test\"",[252,25413,24818],{"class":311},[252,25415,25416,25419],{"class":254,"line":1751},[252,25417,25418],{"class":311},"  --dataset.num_episodes=10",[252,25420,24818],{"class":311},[252,25422,25423,25426,25429],{"class":254,"line":1756},[252,25424,25425],{"class":311},"  --dataset.single_task=",[252,25427,25428],{"class":367},"\"Grab the green cube\"",[252,25430,24818],{"class":311},[252,25432,25433],{"class":254,"line":1762},[252,25434,25435],{"class":311},"  --resume=true\n",[1270,25437,25438],{},[210,25439,25440,25443],{},[22,25441,25442],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25445,25446],{},[1601,25447],{"alt":169,"src":25448},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25450,25452],{"id":25451},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[244,25454,25456],{"className":23961,"code":25455,"language":23963,"meta":169,"style":169},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[22,25457,25458],{"__ignoreMap":169},[252,25459,25460,25463,25466],{"class":254,"line":255},[252,25461,25462],{"class":2102},"rm",[252,25464,25465],{"class":311}," -rf",[252,25467,25468],{"class":367}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25470,25471],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25473,25475],{"id":25474},"_63-回放指定-episode","6.3 回放指定 episode",[244,25477,25479],{"className":23961,"code":25478,"language":23963,"meta":169,"style":169},"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",[22,25480,25481,25488,25494,25500,25506,25514],{"__ignoreMap":169},[252,25482,25483,25486],{"class":254,"line":255},[252,25484,25485],{"class":2102},"lerobot-replay",[252,25487,24818],{"class":311},[252,25489,25490,25492],{"class":254,"line":170},[252,25491,24850],{"class":311},[252,25493,24818],{"class":311},[252,25495,25496,25498],{"class":254,"line":1318},[252,25497,24928],{"class":311},[252,25499,24818],{"class":311},[252,25501,25502,25504],{"class":254,"line":1333},[252,25503,24988],{"class":311},[252,25505,24818],{"class":311},[252,25507,25508,25510,25512],{"class":254,"line":1339},[252,25509,25408],{"class":311},[252,25511,25411],{"class":367},[252,25513,24818],{"class":311},[252,25515,25516],{"class":254,"line":1353},[252,25517,25518],{"class":311},"  --dataset.episode=0\n",[5266,25520,25521],{},"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":169,"searchDepth":170,"depth":170,"links":25523},[25524,25525,25526],{"id":25338,"depth":170,"text":25339},{"id":25451,"depth":170,"text":25452},{"id":25474,"depth":170,"text":25475},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25329,"description":178},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25533,"title":25534,"body":25535,"description":178,"extension":179,"meta":25663,"navigation":181,"path":25664,"seo":25665,"stem":25666,"__hash__":25667},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25536,"toc":25661},[25537,25541,25604,25607,25654,25659],[10,25538,25540],{"id":25539},"_7-act-模型训练","7. ACT 模型训练",[244,25542,25544],{"className":23961,"code":25543,"language":23963,"meta":169,"style":169},"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",[22,25545,25546,25553,25561,25568,25575,25582,25589,25596],{"__ignoreMap":169},[252,25547,25548,25551],{"class":254,"line":255},[252,25549,25550],{"class":2102},"lerobot-train",[252,25552,24818],{"class":311},[252,25554,25555,25557,25559],{"class":254,"line":170},[252,25556,25408],{"class":311},[252,25558,25411],{"class":367},[252,25560,24818],{"class":311},[252,25562,25563,25566],{"class":254,"line":1318},[252,25564,25565],{"class":311},"  --policy.type=act",[252,25567,24818],{"class":311},[252,25569,25570,25573],{"class":254,"line":1333},[252,25571,25572],{"class":311},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[252,25574,24818],{"class":311},[252,25576,25577,25580],{"class":254,"line":1339},[252,25578,25579],{"class":311},"  --job_name=act_so101_test",[252,25581,24818],{"class":311},[252,25583,25584,25587],{"class":254,"line":1353},[252,25585,25586],{"class":311},"  --policy.device=cuda",[252,25588,24818],{"class":311},[252,25590,25591,25594],{"class":254,"line":1359},[252,25592,25593],{"class":311},"  --wandb.enable=false",[252,25595,24818],{"class":311},[252,25597,25598,25601],{"class":254,"line":1450},[252,25599,25600],{"class":311},"  --policy.repo_id=",[252,25602,25603],{"class":367},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25605,25606],{},"参数说明：",[1270,25608,25609,25615,25621,25627,25633,25642,25648],{},[210,25610,25611,25614],{},[22,25612,25613],{},"--dataset.repo_id","：训练数据集仓库。",[210,25616,25617,25620],{},[22,25618,25619],{},"--policy.type=act","：策略模型类型为 ACT。",[210,25622,25623,25626],{},[22,25624,25625],{},"--output_dir","：本地训练输出目录。",[210,25628,25629,25632],{},[22,25630,25631],{},"--job_name","：训练任务名称。",[210,25634,25635,25638,25639,24702],{},[22,25636,25637],{},"--policy.device","：训练设备（如 ",[22,25640,25641],{},"cuda",[210,25643,25644,25647],{},[22,25645,25646],{},"--wandb.enable","：是否启用 WandB 可视化。",[210,25649,25650,25653],{},[22,25651,25652],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25655,25656],{},[1601,25657],{"alt":169,"src":25658},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5266,25660,25521],{},{"title":169,"searchDepth":170,"depth":170,"links":25662},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25534,"description":178},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25669,"title":25670,"body":25671,"description":178,"extension":179,"meta":25758,"navigation":181,"path":25759,"seo":25760,"stem":25761,"__hash__":25762},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25672,"toc":25756},[25673,25676,25679,25746,25754],[10,25674,25670],{"id":25675},"_8-策略部署与自动采集",[19,25677,25678],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[244,25680,25682],{"className":23961,"code":25681,"language":23963,"meta":169,"style":169},"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",[22,25683,25684,25690,25696,25702,25710,25716,25723,25731,25739],{"__ignoreMap":169},[252,25685,25686,25688],{"class":254,"line":255},[252,25687,25349],{"class":2102},[252,25689,24818],{"class":311},[252,25691,25692,25694],{"class":254,"line":170},[252,25693,24850],{"class":311},[252,25695,24818],{"class":311},[252,25697,25698,25700],{"class":254,"line":1318},[252,25699,24928],{"class":311},[252,25701,24818],{"class":311},[252,25703,25704,25706,25708],{"class":254,"line":1333},[252,25705,25057],{"class":311},[252,25707,25376],{"class":367},[252,25709,24818],{"class":311},[252,25711,25712,25714],{"class":254,"line":1339},[252,25713,24988],{"class":311},[252,25715,24818],{"class":311},[252,25717,25718,25721],{"class":254,"line":1353},[252,25719,25720],{"class":311},"  --display_data=false",[252,25722,24818],{"class":311},[252,25724,25725,25727,25729],{"class":254,"line":1359},[252,25726,25408],{"class":311},[252,25728,25411],{"class":367},[252,25730,24818],{"class":311},[252,25732,25733,25735,25737],{"class":254,"line":1450},[252,25734,25425],{"class":311},[252,25736,25428],{"class":367},[252,25738,24818],{"class":311},[252,25740,25741,25744],{"class":254,"line":1456},[252,25742,25743],{"class":311},"  --policy.path=",[252,25745,25603],{"class":367},[1270,25747,25748],{},[210,25749,25750,25753],{},[22,25751,25752],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5266,25755,25521],{},{"title":169,"searchDepth":170,"depth":170,"links":25757},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25670,"description":178},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25764,"title":25765,"body":25766,"description":178,"extension":179,"meta":25795,"navigation":181,"path":25796,"seo":25797,"stem":25798,"__hash__":25799},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25767,"toc":25793},[25768,25772,25775,25781,25784,25790],[10,25769,25771],{"id":25770},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,25773,25774],{},"项目地址：",[19,25776,25777],{},[501,25778,25779],{"href":25779,"rel":25780},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24004],[19,25782,25783],{},"参考教程：",[19,25785,25786],{},[501,25787,25788],{"href":25788,"rel":25789},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24004],[19,25791,25792],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":169,"searchDepth":170,"depth":170,"links":25794},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25765,"description":178},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25801,"title":25802,"body":25803,"description":25807,"extension":179,"meta":25808,"navigation":181,"path":25809,"seo":25810,"stem":25811,"__hash__":25812},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25804,"toc":25805},[],{"title":169,"searchDepth":170,"depth":170,"links":25806},[],"act复现",{"category":23517},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25802,"description":25807},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25814,"title":25815,"body":25816,"description":169,"extension":179,"meta":26118,"navigation":181,"path":26119,"seo":26120,"stem":26121,"__hash__":26122},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25817,"toc":26110},[25818,25821,25825,25835,25842,25849,25852,25859,25862,25865,25869,25881,25885,25931,25934,25937,25940,25943,25946,25950,25988,25994,25998,26052,26057,26060,26063,26068,26071,26076,26079,26082,26086,26089,26092,26096],[10,25819,25815],{"id":25820},"_1简介",[224,25822,25824],{"id":25823},"_11什么是-docker","1.1什么是 Docker？",[19,25826,25827,25828,25831,25832],{},"Docker 是一个开源的 ",[412,25829,25830],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[412,25833,25834],{},"一次构建，到处运行。",[19,25836,25837,25838,25841],{},"“ ",[412,25839,25840],{},"一次构建，到处运行"," ”也就是说：",[207,25843,25844],{},[210,25845,25846],{},[412,25847,25848],{},"之前：",[19,25850,25851],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[207,25853,25854],{},[210,25855,25856],{},[412,25857,25858],{},"使用docker后：",[19,25860,25861],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,25863,25864],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[224,25866,25868],{"id":25867},"_12它是怎么工作的","1.2.它是怎么工作的？",[1270,25870,25871,25874],{},[210,25872,25873],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[210,25875,25876,25877,25880],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[412,25878,25879],{},"无论在哪运行都一样稳定"," 。",[224,25882,25884],{"id":25883},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[400,25886,25887,25897],{},[403,25888,25889],{},[406,25890,25891,25894],{},[409,25892,25893],{"align":23875},"概念",[409,25895,25896],{"align":23875},"解释",[447,25898,25899,25907,25915,25923],{},[406,25900,25901,25904],{},[452,25902,25903],{"align":23875},"镜像",[452,25905,25906],{"align":23875},"Image，运行容器的模板，像是一个应用快照",[406,25908,25909,25912],{},[452,25910,25911],{"align":23875},"容器",[452,25913,25914],{"align":23875},"Container，运行中的镜像实例，有自己的文件系统、网络等",[406,25916,25917,25920],{},[452,25918,25919],{"align":23875},"Dockerfile",[452,25921,25922],{"align":23875},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[406,25924,25925,25928],{},[452,25926,25927],{"align":23875},"仓库",[452,25929,25930],{"align":23875},"Registry，存放镜像的地方，比如 Docker Hub",[19,25932,25933],{},"抽象化理解:",[19,25935,25936],{},"Docker镜像≈C++类",[19,25938,25939],{},"Docker容器≈C++类实例(即对象)",[19,25941,25942],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,25944,25945],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[224,25947,25949],{"id":25948},"_14类比理解","1.4.类比理解",[400,25951,25952,25962],{},[403,25953,25954],{},[406,25955,25956,25959],{},[409,25957,25958],{"align":23875},"传统部署",[409,25960,25961],{"align":23875},"Docker部署",[447,25963,25964,25972,25980],{},[406,25965,25966,25969],{},[452,25967,25968],{"align":23875},"手动安装依赖、调试版本不一致问题",[452,25970,25971],{"align":23875},"一次打包环境和代码",[406,25973,25974,25977],{},[452,25975,25976],{"align":23875},"程序“裸奔”跑在系统上",[452,25978,25979],{"align":23875},"程序“穿着容器”隔离运行",[406,25981,25982,25985],{},[452,25983,25984],{"align":23875},"容易“在我电脑上能跑”",[452,25986,25987],{"align":23875},"保证“无论在哪都能跑”",[19,25989,25990,25991],{},"就像快递包裹： ",[412,25992,25993],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[224,25995,25997],{"id":25996},"_15docker-的核心优势","1.5.Docker 的核心优势",[400,25999,26000,26010],{},[403,26001,26002],{},[406,26003,26004,26007],{},[409,26005,26006],{"align":23875},"优势",[409,26008,26009],{"align":23875},"说明",[447,26011,26012,26020,26028,26036,26044],{},[406,26013,26014,26017],{},[452,26015,26016],{"align":23875},"轻量级",[452,26018,26019],{"align":23875},"基于系统内核共享，启动速度快，占资源少",[406,26021,26022,26025],{},[452,26023,26024],{"align":23875},"跨平台",[452,26026,26027],{"align":23875},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[406,26029,26030,26033],{},[452,26031,26032],{"align":23875},"易于迁移部署",[452,26034,26035],{"align":23875},"应用和环境一起封装，不怕依赖不一致",[406,26037,26038,26041],{},[452,26039,26040],{"align":23875},"易于版本控制",[452,26042,26043],{"align":23875},"镜像版本可控，支持回滚",[406,26045,26046,26049],{},[452,26047,26048],{"align":23875},"生态丰富",[452,26050,26051],{"align":23875},"Docker Hub 上有成千上万的现成镜像可用",[207,26053,26054],{},[210,26055,26056],{},"在Linux上可以几乎实现无性能损失。",[19,26058,26059],{},"docker里的发行版和本机共用Linux内核。",[19,26061,26062],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[207,26064,26065],{},[210,26066,26067],{},"可以快速部署在绝大多数Linux发行版",[19,26069,26070],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[207,26072,26073],{},[210,26074,26075],{},"配置环境简单",[19,26077,26078],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26080,26081],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[207,26083,26084],{},[210,26085,26048],{},[19,26087,26088],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26090,26091],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[224,26093,26095],{"id":26094},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1270,26097,26098,26101,26104,26107],{},[210,26099,26100],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[210,26102,26103],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[210,26105,26106],{},"微服务架构：每个服务一个容器，灵活组合",[210,26108,26109],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":169,"searchDepth":170,"depth":170,"links":26111},[26112,26113,26114,26115,26116,26117],{"id":25823,"depth":1318,"text":25824},{"id":25867,"depth":1318,"text":25868},{"id":25883,"depth":1318,"text":25884},{"id":25948,"depth":1318,"text":25949},{"id":25996,"depth":1318,"text":25997},{"id":26094,"depth":1318,"text":26095},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25815,"description":169},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26124,"title":26125,"body":26126,"description":169,"extension":179,"meta":26859,"navigation":181,"path":26860,"seo":26861,"stem":26862,"__hash__":26863},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26127,"toc":26854},[26128,26131,26135,26138,26141,26147,26153,26157,26166,26169,26226,26229,26280,26283,26366,26369,26406,26410,26421,26434,26441,26444,26524,26527,26577,26580,26603,26607,26614,26617,26633,26639,26642,26658,26664,26667,26683,26697,26703,26723,26729,26732,26744,26750,26753,26767,26773,26776,26796,26801,26804,26807,26811,26814,26817,26820,26827,26830,26833,26836,26841,26846,26851],[10,26129,26125],{"id":26130},"_2安装docker",[224,26132,26134],{"id":26133},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26136,26137],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26139,26140],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26142,26143],{},[501,26144,26145],{"href":26145,"rel":26146},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24004],[19,26148,26149],{},[501,26150,26151],{"href":26151,"rel":26152},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24004],[22137,26154,26156],{"id":26155},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26158,26159,26160,26165],{},"以下内容根据 ",[501,26161,26164],{"href":26162,"rel":26163},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24004],"官方文档"," 修改而来。",[19,26167,26168],{},"如果你过去安装过 docker，先删掉：",[244,26170,26172],{"className":23961,"code":26171,"language":23963,"meta":169,"style":169},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[22,26173,26174],{"__ignoreMap":169},[252,26175,26176,26178,26181,26184,26187,26190,26193,26196,26199,26202,26205,26208,26211,26214,26217,26220,26223],{"class":254,"line":255},[252,26177,3164],{"class":258},[252,26179,26180],{"class":262}," pkg ",[252,26182,26183],{"class":258},"in",[252,26185,26186],{"class":367}," docker.io",[252,26188,26189],{"class":367}," docker-doc",[252,26191,26192],{"class":367}," docker-compose",[252,26194,26195],{"class":367}," docker-compose-v2",[252,26197,26198],{"class":367}," podman-docker",[252,26200,26201],{"class":367}," containerd",[252,26203,26204],{"class":367}," runc",[252,26206,26207],{"class":262},"; ",[252,26209,26210],{"class":258},"do",[252,26212,26213],{"class":2102}," sudo",[252,26215,26216],{"class":367}," apt-get",[252,26218,26219],{"class":367}," remove",[252,26221,26222],{"class":262}," $pkg; ",[252,26224,26225],{"class":258},"done\n",[19,26227,26228],{},"首先安装依赖和GPG：",[244,26230,26234],{"className":26231,"code":26232,"language":26233,"meta":169,"style":169},"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",[22,26235,26236,26241,26246,26251,26256,26261,26266,26270,26275],{"__ignoreMap":169},[252,26237,26238],{"class":254,"line":255},[252,26239,26240],{},"# Add Docker's official GPG key:\n",[252,26242,26243],{"class":254,"line":170},[252,26244,26245],{},"sudo apt-get update\n",[252,26247,26248],{"class":254,"line":1318},[252,26249,26250],{},"sudo apt-get install ca-certificates curl\n",[252,26252,26253],{"class":254,"line":1333},[252,26254,26255],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[252,26257,26258],{"class":254,"line":1339},[252,26259,26260],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[252,26262,26263],{"class":254,"line":1353},[252,26264,26265],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[252,26267,26268],{"class":254,"line":1359},[252,26269,2539],{"emptyLinePlaceholder":181},[252,26271,26272],{"class":254,"line":1450},[252,26273,26274],{},"# 如果上面这行报错就弄下面这行\n",[252,26276,26277],{"class":254,"line":1456},[252,26278,26279],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26281,26282],{},"信任 Docker 的 GPG 公钥并添加仓库：",[244,26284,26286],{"className":23961,"code":26285,"language":23963,"meta":169,"style":169},"# 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",[22,26287,26288,26293,26299,26316,26349],{"__ignoreMap":169},[252,26289,26290],{"class":254,"line":255},[252,26291,26292],{"class":321},"# Add the repository to Apt sources:\n",[252,26294,26295,26297],{"class":254,"line":170},[252,26296,25265],{"class":311},[252,26298,24818],{"class":311},[252,26300,26301,26304,26307,26310,26313],{"class":254,"line":1318},[252,26302,26303],{"class":367},"  \"deb [arch=$(",[252,26305,26306],{"class":2102},"dpkg",[252,26308,26309],{"class":311}," --print-architecture",[252,26311,26312],{"class":367},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[252,26314,26315],{"class":311},"\\\n",[252,26317,26318,26321,26323,26325,26328,26331,26333,26335,26338,26340,26342,26345,26347],{"class":254,"line":1333},[252,26319,26320],{"class":367},"  \"",[252,26322,25239],{"class":262},[252,26324,821],{"class":311},[252,26326,26327],{"class":367}," \u002Fetc\u002Fos-release",[252,26329,26330],{"class":262}," && ",[252,26332,25265],{"class":311},[252,26334,9864],{"class":367},[252,26336,26337],{"class":262},"$VERSION_CODENAME",[252,26339,514],{"class":367},[252,26341,692],{"class":262},[252,26343,26344],{"class":367},"\" stable\"",[252,26346,25249],{"class":258},[252,26348,24818],{"class":311},[252,26350,26351,26354,26357,26360,26363],{"class":254,"line":1339},[252,26352,26353],{"class":2102},"  sudo",[252,26355,26356],{"class":367}," tee",[252,26358,26359],{"class":367}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[252,26361,26362],{"class":258}," >",[252,26364,26365],{"class":367}," \u002Fdev\u002Fnull\n",[19,26367,26368],{},"最后安装",[244,26370,26372],{"className":23961,"code":26371,"language":23963,"meta":169,"style":169},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[22,26373,26374,26383],{"__ignoreMap":169},[252,26375,26376,26378,26380],{"class":254,"line":255},[252,26377,24716],{"class":2102},[252,26379,26216],{"class":367},[252,26381,26382],{"class":367}," update\n",[252,26384,26385,26387,26389,26391,26394,26397,26400,26403],{"class":254,"line":170},[252,26386,24716],{"class":2102},[252,26388,26216],{"class":367},[252,26390,23973],{"class":367},[252,26392,26393],{"class":367}," docker-ce",[252,26395,26396],{"class":367}," docker-ce-cli",[252,26398,26399],{"class":367}," containerd.io",[252,26401,26402],{"class":367}," docker-buildx-plugin",[252,26404,26405],{"class":367}," docker-compose-plugin\n",[22137,26407,26409],{"id":26408},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26411,26412,26413,26416,26417,26420],{},"查看自己自己包管理工具版本（dnf是 ",[412,26414,26415],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[412,26418,26419],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[244,26422,26424],{"className":23961,"code":26423,"language":23963,"meta":169,"style":169},"dnf --version\n",[22,26425,26426],{"__ignoreMap":169},[252,26427,26428,26431],{"class":254,"line":255},[252,26429,26430],{"class":2102},"dnf",[252,26432,26433],{"class":311}," --version\n",[19,26435,26159,26436,26440],{},[501,26437,26164],{"href":26438,"rel":26439},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24004]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26442,26443],{},"如果你之前安装过 docker，请先删掉",[244,26445,26447],{"className":23961,"code":26446,"language":23963,"meta":169,"style":169},"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",[22,26448,26449,26463,26470,26477,26484,26491,26498,26505,26512,26519],{"__ignoreMap":169},[252,26450,26451,26453,26456,26458,26461],{"class":254,"line":255},[252,26452,24716],{"class":2102},[252,26454,26455],{"class":367}," dnf",[252,26457,26219],{"class":367},[252,26459,26460],{"class":367}," docker",[252,26462,24818],{"class":311},[252,26464,26465,26468],{"class":254,"line":170},[252,26466,26467],{"class":367},"                  docker-client",[252,26469,24818],{"class":311},[252,26471,26472,26475],{"class":254,"line":1318},[252,26473,26474],{"class":367},"                  docker-client-latest",[252,26476,24818],{"class":311},[252,26478,26479,26482],{"class":254,"line":1333},[252,26480,26481],{"class":367},"                  docker-common",[252,26483,24818],{"class":311},[252,26485,26486,26489],{"class":254,"line":1339},[252,26487,26488],{"class":367},"                  docker-latest",[252,26490,24818],{"class":311},[252,26492,26493,26496],{"class":254,"line":1353},[252,26494,26495],{"class":367},"                  docker-latest-logrotate",[252,26497,24818],{"class":311},[252,26499,26500,26503],{"class":254,"line":1359},[252,26501,26502],{"class":367},"                  docker-logrotate",[252,26504,24818],{"class":311},[252,26506,26507,26510],{"class":254,"line":1450},[252,26508,26509],{"class":367},"                  docker-selinux",[252,26511,24818],{"class":311},[252,26513,26514,26517],{"class":254,"line":1456},[252,26515,26516],{"class":367},"                  docker-engine-selinux",[252,26518,24818],{"class":311},[252,26520,26521],{"class":254,"line":1468},[252,26522,26523],{"class":367},"                  docker-engine\n",[19,26525,26526],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[244,26528,26530],{"className":23961,"code":26529,"language":23963,"meta":169,"style":169},"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",[22,26531,26532,26546,26561],{"__ignoreMap":169},[252,26533,26534,26536,26538,26541,26543],{"class":254,"line":255},[252,26535,24716],{"class":2102},[252,26537,26455],{"class":367},[252,26539,26540],{"class":311}," -y",[252,26542,23973],{"class":367},[252,26544,26545],{"class":367}," dnf-plugins-core\n",[252,26547,26548,26550,26552,26555,26558],{"class":254,"line":170},[252,26549,24716],{"class":2102},[252,26551,26455],{"class":367},[252,26553,26554],{"class":367}," config-manager",[252,26556,26557],{"class":367}," addrepo",[252,26559,26560],{"class":311}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[252,26562,26563,26565,26568,26571,26574],{"class":254,"line":1318},[252,26564,24716],{"class":2102},[252,26566,26567],{"class":367}," sed",[252,26569,26570],{"class":311}," -i",[252,26572,26573],{"class":367}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[252,26575,26576],{"class":367}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26578,26579],{},"最后安装：",[244,26581,26583],{"className":23961,"code":26582,"language":23963,"meta":169,"style":169},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[22,26584,26585],{"__ignoreMap":169},[252,26586,26587,26589,26591,26593,26595,26597,26599,26601],{"class":254,"line":255},[252,26588,24716],{"class":2102},[252,26590,26455],{"class":367},[252,26592,23973],{"class":367},[252,26594,26393],{"class":367},[252,26596,26396],{"class":367},[252,26598,26399],{"class":367},[252,26600,26402],{"class":367},[252,26602,26405],{"class":367},[224,26604,26606],{"id":26605},"_22配置环境","2.2.配置环境",[22137,26608,26610,26613],{"id":26609},"_221检查-docker-服务状态",[412,26611,26612],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26615,26616],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[244,26618,26620],{"className":23961,"code":26619,"language":23963,"meta":169,"style":169},"systemctl status docker\n",[22,26621,26622],{"__ignoreMap":169},[252,26623,26624,26627,26630],{"class":254,"line":255},[252,26625,26626],{"class":2102},"systemctl",[252,26628,26629],{"class":367}," status",[252,26631,26632],{"class":367}," docker\n",[22137,26634,26636,26613],{"id":26635},"_222启动-docker-服务",[412,26637,26638],{},"2.2.2.启动 Docker 服务",[19,26640,26641],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[244,26643,26645],{"className":23961,"code":26644,"language":23963,"meta":169,"style":169},"sudo systemctl start docker\n",[22,26646,26647],{"__ignoreMap":169},[252,26648,26649,26651,26654,26656],{"class":254,"line":255},[252,26650,24716],{"class":2102},[252,26652,26653],{"class":367}," systemctl",[252,26655,4323],{"class":367},[252,26657,26632],{"class":367},[22137,26659,26661,26613],{"id":26660},"_223设置-docker-开机自启",[412,26662,26663],{},"2.2.3.设置 Docker 开机自启",[19,26665,26666],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[244,26668,26670],{"className":23961,"code":26669,"language":23963,"meta":169,"style":169},"sudo systemctl enable docker\n",[22,26671,26672],{"__ignoreMap":169},[252,26673,26674,26676,26678,26681],{"class":254,"line":255},[252,26675,24716],{"class":2102},[252,26677,26653],{"class":367},[252,26679,26680],{"class":367}," enable",[252,26682,26632],{"class":367},[22137,26684,26686,13935,26689,13935,26694,26613],{"id":26685},"_224将用户添加到-docker-组",[412,26687,26688],{},"2.2.4.将用户添加到",[412,26690,26691],{},[22,26692,26693],{},"docker",[412,26695,26696],{},"组",[19,26698,26699,26700,26702],{},"使用以下命令将当前用户添加到 ",[22,26701,26693],{}," 组：",[244,26704,26706],{"className":23961,"code":26705,"language":23963,"meta":169,"style":169},"sudo usermod -aG docker $USER\n",[22,26707,26708],{"__ignoreMap":169},[252,26709,26710,26712,26715,26718,26720],{"class":254,"line":255},[252,26711,24716],{"class":2102},[252,26713,26714],{"class":367}," usermod",[252,26716,26717],{"class":311}," -aG",[252,26719,26460],{"class":367},[252,26721,26722],{"class":262}," $USER\n",[22137,26724,26726,26613],{"id":26725},"_225退出并重新登录",[412,26727,26728],{},"2.2.5.退出并重新登录",[19,26730,26731],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[244,26733,26735],{"className":23961,"code":26734,"language":23963,"meta":169,"style":169},"newgrp docker\n",[22,26736,26737],{"__ignoreMap":169},[252,26738,26739,26742],{"class":254,"line":255},[252,26740,26741],{"class":2102},"newgrp",[252,26743,26632],{"class":367},[22137,26745,26747,26613],{"id":26746},"_226重新启动-docker-服务如果需要",[412,26748,26749],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26751,26752],{},"确保 Docker 服务正在运行，可以使用以下命令：",[244,26754,26755],{"className":23961,"code":26644,"language":23963,"meta":169,"style":169},[22,26756,26757],{"__ignoreMap":169},[252,26758,26759,26761,26763,26765],{"class":254,"line":255},[252,26760,24716],{"class":2102},[252,26762,26653],{"class":367},[252,26764,4323],{"class":367},[252,26766,26632],{"class":367},[22137,26768,26770,26613],{"id":26769},"_227重启电脑后检查-docker-服务状态",[412,26771,26772],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,26774,26775],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[244,26777,26779],{"className":23961,"code":26778,"language":23963,"meta":169,"style":169},"sudo reboot\nsystemctl status docker\n",[22,26780,26781,26788],{"__ignoreMap":169},[252,26782,26783,26785],{"class":254,"line":255},[252,26784,24716],{"class":2102},[252,26786,26787],{"class":367}," reboot\n",[252,26789,26790,26792,26794],{"class":254,"line":170},[252,26791,26626],{"class":2102},[252,26793,26629],{"class":367},[252,26795,26632],{"class":367},[19,26797,26798],{},[1601,26799],{"alt":169,"src":26800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,26802,26803],{},"第三行显示enabled说明开机自启动成功",[19,26805,26806],{},"按q退出",[224,26808,26810],{"id":26809},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,26812,26813],{},"优先使用linux来使用docker是比较好的",[19,26815,26816],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,26818,26819],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,26821,26822,26823],{},"官方下载安装:",[501,26824,26825],{"href":26825,"rel":26826},"https:\u002F\u002Fwww.docker.com\u002F",[24004],[19,26828,26829],{},"Windows的Docker显卡直通与USB直通:",[19,26831,26832],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,26834,26835],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,26837,26838],{},[1601,26839],{"alt":169,"src":26840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,26842,26843],{},[1601,26844],{"alt":169,"src":26845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,26847,26848],{},[1601,26849],{"alt":169,"src":26850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5266,26852,26853],{},"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":169,"searchDepth":170,"depth":170,"links":26855},[26856,26857,26858],{"id":26133,"depth":1318,"text":26134},{"id":26605,"depth":1318,"text":26606},{"id":26809,"depth":1318,"text":26810},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26125,"description":169},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26865,"title":26866,"body":26867,"description":26874,"extension":179,"meta":27567,"navigation":181,"path":27568,"seo":27569,"stem":27570,"__hash__":27571},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26868,"toc":27561},[26869,26872,26875,26879,26884,26889,26892,26920,26925,26934,26937,26942,26946,26953,26958,26964,26968,26971,26975,26980,27072,27077,27095,27100,27121,27126,27142,27146,27151,27180,27185,27231,27236,27280,27288,27305,27310,27326,27331,27345,27348,27351,27354,27357,27386,27389,27394,27398,27401,27404,27410,27413,27416,27419,27481,27488,27493,27496,27514,27518,27521,27538,27541,27544,27558],[10,26870,26866],{"id":26871},"_3docker直通",[19,26873,26874],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[224,26876,26878],{"id":26877},"_31usb直通","3.1.USB直通",[19,26880,26881],{},[1601,26882],{"alt":169,"src":26883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[207,26885,26886],{},[210,26887,26888],{},"方法一(不是很推荐新手)：",[19,26890,26891],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[244,26893,26895],{"className":23961,"code":26894,"language":23963,"meta":169,"style":169},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[22,26896,26897,26905,26910],{"__ignoreMap":169},[252,26898,26899,26902],{"class":254,"line":255},[252,26900,26901],{"class":2102},"ls",[252,26903,26904],{"class":367}," \u002Fdev\n",[252,26906,26907],{"class":254,"line":170},[252,26908,26909],{"class":321},"#例如\n",[252,26911,26912,26915,26917],{"class":254,"line":1318},[252,26913,26914],{"class":262},"--device",[252,26916,308],{"class":258},[252,26918,26919],{"class":367},"\u002Fdev\u002Ftty_USB0\n",[207,26921,26922],{"start":170},[210,26923,26924],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[244,26926,26928],{"className":23961,"code":26927,"language":23963,"meta":169,"style":169},"--privileged\n",[22,26929,26930],{"__ignoreMap":169},[252,26931,26932],{"class":254,"line":255},[252,26933,26927],{"class":2102},[19,26935,26936],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,26938,26939],{},[1601,26940],{"alt":169,"src":26941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[224,26943,26945],{"id":26944},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,26947,26948,26949,26952],{},"NVIDIA Container Toolkit使用户 ",[412,26950,26951],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,26954,26955],{},[1601,26956],{"alt":169,"src":26957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,26959,26960],{},[501,26961,26962],{"href":26962,"rel":26963},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24004],[22137,26965,26967],{"id":26966},"_321安装","3.2.1.安装",[19,26969,26970],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23049,26972,26974],{"id":26973},"_3211ubuntu","3.2.1.1.Ubuntu",[207,26976,26977],{},[210,26978,26979],{},"配置存储库 并更新",[244,26981,26983],{"className":23961,"code":26982,"language":23963,"meta":169,"style":169},"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",[22,26984,26985,27014,27034,27046,27058,27064],{"__ignoreMap":169},[252,26986,26987,26990,26993,26996,26998,27000,27003,27006,27009,27012],{"class":254,"line":255},[252,26988,26989],{"class":2102},"curl",[252,26991,26992],{"class":311}," -fsSL",[252,26994,26995],{"class":367}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[252,26997,25249],{"class":258},[252,26999,26213],{"class":2102},[252,27001,27002],{"class":367}," gpg",[252,27004,27005],{"class":311}," --dearmor",[252,27007,27008],{"class":311}," -o",[252,27010,27011],{"class":367}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[252,27013,24818],{"class":311},[252,27015,27016,27019,27021,27024,27027,27030,27032],{"class":254,"line":170},[252,27017,27018],{"class":262},"  && ",[252,27020,26989],{"class":2102},[252,27022,27023],{"class":311}," -s",[252,27025,27026],{"class":311}," -L",[252,27028,27029],{"class":367}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[252,27031,25249],{"class":258},[252,27033,24818],{"class":311},[252,27035,27036,27039,27042,27044],{"class":254,"line":1318},[252,27037,27038],{"class":2102},"    sed",[252,27040,27041],{"class":367}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[252,27043,25249],{"class":258},[252,27045,24818],{"class":311},[252,27047,27048,27051,27053,27056],{"class":254,"line":1333},[252,27049,27050],{"class":2102},"    sudo",[252,27052,26356],{"class":367},[252,27054,27055],{"class":367}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[252,27057,24818],{"class":311},[252,27059,27060,27062],{"class":254,"line":1339},[252,27061,27018],{"class":262},[252,27063,26315],{"class":311},[252,27065,27066,27068,27070],{"class":254,"line":1353},[252,27067,27050],{"class":2102},[252,27069,26216],{"class":367},[252,27071,26382],{"class":367},[207,27073,27074],{"start":170},[210,27075,27076],{},"安装nvidia-docker2",[244,27078,27080],{"className":23961,"code":27079,"language":23963,"meta":169,"style":169},"sudo apt-get install -y nvidia-docker2\n",[22,27081,27082],{"__ignoreMap":169},[252,27083,27084,27086,27088,27090,27092],{"class":254,"line":255},[252,27085,24716],{"class":2102},[252,27087,26216],{"class":367},[252,27089,23973],{"class":367},[252,27091,26540],{"class":311},[252,27093,27094],{"class":367}," nvidia-docker2\n",[207,27096,27097],{"start":1318},[210,27098,27099],{},"使用nvidia-ctk命令配置container runtime",[244,27101,27103],{"className":23961,"code":27102,"language":23963,"meta":169,"style":169},"sudo nvidia-ctk runtime configure --runtime=docker\n",[22,27104,27105],{"__ignoreMap":169},[252,27106,27107,27109,27112,27115,27118],{"class":254,"line":255},[252,27108,24716],{"class":2102},[252,27110,27111],{"class":367}," nvidia-ctk",[252,27113,27114],{"class":367}," runtime",[252,27116,27117],{"class":367}," configure",[252,27119,27120],{"class":311}," --runtime=docker\n",[207,27122,27123],{"start":1333},[210,27124,27125],{},"重启docker服务:",[244,27127,27129],{"className":23961,"code":27128,"language":23963,"meta":169,"style":169},"sudo systemctl restart docker\n",[22,27130,27131],{"__ignoreMap":169},[252,27132,27133,27135,27137,27140],{"class":254,"line":255},[252,27134,24716],{"class":2102},[252,27136,26653],{"class":367},[252,27138,27139],{"class":367}," restart",[252,27141,26632],{"class":367},[23049,27143,27145],{"id":27144},"_3212fedora","3.2.1.2.Fedora",[207,27147,27148],{},[210,27149,27150],{},"配置存储库",[244,27152,27154],{"className":23961,"code":27153,"language":23963,"meta":169,"style":169},"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",[22,27155,27156,27171],{"__ignoreMap":169},[252,27157,27158,27160,27162,27164,27167,27169],{"class":254,"line":255},[252,27159,26989],{"class":2102},[252,27161,27023],{"class":311},[252,27163,27026],{"class":311},[252,27165,27166],{"class":367}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[252,27168,25249],{"class":258},[252,27170,24818],{"class":311},[252,27172,27173,27175,27177],{"class":254,"line":170},[252,27174,24716],{"class":2102},[252,27176,26356],{"class":367},[252,27178,27179],{"class":367}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[207,27181,27182],{"start":170},[210,27183,27184],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[244,27186,27188],{"className":23961,"code":27187,"language":23963,"meta":169,"style":169},"# 如果是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",[22,27189,27190,27195,27209,27213,27218],{"__ignoreMap":169},[252,27191,27192],{"class":254,"line":255},[252,27193,27194],{"class":321},"# 如果是RHEL或者Rocky（DNF4）\n",[252,27196,27197,27199,27201,27203,27206],{"class":254,"line":170},[252,27198,24716],{"class":2102},[252,27200,26455],{"class":367},[252,27202,26554],{"class":367},[252,27204,27205],{"class":311}," --add-repo",[252,27207,27208],{"class":367}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[252,27210,27211],{"class":254,"line":1318},[252,27212,2539],{"emptyLinePlaceholder":181},[252,27214,27215],{"class":254,"line":1333},[252,27216,27217],{"class":321},"# 如果是Feodra41+（DNF5）\n",[252,27219,27220,27222,27224,27226,27228],{"class":254,"line":1339},[252,27221,24716],{"class":2102},[252,27223,26455],{"class":367},[252,27225,26554],{"class":367},[252,27227,26557],{"class":367},[252,27229,27230],{"class":311}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[207,27232,27233],{"start":1318},[210,27234,27235],{},"安装NVIDIA Container Toolki包",[244,27237,27239],{"className":23961,"code":27238,"language":23963,"meta":169,"style":169},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[22,27240,27241,27246,27259,27263,27268],{"__ignoreMap":169},[252,27242,27243],{"class":254,"line":255},[252,27244,27245],{"class":321},"# 如果是RHEL或者Rocky\n",[252,27247,27248,27250,27252,27254,27256],{"class":254,"line":170},[252,27249,24716],{"class":2102},[252,27251,26455],{"class":367},[252,27253,23973],{"class":367},[252,27255,26540],{"class":311},[252,27257,27258],{"class":367}," nvidia-container-toolkit\n",[252,27260,27261],{"class":254,"line":1318},[252,27262,2539],{"emptyLinePlaceholder":181},[252,27264,27265],{"class":254,"line":1333},[252,27266,27267],{"class":321},"# 如果是Fedora\n",[252,27269,27270,27272,27274,27276,27278],{"class":254,"line":1339},[252,27271,24716],{"class":2102},[252,27273,26455],{"class":367},[252,27275,23973],{"class":367},[252,27277,26540],{"class":311},[252,27279,27258],{"class":367},[207,27281,27282],{"start":1333},[210,27283,27284,27285,27287],{},"安装nvidia-docker2 ： 在Fedora上使用",[22,27286,26430],{},"进行安装",[244,27289,27291],{"className":23961,"code":27290,"language":23963,"meta":169,"style":169},"sudo dnf install -y nvidia-docker2\n",[22,27292,27293],{"__ignoreMap":169},[252,27294,27295,27297,27299,27301,27303],{"class":254,"line":255},[252,27296,24716],{"class":2102},[252,27298,26455],{"class":367},[252,27300,23973],{"class":367},[252,27302,26540],{"class":311},[252,27304,27094],{"class":367},[207,27306,27307],{"start":1339},[210,27308,27309],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[244,27311,27312],{"className":23961,"code":27102,"language":23963,"meta":169,"style":169},[22,27313,27314],{"__ignoreMap":169},[252,27315,27316,27318,27320,27322,27324],{"class":254,"line":255},[252,27317,24716],{"class":2102},[252,27319,27111],{"class":367},[252,27321,27114],{"class":367},[252,27323,27117],{"class":367},[252,27325,27120],{"class":311},[207,27327,27328],{"start":1353},[210,27329,27330],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[244,27332,27333],{"className":23961,"code":27128,"language":23963,"meta":169,"style":169},[22,27334,27335],{"__ignoreMap":169},[252,27336,27337,27339,27341,27343],{"class":254,"line":255},[252,27338,24716],{"class":2102},[252,27340,26653],{"class":367},[252,27342,27139],{"class":367},[252,27344,26632],{"class":367},[19,27346,27347],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27349,27350],{},"方法：",[19,27352,27353],{},"1️⃣nvidia-smi",[19,27355,27356],{},"2️⃣运行nvidia cuda 容器进行测试",[244,27358,27360],{"className":23961,"code":27359,"language":23963,"meta":169,"style":169},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[22,27361,27362],{"__ignoreMap":169},[252,27363,27364,27366,27368,27371,27374,27377,27380,27383],{"class":254,"line":255},[252,27365,24716],{"class":2102},[252,27367,26460],{"class":367},[252,27369,27370],{"class":367}," run",[252,27372,27373],{"class":311}," --rm",[252,27375,27376],{"class":311}," --gpus",[252,27378,27379],{"class":367}," all",[252,27381,27382],{"class":367}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[252,27384,27385],{"class":367}," nvidia-smi\n",[19,27387,27388],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27390,27391],{},[1601,27392],{"alt":169,"src":27393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[224,27395,27397],{"id":27396},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27399,27400],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27402,27403],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27405,27406],{},[501,27407,27408],{"href":27408,"rel":27409},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24004],[19,27411,27412],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27414,27415],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27417,27418],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[400,27420,27421,27437],{},[403,27422,27423],{},[406,27424,27425,27428,27431,27434],{},[409,27426,27427],{"align":23875},"镜像类型",[409,27429,27430],{"align":23875},"适用场景",[409,27432,27433],{"align":23875},"示例标签",[409,27435,27436],{"align":23875},"大小",[447,27438,27439,27453,27467],{},[406,27440,27441,27444,27447,27450],{},[452,27442,27443],{"align":23875},"base",[452,27445,27446],{"align":23875},"仅需 CUDA 运行时库",[452,27448,27449],{"align":23875},"12.4.0-base-ubuntu22.04",[452,27451,27452],{"align":23875},"~240MB",[406,27454,27455,27458,27461,27464],{},[452,27456,27457],{"align":23875},"runtime",[452,27459,27460],{"align":23875},"部署编译后的应用（含数学库）",[452,27462,27463],{"align":23875},"12.4.0-runtime-ubuntu22.04",[452,27465,27466],{"align":23875},"~2GB",[406,27468,27469,27472,27475,27478],{},[452,27470,27471],{"align":23875},"devel",[452,27473,27474],{"align":23875},"开发环境（含编译工具）",[452,27476,27477],{"align":23875},"12.4.0-devel-ubuntu22.04",[452,27479,27480],{"align":23875},"~3GB",[19,27482,27483,27484,27487],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[22,27485,27486],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27489,27490],{},[1601,27491],{"alt":169,"src":27492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27494,27495],{},"在dockerfile里就可以开头这么写：",[244,27497,27499],{"className":23961,"code":27498,"language":23963,"meta":169,"style":169},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[22,27500,27501,27506],{"__ignoreMap":169},[252,27502,27503],{"class":254,"line":255},[252,27504,27505],{"class":321},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[252,27507,27508,27511],{"class":254,"line":170},[252,27509,27510],{"class":2102},"FROM",[252,27512,27513],{"class":367}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[224,27515,27517],{"id":27516},"_34配置以太网","3.4.配置以太网",[19,27519,27520],{},"指定网络模式",[244,27522,27524],{"className":23961,"code":27523,"language":23963,"meta":169,"style":169},"--net=host \\\n",[22,27525,27526],{"__ignoreMap":169},[252,27527,27528,27531,27533,27536],{"class":254,"line":255},[252,27529,27530],{"class":262},"--net",[252,27532,308],{"class":258},[252,27534,27535],{"class":367},"host",[252,27537,24818],{"class":2102},[19,27539,27540],{},"启动参数里加上这行即可。具体在下方",[19,27542,27543],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1270,27545,27546,27549,27552,27555],{},[210,27547,27548],{},"--net=bridge:默认选项，表示连接到默认的网桥",[210,27550,27551],{},"--net=host:容器使用宿主机的网络",[210,27553,27554],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[210,27556,27557],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5266,27559,27560],{},"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":169,"searchDepth":170,"depth":170,"links":27562},[27563,27564,27565,27566],{"id":26877,"depth":1318,"text":26878},{"id":26944,"depth":1318,"text":26945},{"id":27396,"depth":1318,"text":27397},{"id":27516,"depth":1318,"text":27517},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26866,"description":26874},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27573,"title":27574,"body":27575,"description":27582,"extension":179,"meta":27588,"navigation":181,"path":27589,"seo":27590,"stem":27591,"__hash__":27592},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27576,"toc":27586},[27577,27580,27583],[10,27578,27574],{"id":27579},"_4dockerhub换源",[19,27581,27582],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27584,27585],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":169,"searchDepth":170,"depth":170,"links":27587},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27574,"description":27582},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27594,"title":27595,"body":27596,"description":169,"extension":179,"meta":28608,"navigation":181,"path":28609,"seo":28610,"stem":28611,"__hash__":28612},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27597,"toc":28603},[27598,27601,27605,27611,27615,27618,27958,27961,27964,27967,27972,27977,27980,27983,27986,27989,28008,28011,28022,28028,28210,28220,28236,28499,28501,28526,28541,28550,28600],[10,27599,27595],{"id":27600},"_5docker命令学习",[224,27602,27604],{"id":27603},"_51参考文档","5.1.参考文档",[19,27606,27607],{},[501,27608,27609],{"href":27609,"rel":27610},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24004],[224,27612,27614],{"id":27613},"_52常用命令","5.2.常用命令",[19,27616,27617],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[400,27619,27620,27633],{},[403,27621,27622],{},[406,27623,27624,27627,27630],{},[409,27625,27626],{"align":23875},"命令",[409,27628,27629],{"align":23875},"描述",[409,27631,27632],{"align":23875},"示例",[447,27634,27635,27646,27657,27668,27679,27690,27701,27712,27722,27733,27744,27755,27765,27776,27787,27798,27808,27818,27828,27838,27849,27860,27871,27882,27893,27904,27914,27925,27936,27947],{},[406,27636,27637,27640,27643],{},[452,27638,27639],{"align":23875},"docker run",[452,27641,27642],{"align":23875},"创建并启动一个新的容器。",[452,27644,27645],{"align":23875},"docker run -it ubuntu bash",[406,27647,27648,27651,27654],{},[452,27649,27650],{"align":23875},"docker build",[452,27652,27653],{"align":23875},"通过指定的 Dockerfile 创建一个新的镜像。",[452,27655,27656],{"align":23875},"docker build -t myimage .",[406,27658,27659,27662,27665],{},[452,27660,27661],{"align":23875},"docker pull",[452,27663,27664],{"align":23875},"从 Docker 仓库拉取镜像。",[452,27666,27667],{"align":23875},"docker pull ubuntu",[406,27669,27670,27673,27676],{},[452,27671,27672],{"align":23875},"docker push",[452,27674,27675],{"align":23875},"将本地镜像推送到 Docker 仓库。",[452,27677,27678],{"align":23875},"docker push myimage",[406,27680,27681,27684,27687],{},[452,27682,27683],{"align":23875},"docker stop",[452,27685,27686],{"align":23875},"停止一个正在运行的容器。",[452,27688,27689],{"align":23875},"docker stop container_id",[406,27691,27692,27695,27698],{},[452,27693,27694],{"align":23875},"docker start",[452,27696,27697],{"align":23875},"启动一个已经存在的容器。",[452,27699,27700],{"align":23875},"docker start container_id",[406,27702,27703,27706,27709],{},[452,27704,27705],{"align":23875},"docker restart",[452,27707,27708],{"align":23875},"重新启动容器。",[452,27710,27711],{"align":23875},"docker restart container_id",[406,27713,27714,27717,27720],{},[452,27715,27716],{"align":23875},"docker ps",[452,27718,27719],{"align":23875},"列出当前正在运行的容器。",[452,27721,27716],{"align":23875},[406,27723,27724,27727,27730],{},[452,27725,27726],{"align":23875},"docker rm",[452,27728,27729],{"align":23875},"删除一个或多个停止的容器。",[452,27731,27732],{"align":23875},"docker rm container_id",[406,27734,27735,27738,27741],{},[452,27736,27737],{"align":23875},"docker exec",[452,27739,27740],{"align":23875},"在一个正在运行的容器中执行命令。",[452,27742,27743],{"align":23875},"docker exec -it container_id bash",[406,27745,27746,27749,27752],{},[452,27747,27748],{"align":23875},"docker logs",[452,27750,27751],{"align":23875},"查看容器的日志输出。",[452,27753,27754],{"align":23875},"docker logs container_id",[406,27756,27757,27760,27763],{},[452,27758,27759],{"align":23875},"docker images",[452,27761,27762],{"align":23875},"列出本地所有镜像。",[452,27764,27759],{"align":23875},[406,27766,27767,27770,27773],{},[452,27768,27769],{"align":23875},"docker rmi",[452,27771,27772],{"align":23875},"删除一个或多个镜像。",[452,27774,27775],{"align":23875},"docker rmi myimage",[406,27777,27778,27781,27784],{},[452,27779,27780],{"align":23875},"docker network",[452,27782,27783],{"align":23875},"管理 Docker 网络。",[452,27785,27786],{"align":23875},"docker network ls",[406,27788,27789,27792,27795],{},[452,27790,27791],{"align":23875},"docker volume",[452,27793,27794],{"align":23875},"管理 Docker 数据卷。",[452,27796,27797],{"align":23875},"docker volume ls",[406,27799,27800,27803,27806],{},[452,27801,27802],{"align":23875},"docker-compose up",[452,27804,27805],{"align":23875},"启动 docker-compose.yml 中定义的所有服务。",[452,27807,27802],{"align":23875},[406,27809,27810,27813,27816],{},[452,27811,27812],{"align":23875},"docker-compose down",[452,27814,27815],{"align":23875},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[452,27817,27812],{"align":23875},[406,27819,27820,27823,27826],{},[452,27821,27822],{"align":23875},"docker info",[452,27824,27825],{"align":23875},"显示 Docker 系统的详细信息。",[452,27827,27822],{"align":23875},[406,27829,27830,27833,27836],{},[452,27831,27832],{"align":23875},"docker stats",[452,27834,27835],{"align":23875},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[452,27837,27832],{"align":23875},[406,27839,27840,27843,27846],{},[452,27841,27842],{"align":23875},"docker inspect",[452,27844,27845],{"align":23875},"查看容器或镜像的详细信息（JSON 格式）。",[452,27847,27848],{"align":23875},"docker inspect container_id",[406,27850,27851,27854,27857],{},[452,27852,27853],{"align":23875},"docker save",[452,27855,27856],{"align":23875},"将一个镜像保存为 tar 文件。",[452,27858,27859],{"align":23875},"docker save -o myimage.tar myimage",[406,27861,27862,27865,27868],{},[452,27863,27864],{"align":23875},"docker load",[452,27866,27867],{"align":23875},"从 tar 文件中加载镜像。",[452,27869,27870],{"align":23875},"docker load -i myimage.tar",[406,27872,27873,27876,27879],{},[452,27874,27875],{"align":23875},"docker tag",[452,27877,27878],{"align":23875},"为镜像添加标签（tag）。",[452,27880,27881],{"align":23875},"docker tag myimage myimage:v1",[406,27883,27884,27887,27890],{},[452,27885,27886],{"align":23875},"docker buildx build",[452,27888,27889],{"align":23875},"使用 Buildx 构建多架构镜像。",[452,27891,27892],{"align":23875},"docker buildx build -t myimage .",[406,27894,27895,27898,27901],{},[452,27896,27897],{"align":23875},"docker buildx create",[452,27899,27900],{"align":23875},"创建一个新的 Buildx 构建实例。",[452,27902,27903],{"align":23875},"docker buildx create –use",[406,27905,27906,27909,27912],{},[452,27907,27908],{"align":23875},"docker buildx ls",[452,27910,27911],{"align":23875},"列出所有可用的 Buildx 构建实例。",[452,27913,27908],{"align":23875},[406,27915,27916,27919,27922],{},[452,27917,27918],{"align":23875},"docker buildx use",[452,27920,27921],{"align":23875},"设置当前的 Buildx 构建实例。",[452,27923,27924],{"align":23875},"docker buildx use mybuilder",[406,27926,27927,27930,27933],{},[452,27928,27929],{"align":23875},"docker buildx bake",[452,27931,27932],{"align":23875},"使用 Bake 文件批量构建镜像。",[452,27934,27935],{"align":23875},"docker buildx bake -f bake.hcl",[406,27937,27938,27941,27944],{},[452,27939,27940],{"align":23875},"docker buildx build –push",[452,27942,27943],{"align":23875},"构建镜像并推送到镜像仓库。",[452,27945,27946],{"align":23875},"docker buildx build –push -t myimage .",[406,27948,27949,27952,27955],{},[452,27950,27951],{"align":23875},"docker buildx build –platform",[452,27953,27954],{"align":23875},"构建镜像并为多个平台生成支持。",[452,27956,27957],{"align":23875},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,27959,27960],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,27962,27963],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,27965,27966],{},"docker images 可以查看已经下载的镜像",[19,27968,27969],{},[1601,27970],{"alt":169,"src":27971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,27973,27974],{},[412,27975,27976],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,27978,27979],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,27981,27982],{},"docker container logs 查看容器日志",[19,27984,27985],{},"docker top 查看容器里的进程",[19,27987,27988],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[244,27990,27992],{"className":23961,"code":27991,"language":23963,"meta":169,"style":169},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[22,27993,27994],{"__ignoreMap":169},[252,27995,27996,27999,28002,28005],{"class":254,"line":255},[252,27997,27998],{"class":2102},"如：docker",[252,28000,28001],{"class":367}," cp",[252,28003,28004],{"class":367}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[252,28006,28007],{"class":367}," \u002Fmydata\u002Fnginx\n",[19,28009,28010],{},"docker run时在启动容器的时候会有几个常用的选项：",[1270,28012,28013,28016,28019],{},[210,28014,28015],{},"-d选项：表示后台运行",[210,28017,28018],{},"-P选项：随机端口映射",[210,28020,28021],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[224,28023,28025],{"id":28024},"_53run命令的参数非常重要",[412,28026,28027],{},"5.3.run命令的参数（非常重要）",[400,28029,28030,28043],{},[403,28031,28032],{},[406,28033,28034,28037,28040],{},[409,28035,28036],{"align":23875},"参数\u002F配置",[409,28038,28039],{"align":23875},"功能说明",[409,28041,28042],{"align":23875},"重要性与参考依据",[447,28044,28045,28056,28067,28078,28089,28100,28111,28122,28133,28144,28155,28166,28177,28188,28199],{},[406,28046,28047,28050,28053],{},[452,28048,28049],{"align":23875},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[452,28051,28052],{"align":23875},"指定容器名称，便于后续管理",[452,28054,28055],{"align":23875},"替代随机生成的容器名。",[406,28057,28058,28061,28064],{},[452,28059,28060],{"align":23875},"–gpus all",[452,28062,28063],{"align":23875},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[452,28065,28066],{"align":23875},"用于CUDA加速等GPU依赖任务。",[406,28068,28069,28072,28075],{},[452,28070,28071],{"align":23875},"-e NVIDIA_DRIVER_CAPABILITIES=all",[452,28073,28074],{"align":23875},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[452,28076,28077],{"align":23875},"确保容器内GPU功能完整67。",[406,28079,28080,28083,28086],{},[452,28081,28082],{"align":23875},"-dit",[452,28084,28085],{"align":23875},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[452,28087,28088],{"align":23875},"允许容器在后台运行并支持交互操作。",[406,28090,28091,28094,28097],{},[452,28092,28093],{"align":23875},"–privileged",[452,28095,28096],{"align":23875},"赋予容器完全主机权限（可访问设备、内核模块等）",[452,28098,28099],{"align":23875},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[406,28101,28102,28105,28108],{},[452,28103,28104],{"align":23875},"–net=host",[452,28106,28107],{"align":23875},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[452,28109,28110],{"align":23875},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[406,28112,28113,28116,28119],{},[452,28114,28115],{"align":23875},"–group-add audio–group-add video–group-add dialout",[452,28117,28118],{"align":23875},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[452,28120,28121],{"align":23875},"避免权限问题（如避免无法调用摄像头、麦克风）。",[406,28123,28124,28127,28130],{},[452,28125,28126],{"align":23875},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[452,28128,28129],{"align":23875},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[452,28131,28132],{"align":23875},"支持容器内运行图形界面应用（如OpenCV可视化）。",[406,28134,28135,28138,28141],{},[452,28136,28137],{"align":23875},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[452,28139,28140],{"align":23875},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[452,28142,28143],{"align":23875},"实现容器内图形显示。",[406,28145,28146,28149,28152],{},[452,28147,28148],{"align":23875},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[452,28150,28151],{"align":23875},"挂载X11认证文件（只读）",[452,28153,28154],{"align":23875},"确保容器有权连接宿主机显示服务。",[406,28156,28157,28160,28163],{},[452,28158,28159],{"align":23875},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[452,28161,28162],{"align":23875},"挂载Wayland显示协议相关目录",[452,28164,28165],{"align":23875},"支持Wayland协议的图形显示。",[406,28167,28168,28171,28174],{},[452,28169,28170],{"align":23875},"–ulimit nofile=1024:524288",[452,28172,28173],{"align":23875},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[452,28175,28176],{"align":23875},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[406,28178,28179,28182,28185],{},[452,28180,28181],{"align":23875},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[452,28183,28184],{"align":23875},"挂载宿主机用户目录到容器内同名路径",[452,28186,28187],{"align":23875},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[406,28189,28190,28193,28196],{},[452,28191,28192],{"align":23875},"-w \u002Fhome\u002Ftungchiahui",[452,28194,28195],{"align":23875},"设置容器启动后的默认工作目录",[452,28197,28198],{"align":23875},"直接进入项目路径，方便执行命令2324。",[406,28200,28201,28204,28207],{},[452,28202,28203],{"align":23875},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[452,28205,28206],{"align":23875},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[452,28208,28209],{"align":23875},"提供预配置的深度学习与机器人开发环境。",[19,28211,28212,28213,28215,28216,28219],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[22,28214,24716],{},"加不加",[22,28217,28218],{},"sudo -E","都无所谓。",[19,28221,28222,28223,28225,28226,28228,28229,28232,28233,28235],{},"用户已经被加到docker组了，不用",[22,28224,24716],{},"也行跑，其次，",[22,28227,24716],{},"运行的话，你的",[22,28230,28231],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[22,28234,28231],{},"更不可能变了。",[244,28237,28239],{"className":23961,"code":28238,"language":23963,"meta":169,"style":169},"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",[22,28240,28241,28254,28264,28274,28286,28293,28300,28307,28317,28326,28335,28349,28361,28373,28382,28392,28401,28416,28449,28476,28487,28494],{"__ignoreMap":169},[252,28242,28243,28245,28247,28249,28252],{"class":254,"line":255},[252,28244,24716],{"class":2102},[252,28246,26460],{"class":367},[252,28248,27370],{"class":367},[252,28250,28251],{"class":311}," --name=ros_opencv_cuda",[252,28253,24818],{"class":311},[252,28255,28256,28259,28262],{"class":254,"line":170},[252,28257,28258],{"class":262},"--gpus ",[252,28260,28261],{"class":367},"all",[252,28263,24818],{"class":311},[252,28265,28266,28269,28272],{"class":254,"line":1318},[252,28267,28268],{"class":262},"-e ",[252,28270,28271],{"class":367},"NVIDIA_DRIVER_CAPABILITIES=all",[252,28273,24818],{"class":311},[252,28275,28276,28278,28281,28284],{"class":254,"line":1333},[252,28277,28268],{"class":262},[252,28279,28280],{"class":367},"DISPLAY=",[252,28282,28283],{"class":262},"$DISPLAY ",[252,28285,26315],{"class":311},[252,28287,28288,28291],{"class":254,"line":1339},[252,28289,28290],{"class":262},"-dit ",[252,28292,26315],{"class":311},[252,28294,28295,28298],{"class":254,"line":1353},[252,28296,28297],{"class":262},"--privileged ",[252,28299,26315],{"class":311},[252,28301,28302,28305],{"class":254,"line":1359},[252,28303,28304],{"class":262},"--net=host ",[252,28306,26315],{"class":311},[252,28308,28309,28312,28315],{"class":254,"line":1450},[252,28310,28311],{"class":262},"--group-add ",[252,28313,28314],{"class":367},"audio",[252,28316,24818],{"class":311},[252,28318,28319,28321,28324],{"class":254,"line":1456},[252,28320,28311],{"class":262},[252,28322,28323],{"class":367},"video",[252,28325,24818],{"class":311},[252,28327,28328,28330,28333],{"class":254,"line":1468},[252,28329,28311],{"class":262},[252,28331,28332],{"class":367},"dialout",[252,28334,24818],{"class":311},[252,28336,28337,28339,28342,28344,28347],{"class":254,"line":1751},[252,28338,28268],{"class":262},[252,28340,28341],{"class":367},"XAUTHORITY=",[252,28343,28231],{"class":262},[252,28345,28346],{"class":367},"\u002F.Xauthority",[252,28348,24818],{"class":311},[252,28350,28351,28353,28356,28359],{"class":254,"line":1756},[252,28352,28268],{"class":262},[252,28354,28355],{"class":367},"WAYLAND_DISPLAY=",[252,28357,28358],{"class":262},"$WAYLAND_DISPLAY ",[252,28360,26315],{"class":311},[252,28362,28363,28365,28368,28371],{"class":254,"line":1762},[252,28364,28268],{"class":262},[252,28366,28367],{"class":367},"XDG_RUNTIME_DIR=",[252,28369,28370],{"class":262},"$XDG_RUNTIME_DIR ",[252,28372,26315],{"class":311},[252,28374,28375,28377,28380],{"class":254,"line":1767},[252,28376,28268],{"class":262},[252,28378,28379],{"class":367},"QT_QPA_PLATFORM=xcb",[252,28381,24818],{"class":311},[252,28383,28384,28387,28390],{"class":254,"line":1781},[252,28385,28386],{"class":262},"-v ",[252,28388,28389],{"class":367},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[252,28391,24818],{"class":311},[252,28393,28394,28396,28399],{"class":254,"line":1786},[252,28395,28386],{"class":262},[252,28397,28398],{"class":367},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[252,28400,24818],{"class":311},[252,28402,28403,28406,28409,28411,28414],{"class":254,"line":1792},[252,28404,28405],{"class":262},"-v $HOME",[252,28407,28408],{"class":367},"\u002F.Xauthority:",[252,28410,28231],{"class":262},[252,28412,28413],{"class":367},"\u002F.Xauthority:ro",[252,28415,24818],{"class":311},[252,28417,28418,28420,28423,28425,28428,28431,28433,28436,28438,28440,28442,28444,28447],{"class":254,"line":1813},[252,28419,28386],{"class":262},[252,28421,28422],{"class":367},"\u002Frun\u002Fuser\u002F",[252,28424,25239],{"class":262},[252,28426,28427],{"class":2102},"id",[252,28429,28430],{"class":311}," -u",[252,28432,692],{"class":262},[252,28434,28435],{"class":367},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[252,28437,25239],{"class":262},[252,28439,28427],{"class":2102},[252,28441,28430],{"class":311},[252,28443,692],{"class":262},[252,28445,28446],{"class":367},"\u002Fwayland-0",[252,28448,24818],{"class":311},[252,28450,28451,28453,28455,28457,28459,28461,28463,28466,28468,28470,28472,28474],{"class":254,"line":1818},[252,28452,28386],{"class":262},[252,28454,28422],{"class":367},[252,28456,25239],{"class":262},[252,28458,28427],{"class":2102},[252,28460,28430],{"class":311},[252,28462,692],{"class":262},[252,28464,28465],{"class":367},":\u002Frun\u002Fuser\u002F",[252,28467,25239],{"class":262},[252,28469,28427],{"class":2102},[252,28471,28430],{"class":311},[252,28473,13854],{"class":262},[252,28475,26315],{"class":311},[252,28477,28478,28480,28482,28485],{"class":254,"line":1832},[252,28479,28405],{"class":262},[252,28481,1122],{"class":367},[252,28483,28484],{"class":262},"$HOME ",[252,28486,26315],{"class":311},[252,28488,28489,28492],{"class":254,"line":1837},[252,28490,28491],{"class":262},"-w $HOME ",[252,28493,26315],{"class":311},[252,28495,28496],{"class":254,"line":1866},[252,28497,28498],{"class":262},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28500,9165],{},[207,28502,28503,28511,28514,28517],{},[210,28504,28505,13935,28507,28510],{},[22,28506,28271],{},[22,28508,28509],{},"--gpus all","没有英伟达显卡请注释。",[210,28512,28513],{},"--name后面请自己为容器起名。",[210,28515,28516],{},"最后一行仓库名称请你自己找对应的镜像填上。",[210,28518,28519,28520,28525],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23692,28521,28522],{},[412,28523,28524],{},"请不要加","。",[244,28527,28529],{"className":23961,"code":28528,"language":23963,"meta":169,"style":169},"--ulimit nofile=1024:524288 \\\n",[22,28530,28531],{"__ignoreMap":169},[252,28532,28533,28536,28539],{"class":254,"line":255},[252,28534,28535],{"class":2102},"--ulimit",[252,28537,28538],{"class":367}," nofile=1024:524288",[252,28540,24818],{"class":311},[19,28542,28543,28544,28549],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23692,28545,28546],{},[412,28547,28548],{},"不建议","**.**",[244,28551,28553],{"className":23961,"code":28552,"language":23963,"meta":169,"style":169},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[22,28554,28555,28582,28591],{"__ignoreMap":169},[252,28556,28557,28560,28563,28565,28567,28569,28571,28573,28575,28578,28580],{"class":254,"line":255},[252,28558,28559],{"class":2102},"--user",[252,28561,28562],{"class":262}," $(",[252,28564,28427],{"class":2102},[252,28566,28430],{"class":311},[252,28568,692],{"class":262},[252,28570,1122],{"class":367},[252,28572,25239],{"class":262},[252,28574,28427],{"class":2102},[252,28576,28577],{"class":311}," -g",[252,28579,13854],{"class":262},[252,28581,26315],{"class":311},[252,28583,28584,28586,28589],{"class":254,"line":170},[252,28585,28386],{"class":262},[252,28587,28588],{"class":367},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[252,28590,24818],{"class":311},[252,28592,28593,28595,28598],{"class":254,"line":1318},[252,28594,28386],{"class":262},[252,28596,28597],{"class":367},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[252,28599,24818],{"class":311},[5266,28601,28602],{},"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":169,"searchDepth":170,"depth":170,"links":28604},[28605,28606,28607],{"id":27603,"depth":1318,"text":27604},{"id":27613,"depth":1318,"text":27614},{"id":28024,"depth":1318,"text":28027},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27595,"description":169},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28614,"title":28615,"body":28616,"description":169,"extension":179,"meta":30239,"navigation":181,"path":30240,"seo":30241,"stem":30242,"__hash__":30243},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28617,"toc":30234},[28618,28621,28625,28628,28850,28854,28858,28861,28967,28972,28975,28980,28983,28988,28991,28996,28999,29011,29014,29019,29026,29054,29061,29137,29142,29145,29168,29170,29245,29250,29253,29257,29265,29270,29275,29279,29290,29296,29299,29302,29326,29329,29332,29360,29363,29366,29831,29834,29839,29844,29848,29871,29876,29880,29884,29887,29890,29893,29920,29923,29926,29944,29947,29950,29972,29980,29985,29990,29994,29997,30000,30003,30006,30051,30054,30072,30075,30080,30083,30104,30107,30163,30166,30171,30175,30178,30185,30188,30191,30196,30199,30215,30218,30231],[10,28619,28615],{"id":28620},"_6手动创建docker镜像",[224,28622,28624],{"id":28623},"_61dockerfile","6.1.DockerFile",[19,28626,28627],{},"常用命令：",[400,28629,28630,28641],{},[403,28631,28632],{},[406,28633,28634,28637,28639],{},[409,28635,28636],{"align":23875},"指令",[409,28638,26009],{"align":23875},[409,28640,27632],{"align":23875},[447,28642,28643,28653,28669,28680,28691,28702,28713,28724,28735,28749,28763,28774,28788,28799,28810,28824,28839],{},[406,28644,28645,28647,28650],{},[452,28646,27510],{"align":23875},[452,28648,28649],{"align":23875},"指定基础镜像，是 Dockerfile 的起点",[452,28651,28652],{"align":23875},"FROM ubuntu:22.04",[406,28654,28655,28658,28661],{},[452,28656,28657],{"align":23875},"LABEL",[452,28659,28660],{"align":23875},"添加元数据（如作者、版本等）",[452,28662,28663,28664,28668],{"align":23875},"LABEL maintainer=”",[501,28665,28667],{"href":28666},"mailto:you@example.com","you@example.com","”",[406,28670,28671,28674,28677],{},[452,28672,28673],{"align":23875},"ENV",[452,28675,28676],{"align":23875},"设置环境变量",[452,28678,28679],{"align":23875},"ENV PORT=8080",[406,28681,28682,28685,28688],{},[452,28683,28684],{"align":23875},"ARG",[452,28686,28687],{"align":23875},"构建参数，只在构建期间可用",[452,28689,28690],{"align":23875},"ARG VERSION=1.0",[406,28692,28693,28696,28699],{},[452,28694,28695],{"align":23875},"RUN",[452,28697,28698],{"align":23875},"构建镜像时运行命令",[452,28700,28701],{"align":23875},"RUN apt-get update && apt-get install -y curl",[406,28703,28704,28707,28710],{},[452,28705,28706],{"align":23875},"COPY",[452,28708,28709],{"align":23875},"复制文件到镜像中",[452,28711,28712],{"align":23875},"COPY . \u002Fapp",[406,28714,28715,28718,28721],{},[452,28716,28717],{"align":23875},"ADD",[452,28719,28720],{"align":23875},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[452,28722,28723],{"align":23875},"ADD archive.tar.gz \u002Fdata\u002F",[406,28725,28726,28729,28732],{},[452,28727,28728],{"align":23875},"WORKDIR",[452,28730,28731],{"align":23875},"设置工作目录",[452,28733,28734],{"align":23875},"WORKDIR \u002Fopt",[406,28736,28737,28740,28743],{},[452,28738,28739],{"align":23875},"CMD",[452,28741,28742],{"align":23875},"设置容器启动时默认命令（可被 docker run 覆盖）",[452,28744,28745,28746],{"align":23875},"CMD ",[252,28747,28748],{},"“node”, “index.js”",[406,28750,28751,28754,28757],{},[452,28752,28753],{"align":23875},"ENTRYPOINT",[452,28755,28756],{"align":23875},"设置容器启动时固定命令（通常用于 CLI 工具等）",[452,28758,28759,28760],{"align":23875},"ENTRYPOINT ",[252,28761,28762],{},"“python3”",[406,28764,28765,28768,28771],{},[452,28766,28767],{"align":23875},"EXPOSE",[452,28769,28770],{"align":23875},"声明镜像内服务监听的端口（不会自动映射）",[452,28772,28773],{"align":23875},"EXPOSE 80",[406,28775,28776,28779,28782],{},[452,28777,28778],{"align":23875},"VOLUME",[452,28780,28781],{"align":23875},"声明数据卷挂载点",[452,28783,28784,28785],{"align":23875},"VOLUME ",[252,28786,28787],{},"“\u002Fdata”",[406,28789,28790,28793,28796],{},[452,28791,28792],{"align":23875},"USER",[452,28794,28795],{"align":23875},"设置后续命令执行的用户",[452,28797,28798],{"align":23875},"USER appuser",[406,28800,28801,28804,28807],{},[452,28802,28803],{"align":23875},"ONBUILD",[452,28805,28806],{"align":23875},"当镜像作为其他镜像基础镜像时触发的构建指令",[452,28808,28809],{"align":23875},"ONBUILD COPY . \u002Fsrc",[406,28811,28812,28815,28818],{},[452,28813,28814],{"align":23875},"SHELL",[452,28816,28817],{"align":23875},"更改默认 shell，比如将 sh -c 改为 bash -c",[452,28819,28820,28821],{"align":23875},"SHELL ",[252,28822,28823],{},"“\u002Fbin\u002Fbash”, “-c”",[406,28825,28826,28829,28832],{},[452,28827,28828],{"align":23875},"HEALTHCHECK",[452,28830,28831],{"align":23875},"定义容器运行时的健康检查命令",[452,28833,28834,28835],{"align":23875},"`HEALTHCHECK CMD curl –fail ",[501,28836,28837],{"href":28837,"rel":28838},"http:\u002F\u002Flocalhost:8080",[24004],[406,28840,28841,28844,28847],{},[452,28842,28843],{"align":23875},"STOPSIGNAL",[452,28845,28846],{"align":23875},"容器停止时发送的信号",[452,28848,28849],{"align":23875},"STOPSIGNAL SIGKILL",[224,28851,28853],{"id":28852},"_62自己创建容器","6.2.自己创建容器",[22137,28855,28857],{"id":28856},"_621手动创建","6.2.1.手动创建",[19,28859,28860],{},"在x86电脑上编译x86的：",[244,28862,28864],{"className":23961,"code":28863,"language":23963,"meta":169,"style":169},"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",[22,28865,28866,28882,28886,28899,28903,28916,28920,28933,28937,28950,28954],{"__ignoreMap":169},[252,28867,28868,28870,28873,28876,28879],{"class":254,"line":255},[252,28869,26693],{"class":2102},[252,28871,28872],{"class":367}," build",[252,28874,28875],{"class":311}," -t",[252,28877,28878],{"class":367}," ros-melodic-cuda118-cudnn8-bionic:latest",[252,28880,28881],{"class":367}," .\n",[252,28883,28884],{"class":254,"line":170},[252,28885,2539],{"emptyLinePlaceholder":181},[252,28887,28888,28890,28892,28894,28897],{"class":254,"line":1318},[252,28889,26693],{"class":2102},[252,28891,28872],{"class":367},[252,28893,28875],{"class":311},[252,28895,28896],{"class":367}," ros-noetic-focal:latest",[252,28898,28881],{"class":367},[252,28900,28901],{"class":254,"line":1333},[252,28902,2539],{"emptyLinePlaceholder":181},[252,28904,28905,28907,28909,28911,28914],{"class":254,"line":1339},[252,28906,26693],{"class":2102},[252,28908,28872],{"class":367},[252,28910,28875],{"class":311},[252,28912,28913],{"class":367}," ros-humble-jammy:latest",[252,28915,28881],{"class":367},[252,28917,28918],{"class":254,"line":1353},[252,28919,2539],{"emptyLinePlaceholder":181},[252,28921,28922,28924,28926,28928,28931],{"class":254,"line":1359},[252,28923,26693],{"class":2102},[252,28925,28872],{"class":367},[252,28927,28875],{"class":311},[252,28929,28930],{"class":367}," ros-jazzy-noble:latest",[252,28932,28881],{"class":367},[252,28934,28935],{"class":254,"line":1450},[252,28936,2539],{"emptyLinePlaceholder":181},[252,28938,28939,28941,28943,28945,28948],{"class":254,"line":1456},[252,28940,26693],{"class":2102},[252,28942,28872],{"class":367},[252,28944,28875],{"class":311},[252,28946,28947],{"class":367}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[252,28949,28881],{"class":367},[252,28951,28952],{"class":254,"line":1468},[252,28953,2539],{"emptyLinePlaceholder":181},[252,28955,28956,28958,28960,28962,28965],{"class":254,"line":1751},[252,28957,26693],{"class":2102},[252,28959,28872],{"class":367},[252,28961,28875],{"class":311},[252,28963,28964],{"class":367}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[252,28966,28881],{"class":367},[19,28968,28969],{},[1601,28970],{"alt":169,"src":28971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,28973,28974],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,28976,28977],{},[1601,28978],{"alt":169,"src":28979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,28981,28982],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[207,28984,28985],{},[210,28986,28987],{},"创建 Docker Hub 账户",[19,28989,28990],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[207,28992,28993],{"start":170},[210,28994,28995],{},"登录 Docker Hub",[19,28997,28998],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[244,29000,29002],{"className":23961,"code":29001,"language":23963,"meta":169,"style":169},"docker login\n",[22,29003,29004],{"__ignoreMap":169},[252,29005,29006,29008],{"class":254,"line":255},[252,29007,26693],{"class":2102},[252,29009,29010],{"class":367}," login\n",[19,29012,29013],{},"输入你的 Docker Hub 用户名和密码进行验证。",[207,29015,29016],{},[210,29017,29018],{},"为你的镜像打标签",[19,29020,29021,29022,29025],{},"Docker Hub 使用 ",[22,29023,29024],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[244,29027,29029],{"className":23961,"code":29028,"language":23963,"meta":169,"style":169},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[22,29030,29031],{"__ignoreMap":169},[252,29032,29033,29035,29038,29040,29043,29046,29049,29051],{"class":254,"line":255},[252,29034,26693],{"class":2102},[252,29036,29037],{"class":367}," tag",[252,29039,28930],{"class":367},[252,29041,29042],{"class":258}," \u003C",[252,29044,29045],{"class":367},"你的用户",[252,29047,29048],{"class":262},"名",[252,29050,1223],{"class":258},[252,29052,29053],{"class":367},"\u002Fros-jazzy-noble:latest\n",[19,29055,29056,29057,29060],{},"例如，如果你的 Docker Hub 用户名是 ",[22,29058,29059],{},"tungchiahui","，你应该执行：",[244,29062,29064],{"className":23961,"code":29063,"language":23963,"meta":169,"style":169},"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",[22,29065,29066,29077,29081,29092,29096,29107,29111,29122,29126],{"__ignoreMap":169},[252,29067,29068,29070,29072,29074],{"class":254,"line":255},[252,29069,26693],{"class":2102},[252,29071,29037],{"class":367},[252,29073,28896],{"class":367},[252,29075,29076],{"class":367}," tungchiahui\u002Fros-noetic-focal:latest\n",[252,29078,29079],{"class":254,"line":170},[252,29080,2539],{"emptyLinePlaceholder":181},[252,29082,29083,29085,29087,29089],{"class":254,"line":1318},[252,29084,26693],{"class":2102},[252,29086,29037],{"class":367},[252,29088,28913],{"class":367},[252,29090,29091],{"class":367}," tungchiahui\u002Fros-humble-jammy:latest\n",[252,29093,29094],{"class":254,"line":1333},[252,29095,2539],{"emptyLinePlaceholder":181},[252,29097,29098,29100,29102,29104],{"class":254,"line":1339},[252,29099,26693],{"class":2102},[252,29101,29037],{"class":367},[252,29103,28930],{"class":367},[252,29105,29106],{"class":367}," tungchiahui\u002Fros-jazzy-noble:latest\n",[252,29108,29109],{"class":254,"line":1353},[252,29110,2539],{"emptyLinePlaceholder":181},[252,29112,29113,29115,29117,29119],{"class":254,"line":1359},[252,29114,26693],{"class":2102},[252,29116,29037],{"class":367},[252,29118,28947],{"class":367},[252,29120,29121],{"class":367}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[252,29123,29124],{"class":254,"line":1450},[252,29125,2539],{"emptyLinePlaceholder":181},[252,29127,29128,29130,29132,29134],{"class":254,"line":1456},[252,29129,26693],{"class":2102},[252,29131,29037],{"class":367},[252,29133,28964],{"class":367},[252,29135,29136],{"class":367}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[207,29138,29139],{"start":170},[210,29140,29141],{},"推送镜像到 Docker Hub",[19,29143,29144],{},"使用以下命令将镜像推送到 Docker Hub：",[244,29146,29148],{"className":23961,"code":29147,"language":23963,"meta":169,"style":169},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[22,29149,29150],{"__ignoreMap":169},[252,29151,29152,29154,29157,29159,29161,29163,29165],{"class":254,"line":255},[252,29153,26693],{"class":2102},[252,29155,29156],{"class":367}," push",[252,29158,29042],{"class":258},[252,29160,29045],{"class":367},[252,29162,29048],{"class":262},[252,29164,1223],{"class":258},[252,29166,29167],{"class":367},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29169,14773],{},[244,29171,29173],{"className":23961,"code":29172,"language":23963,"meta":169,"style":169},"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",[22,29174,29175,29183,29187,29195,29199,29207,29211,29220,29224,29232,29236],{"__ignoreMap":169},[252,29176,29177,29179,29181],{"class":254,"line":255},[252,29178,26693],{"class":2102},[252,29180,29156],{"class":367},[252,29182,29076],{"class":367},[252,29184,29185],{"class":254,"line":170},[252,29186,2539],{"emptyLinePlaceholder":181},[252,29188,29189,29191,29193],{"class":254,"line":1318},[252,29190,26693],{"class":2102},[252,29192,29156],{"class":367},[252,29194,29091],{"class":367},[252,29196,29197],{"class":254,"line":1333},[252,29198,2539],{"emptyLinePlaceholder":181},[252,29200,29201,29203,29205],{"class":254,"line":1339},[252,29202,26693],{"class":2102},[252,29204,29156],{"class":367},[252,29206,29106],{"class":367},[252,29208,29209],{"class":254,"line":1353},[252,29210,2539],{"emptyLinePlaceholder":181},[252,29212,29213,29215,29217],{"class":254,"line":1359},[252,29214,26693],{"class":2102},[252,29216,29156],{"class":367},[252,29218,29219],{"class":367}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[252,29221,29222],{"class":254,"line":1450},[252,29223,2539],{"emptyLinePlaceholder":181},[252,29225,29226,29228,29230],{"class":254,"line":1456},[252,29227,26693],{"class":2102},[252,29229,29156],{"class":367},[252,29231,29136],{"class":367},[252,29233,29234],{"class":254,"line":1468},[252,29235,2539],{"emptyLinePlaceholder":181},[252,29237,29238,29240,29242],{"class":254,"line":1751},[252,29239,26693],{"class":2102},[252,29241,29156],{"class":367},[252,29243,29244],{"class":367}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[207,29246,29247],{"start":1318},[210,29248,29249],{},"验证推送成功",[19,29251,29252],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29254,29255],{},[412,29256,3923],{},[1270,29258,29259,29262],{},[210,29260,29261],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[210,29263,29264],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29266,29267],{},[1601,29268],{"alt":169,"src":29269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29271,29272],{},[1601,29273],{"alt":169,"src":29274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22137,29276,29278],{"id":29277},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29280,29281,29282,29285,29286,29289],{},"如果您想在 ",[412,29283,29284],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[412,29287,29288],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29291,29292,29293],{},"1. ",[412,29294,29295],{},"启用 Docker 跨平台构建",[19,29297,29298],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29300,29301],{},"第一步：启用 buildx（只需执行一次）",[244,29303,29305],{"className":23961,"code":29304,"language":23963,"meta":169,"style":169},"docker buildx create --name multiarch_builder --use\n",[22,29306,29307],{"__ignoreMap":169},[252,29308,29309,29311,29314,29317,29320,29323],{"class":254,"line":255},[252,29310,26693],{"class":2102},[252,29312,29313],{"class":367}," buildx",[252,29315,29316],{"class":367}," create",[252,29318,29319],{"class":311}," --name",[252,29321,29322],{"class":367}," multiarch_builder",[252,29324,29325],{"class":311}," --use\n",[19,29327,29328],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29330,29331],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[244,29333,29335],{"className":23961,"code":29334,"language":23963,"meta":169,"style":169},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[22,29336,29337],{"__ignoreMap":169},[252,29338,29339,29341,29343,29345,29348,29351,29354,29357],{"class":254,"line":255},[252,29340,26693],{"class":2102},[252,29342,27370],{"class":367},[252,29344,27373],{"class":311},[252,29346,29347],{"class":311}," --privileged",[252,29349,29350],{"class":367}," multiarch\u002Fqemu-user-static",[252,29352,29353],{"class":311}," --reset",[252,29355,29356],{"class":311}," -p",[252,29358,29359],{"class":367}," yes\n",[19,29361,29362],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29364,29365],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[244,29367,29369],{"className":23961,"code":29368,"language":23963,"meta":169,"style":169},"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",[22,29370,29371,29413,29417,29422,29432,29442,29451,29457,29461,29465,29475,29483,29492,29498,29502,29506,29516,29524,29533,29539,29543,29547,29557,29565,29574,29580,29584,29588,29598,29606,29615,29621,29625,29629,29639,29647,29656,29662,29666,29670,29680,29688,29697,29703,29707,29711,29721,29729,29738,29744,29748,29752,29762,29770,29779,29785,29789,29793,29804,29812,29821,29827],{"__ignoreMap":169},[252,29372,29373,29375,29377,29379,29382,29385,29387,29389,29392,29394,29396,29398,29400,29403,29406,29408,29411],{"class":254,"line":255},[252,29374,26693],{"class":2102},[252,29376,29313],{"class":367},[252,29378,28872],{"class":367},[252,29380,29381],{"class":311}," --platform",[252,29383,29384],{"class":367}," linux\u002Famd64,linux\u002Farm64",[252,29386,28875],{"class":311},[252,29388,29042],{"class":258},[252,29390,29391],{"class":367},"你的镜像",[252,29393,29048],{"class":262},[252,29395,1223],{"class":258},[252,29397,1122],{"class":367},[252,29399,1173],{"class":258},[252,29401,29402],{"class":367},"标",[252,29404,29405],{"class":262},"签",[252,29407,1223],{"class":258},[252,29409,29410],{"class":311}," --push",[252,29412,28881],{"class":367},[252,29414,29415],{"class":254,"line":170},[252,29416,2539],{"emptyLinePlaceholder":181},[252,29418,29419],{"class":254,"line":1318},[252,29420,29421],{"class":321},"# 例子：\n",[252,29423,29424,29426,29428,29430],{"class":254,"line":1333},[252,29425,26693],{"class":2102},[252,29427,29313],{"class":367},[252,29429,28872],{"class":367},[252,29431,24818],{"class":311},[252,29433,29434,29437,29440],{"class":254,"line":1339},[252,29435,29436],{"class":262},"--platform ",[252,29438,29439],{"class":367},"linux\u002Famd64,linux\u002Farm64",[252,29441,24818],{"class":311},[252,29443,29444,29446,29449],{"class":254,"line":1353},[252,29445,28875],{"class":311},[252,29447,29448],{"class":367}," tungchiahui\u002Fros:noetic-focal",[252,29450,24818],{"class":311},[252,29452,29453,29455],{"class":254,"line":1359},[252,29454,29410],{"class":311},[252,29456,24818],{"class":311},[252,29458,29459],{"class":254,"line":1450},[252,29460,28881],{"class":367},[252,29462,29463],{"class":254,"line":1456},[252,29464,2539],{"emptyLinePlaceholder":181},[252,29466,29467,29469,29471,29473],{"class":254,"line":1468},[252,29468,26693],{"class":2102},[252,29470,29313],{"class":367},[252,29472,28872],{"class":367},[252,29474,24818],{"class":311},[252,29476,29477,29479,29481],{"class":254,"line":1751},[252,29478,29436],{"class":262},[252,29480,29439],{"class":367},[252,29482,24818],{"class":311},[252,29484,29485,29487,29490],{"class":254,"line":1756},[252,29486,28875],{"class":311},[252,29488,29489],{"class":367}," tungchiahui\u002Fros:humble-jammy",[252,29491,24818],{"class":311},[252,29493,29494,29496],{"class":254,"line":1762},[252,29495,29410],{"class":311},[252,29497,24818],{"class":311},[252,29499,29500],{"class":254,"line":1767},[252,29501,28881],{"class":367},[252,29503,29504],{"class":254,"line":1781},[252,29505,2539],{"emptyLinePlaceholder":181},[252,29507,29508,29510,29512,29514],{"class":254,"line":1786},[252,29509,26693],{"class":2102},[252,29511,29313],{"class":367},[252,29513,28872],{"class":367},[252,29515,24818],{"class":311},[252,29517,29518,29520,29522],{"class":254,"line":1792},[252,29519,29436],{"class":262},[252,29521,29439],{"class":367},[252,29523,24818],{"class":311},[252,29525,29526,29528,29531],{"class":254,"line":1813},[252,29527,28875],{"class":311},[252,29529,29530],{"class":367}," tungchiahui\u002Fros:jazzy-noble",[252,29532,24818],{"class":311},[252,29534,29535,29537],{"class":254,"line":1818},[252,29536,29410],{"class":311},[252,29538,24818],{"class":311},[252,29540,29541],{"class":254,"line":1832},[252,29542,28881],{"class":367},[252,29544,29545],{"class":254,"line":1837},[252,29546,2539],{"emptyLinePlaceholder":181},[252,29548,29549,29551,29553,29555],{"class":254,"line":1866},[252,29550,26460],{"class":2102},[252,29552,29313],{"class":367},[252,29554,28872],{"class":367},[252,29556,24818],{"class":311},[252,29558,29559,29561,29563],{"class":254,"line":1871},[252,29560,29436],{"class":262},[252,29562,29439],{"class":367},[252,29564,24818],{"class":311},[252,29566,29567,29569,29572],{"class":254,"line":1888},[252,29568,28875],{"class":311},[252,29570,29571],{"class":367}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[252,29573,24818],{"class":311},[252,29575,29576,29578],{"class":254,"line":1893},[252,29577,29410],{"class":311},[252,29579,24818],{"class":311},[252,29581,29582],{"class":254,"line":1898},[252,29583,28881],{"class":367},[252,29585,29586],{"class":254,"line":1903},[252,29587,2539],{"emptyLinePlaceholder":181},[252,29589,29590,29592,29594,29596],{"class":254,"line":1917},[252,29591,26693],{"class":2102},[252,29593,29313],{"class":367},[252,29595,28872],{"class":367},[252,29597,24818],{"class":311},[252,29599,29600,29602,29604],{"class":254,"line":1922},[252,29601,29436],{"class":262},[252,29603,29439],{"class":367},[252,29605,24818],{"class":311},[252,29607,29608,29610,29613],{"class":254,"line":2716},[252,29609,28875],{"class":311},[252,29611,29612],{"class":367}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[252,29614,24818],{"class":311},[252,29616,29617,29619],{"class":254,"line":2730},[252,29618,29410],{"class":311},[252,29620,24818],{"class":311},[252,29622,29623],{"class":254,"line":2738},[252,29624,28881],{"class":367},[252,29626,29627],{"class":254,"line":2743},[252,29628,2539],{"emptyLinePlaceholder":181},[252,29630,29631,29633,29635,29637],{"class":254,"line":2749},[252,29632,26460],{"class":2102},[252,29634,29313],{"class":367},[252,29636,28872],{"class":367},[252,29638,24818],{"class":311},[252,29640,29641,29643,29645],{"class":254,"line":2755},[252,29642,29436],{"class":262},[252,29644,29439],{"class":367},[252,29646,24818],{"class":311},[252,29648,29649,29651,29654],{"class":254,"line":2760},[252,29650,28875],{"class":311},[252,29652,29653],{"class":367}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[252,29655,24818],{"class":311},[252,29657,29658,29660],{"class":254,"line":8088},[252,29659,29410],{"class":311},[252,29661,24818],{"class":311},[252,29663,29664],{"class":254,"line":8112},[252,29665,28881],{"class":367},[252,29667,29668],{"class":254,"line":8117},[252,29669,2539],{"emptyLinePlaceholder":181},[252,29671,29672,29674,29676,29678],{"class":254,"line":8123},[252,29673,26693],{"class":2102},[252,29675,29313],{"class":367},[252,29677,28872],{"class":367},[252,29679,24818],{"class":311},[252,29681,29682,29684,29686],{"class":254,"line":8150},[252,29683,29436],{"class":262},[252,29685,29439],{"class":367},[252,29687,24818],{"class":311},[252,29689,29690,29692,29695],{"class":254,"line":8155},[252,29691,28875],{"class":311},[252,29693,29694],{"class":367}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[252,29696,24818],{"class":311},[252,29698,29699,29701],{"class":254,"line":8161},[252,29700,29410],{"class":311},[252,29702,24818],{"class":311},[252,29704,29705],{"class":254,"line":8173},[252,29706,28881],{"class":367},[252,29708,29709],{"class":254,"line":8185},[252,29710,2539],{"emptyLinePlaceholder":181},[252,29712,29713,29715,29717,29719],{"class":254,"line":8197},[252,29714,26693],{"class":2102},[252,29716,29313],{"class":367},[252,29718,28872],{"class":367},[252,29720,24818],{"class":311},[252,29722,29723,29725,29727],{"class":254,"line":9856},[252,29724,29436],{"class":262},[252,29726,29439],{"class":367},[252,29728,24818],{"class":311},[252,29730,29731,29733,29736],{"class":254,"line":9881},[252,29732,28875],{"class":311},[252,29734,29735],{"class":367}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[252,29737,24818],{"class":311},[252,29739,29740,29742],{"class":254,"line":9904},[252,29741,29410],{"class":311},[252,29743,24818],{"class":311},[252,29745,29746],{"class":254,"line":9928},[252,29747,28881],{"class":367},[252,29749,29750],{"class":254,"line":9933},[252,29751,2539],{"emptyLinePlaceholder":181},[252,29753,29754,29756,29758,29760],{"class":254,"line":9938},[252,29755,26460],{"class":2102},[252,29757,29313],{"class":367},[252,29759,28872],{"class":367},[252,29761,24818],{"class":311},[252,29763,29764,29766,29768],{"class":254,"line":9943},[252,29765,29436],{"class":262},[252,29767,29439],{"class":367},[252,29769,24818],{"class":311},[252,29771,29772,29774,29777],{"class":254,"line":9952},[252,29773,28875],{"class":311},[252,29775,29776],{"class":367}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[252,29778,24818],{"class":311},[252,29780,29781,29783],{"class":254,"line":9957},[252,29782,29410],{"class":311},[252,29784,24818],{"class":311},[252,29786,29787],{"class":254,"line":9963},[252,29788,28881],{"class":367},[252,29790,29791],{"class":254,"line":9984},[252,29792,2539],{"emptyLinePlaceholder":181},[252,29794,29795,29798,29800,29802],{"class":254,"line":9990},[252,29796,29797],{"class":2102},"  docker",[252,29799,29313],{"class":367},[252,29801,28872],{"class":367},[252,29803,24818],{"class":311},[252,29805,29806,29808,29810],{"class":254,"line":10004},[252,29807,29436],{"class":262},[252,29809,29439],{"class":367},[252,29811,24818],{"class":311},[252,29813,29814,29816,29819],{"class":254,"line":10010},[252,29815,28875],{"class":311},[252,29817,29818],{"class":367}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[252,29820,24818],{"class":311},[252,29822,29823,29825],{"class":254,"line":10037},[252,29824,29410],{"class":311},[252,29826,24818],{"class":311},[252,29828,29829],{"class":254,"line":10046},[252,29830,28881],{"class":367},[19,29832,29833],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,29835,29836],{},[1601,29837],{"alt":169,"src":29838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,29840,29841],{},[1601,29842],{"alt":169,"src":29843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22137,29845,29847],{"id":29846},"_623清除构建缓存","6.2.3.清除构建缓存",[244,29849,29851],{"className":23961,"code":29850,"language":23963,"meta":169,"style":169},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[22,29852,29853,29858],{"__ignoreMap":169},[252,29854,29855],{"class":254,"line":255},[252,29856,29857],{"class":321},"# 清理BuildKit构建缓存\n",[252,29859,29860,29862,29865,29868],{"class":254,"line":170},[252,29861,26693],{"class":2102},[252,29863,29864],{"class":367}," builder",[252,29866,29867],{"class":367}," prune",[252,29869,29870],{"class":311}," -f\n",[19,29872,29873],{},[1601,29874],{"alt":169,"src":29875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[224,29877,29879],{"id":29878},"_63补充","6.3.补充",[22137,29881,29883],{"id":29882},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,29885,29886],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,29888,29889],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,29891,29892],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[244,29894,29896],{"className":23961,"code":29895,"language":23963,"meta":169,"style":169},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[22,29897,29898,29905],{"__ignoreMap":169},[252,29899,29900,29902],{"class":254,"line":255},[252,29901,27510],{"class":2102},[252,29903,29904],{"class":367}," nginx\n",[252,29906,29907,29909,29912,29915,29917],{"class":254,"line":170},[252,29908,28695],{"class":2102},[252,29910,29911],{"class":367}," echo",[252,29913,29914],{"class":367}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[252,29916,26362],{"class":258},[252,29918,29919],{"class":367}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,29921,29922],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,29924,29925],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[244,29927,29929],{"className":23961,"code":29928,"language":23963,"meta":169,"style":169},"docker build -t nginx:tuling .\n",[22,29930,29931],{"__ignoreMap":169},[252,29932,29933,29935,29937,29939,29942],{"class":254,"line":255},[252,29934,26693],{"class":2102},[252,29936,28872],{"class":367},[252,29938,28875],{"class":311},[252,29940,29941],{"class":367}," nginx:tuling",[252,29943,28881],{"class":367},[19,29945,29946],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,29948,29949],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[244,29951,29953],{"className":23961,"code":29952,"language":23963,"meta":169,"style":169},"docker run -d -p 92:80 nginx:tuling\n",[22,29954,29955],{"__ignoreMap":169},[252,29956,29957,29959,29961,29964,29966,29969],{"class":254,"line":255},[252,29958,26693],{"class":2102},[252,29960,27370],{"class":367},[252,29962,29963],{"class":311}," -d",[252,29965,29356],{"class":311},[252,29967,29968],{"class":367}," 92:80",[252,29970,29971],{"class":367}," nginx:tuling\n",[19,29973,29974,29975],{},"4、访问 ",[501,29976,29979],{"href":29977,"rel":29978},"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",[24004],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,29981,29982],{},[1601,29983],{"alt":169,"src":29984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,29986,29987],{},[1601,29988],{"alt":169,"src":29989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22137,29991,29993],{"id":29992},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,29995,29996],{},"只需要知道大体流程即可",[19,29998,29999],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30001,30002],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30004,30005],{},"2、在Dockerfile中添加以下内容",[244,30007,30009],{"className":26231,"code":30008,"language":26233,"meta":169,"style":169},"# 基于哪个镜像\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",[22,30010,30011,30016,30021,30026,30031,30036,30041,30046],{"__ignoreMap":169},[252,30012,30013],{"class":254,"line":255},[252,30014,30015],{},"# 基于哪个镜像\n",[252,30017,30018],{"class":254,"line":170},[252,30019,30020],{},"From java:8\n",[252,30022,30023],{"class":254,"line":1318},[252,30024,30025],{},"# 复制文件到容器\n",[252,30027,30028],{"class":254,"line":1333},[252,30029,30030],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[252,30032,30033],{"class":254,"line":1339},[252,30034,30035],{},"# 声明需要暴露的端口\n",[252,30037,30038],{"class":254,"line":1353},[252,30039,30040],{},"EXPOSE 8877\n",[252,30042,30043],{"class":254,"line":1359},[252,30044,30045],{},"# 配置容器启动后执行的命令\n",[252,30047,30048],{"class":254,"line":1450},[252,30049,30050],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30052,30053],{},"3、使用docker build命令构建镜像",[244,30055,30057],{"className":23961,"code":30056,"language":23963,"meta":169,"style":169},"docker build -t tulingmall-member:0.0.5 .\n",[22,30058,30059],{"__ignoreMap":169},[252,30060,30061,30063,30065,30067,30070],{"class":254,"line":255},[252,30062,26693],{"class":2102},[252,30064,28872],{"class":367},[252,30066,28875],{"class":311},[252,30068,30069],{"class":367}," tulingmall-member:0.0.5",[252,30071,28881],{"class":367},[19,30073,30074],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30076,30077],{},[1601,30078],{"alt":169,"src":30079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30081,30082],{},"4、启动镜像，加-d可在后台启动",[244,30084,30086],{"className":23961,"code":30085,"language":23963,"meta":169,"style":169},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[22,30087,30088],{"__ignoreMap":169},[252,30089,30090,30092,30094,30096,30098,30101],{"class":254,"line":255},[252,30091,26693],{"class":2102},[252,30093,27370],{"class":367},[252,30095,29963],{"class":311},[252,30097,29356],{"class":311},[252,30099,30100],{"class":367}," 8877:8877",[252,30102,30103],{"class":367}," tulingmall-member:0.0.5\n",[19,30105,30106],{},"加上JVM参数：",[244,30108,30110],{"className":23961,"code":30109,"language":23963,"meta":169,"style":169},"# --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",[22,30111,30112,30117,30132,30142,30151,30158],{"__ignoreMap":169},[252,30113,30114],{"class":254,"line":255},[252,30115,30116],{"class":321},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[252,30118,30119,30121,30123,30126,30128,30130],{"class":254,"line":170},[252,30120,26693],{"class":2102},[252,30122,27370],{"class":367},[252,30124,30125],{"class":311},"  -d",[252,30127,29356],{"class":311},[252,30129,30100],{"class":367},[252,30131,24818],{"class":311},[252,30133,30134,30136,30139],{"class":254,"line":1318},[252,30135,28268],{"class":262},[252,30137,30138],{"class":367},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[252,30140,30141],{"class":311},"  \\\n",[252,30143,30144,30146,30149],{"class":254,"line":1333},[252,30145,28268],{"class":262},[252,30147,30148],{"class":367},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[252,30150,30141],{"class":311},[252,30152,30153,30156],{"class":254,"line":1339},[252,30154,30155],{"class":262},"--cap-add=SYS_PTRACE  ",[252,30157,26315],{"class":311},[252,30159,30160],{"class":254,"line":1353},[252,30161,30162],{"class":262},"tulingmall-member:0.0.5\n",[19,30164,30165],{},"5、访问会员服务接口",[19,30167,30168],{},[1601,30169],{"alt":169,"src":30170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22137,30172,30174],{"id":30173},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30176,30177],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30179,30180,30181],{},"阿里云docker镜像仓库：",[501,30182,30183],{"href":30183,"rel":30184},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24004],[19,30186,30187],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30189,30190],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30192,30193],{},[1601,30194],{"alt":169,"src":30195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30197,30198],{},"要把镜像推送到镜像仓库",[244,30200,30202],{"className":23961,"code":30201,"language":23963,"meta":169,"style":169},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[22,30203,30204],{"__ignoreMap":169},[252,30205,30206,30208,30210,30212],{"class":254,"line":255},[252,30207,26693],{"class":2102},[252,30209,29037],{"class":367},[252,30211,30069],{"class":367},[252,30213,30214],{"class":367}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30216,30217],{},"最后将镜像推送到远程仓库",[244,30219,30221],{"className":23961,"code":30220,"language":23963,"meta":169,"style":169},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[22,30222,30223],{"__ignoreMap":169},[252,30224,30225,30227,30229],{"class":254,"line":255},[252,30226,26693],{"class":2102},[252,30228,29156],{"class":367},[252,30230,30214],{"class":367},[5266,30232,30233],{},"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":169,"searchDepth":170,"depth":170,"links":30235},[30236,30237,30238],{"id":28623,"depth":1318,"text":28624},{"id":28852,"depth":1318,"text":28853},{"id":29878,"depth":1318,"text":29879},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28615,"description":169},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30245,"title":30246,"body":30247,"description":169,"extension":179,"meta":30390,"navigation":181,"path":30391,"seo":30392,"stem":30393,"__hash__":30394},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30248,"toc":30388},[30249,30252,30257,30262,30265,30270,30275,30278,30283,30288,30291,30296,30299,30302,30305,30308,30311,30314,30334,30356,30359,30362,30382,30385],[10,30250,30246],{"id":30251},"_7vscode远程开发",[207,30253,30254],{},[210,30255,30256],{},"插件1：微软Docker工具",[19,30258,30259],{},[1601,30260],{"alt":169,"src":30261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30263,30264],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30266,30267],{},[1601,30268],{"alt":169,"src":30269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[207,30271,30272],{"start":170},[210,30273,30274],{},"插件2：微软Docker远程开发工具",[19,30276,30277],{},"下面这是远程开发的插件。",[19,30279,30280],{},[1601,30281],{"alt":169,"src":30282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30284,30285],{},[1601,30286],{"alt":169,"src":30287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30289,30290],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30292,30293],{},[1601,30294],{"alt":169,"src":30295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30297,30298],{},"安装完拓展之后，vscode进行链接：",[19,30300,30301],{},"1.按ctrl+shift+p",[19,30303,30304],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30306,30307],{},"3.选择目前运行的容器",[19,30309,30310],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30312,30313],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[244,30315,30317],{"className":23961,"code":30316,"language":23963,"meta":169,"style":169},"docker run -v 主机目录:容器目录 image-name\n",[22,30318,30319],{"__ignoreMap":169},[252,30320,30321,30323,30325,30328,30331],{"class":254,"line":255},[252,30322,26693],{"class":2102},[252,30324,27370],{"class":367},[252,30326,30327],{"class":311}," -v",[252,30329,30330],{"class":367}," 主机目录:容器目录",[252,30332,30333],{"class":367}," image-name\n",[244,30335,30337],{"className":23961,"code":30336,"language":23963,"meta":169,"style":169},"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",[22,30338,30339],{"__ignoreMap":169},[252,30340,30341,30343,30345,30348,30350,30353],{"class":254,"line":255},[252,30342,26693],{"class":2102},[252,30344,27370],{"class":367},[252,30346,30347],{"class":311}," -it",[252,30349,30327],{"class":311},[252,30351,30352],{"class":367}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[252,30354,30355],{"class":367}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30357,30358],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30360,30361],{},"查看挂载情况：",[244,30363,30365],{"className":23961,"code":30364,"language":23963,"meta":169,"style":169},"mount | grep -i project\n",[22,30366,30367],{"__ignoreMap":169},[252,30368,30369,30372,30374,30377,30379],{"class":254,"line":255},[252,30370,30371],{"class":2102},"mount",[252,30373,25249],{"class":258},[252,30375,30376],{"class":2102}," grep",[252,30378,26570],{"class":311},[252,30380,30381],{"class":367}," project\n",[19,30383,30384],{},"也可以通过ls来进行查看",[5266,30386,30387],{},"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":169,"searchDepth":170,"depth":170,"links":30389},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30246,"description":169},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30396,"title":30397,"body":30398,"description":178,"extension":179,"meta":30402,"navigation":181,"path":30404,"seo":30405,"stem":30406,"__hash__":30407},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30399,"toc":30400},[],{"title":169,"searchDepth":170,"depth":170,"links":30401},[],{"category":30403},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30397,"description":178},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30409,"title":30410,"body":30411,"description":178,"extension":179,"meta":30415,"navigation":181,"path":30416,"seo":30417,"stem":30418,"__hash__":30419},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30412,"toc":30413},[],{"title":169,"searchDepth":170,"depth":170,"links":30414},[],{"category":30403},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30410,"description":178},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30421,"title":30422,"body":30423,"description":178,"extension":179,"meta":30716,"navigation":181,"path":30717,"seo":30718,"stem":30719,"__hash__":30720},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30424,"toc":30714},[30425,30428,30436,30451,30456,30507,30510,30516,30703,30708,30711],[10,30426,30422],{"id":30427},"_1验证深度学习环境",[19,30429,30430,30431],{},"关于环境的安装，看",[501,30432,30435],{"href":30433,"rel":30434},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24004],"Pytorch-->深度学习",[19,30437,30438,30439,30442,30443,30446,30447,30450],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[22,30440,30441],{},"pytorch-cuda=12.4"," 是一个“ ",[412,30444,30445],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[412,30448,30449],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30452,30453],{},[1601,30454],{"alt":169,"src":30455},"\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",[244,30457,30459],{"className":23961,"code":30458,"language":23963,"meta":169,"style":169},"# 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",[22,30460,30461,30466],{"__ignoreMap":169},[252,30462,30463],{"class":254,"line":255},[252,30464,30465],{"class":321},"# CUDA 12.4\n",[252,30467,30468,30471,30473,30476,30479,30482,30485,30488,30490,30493,30496,30499,30502,30504],{"class":254,"line":170},[252,30469,30470],{"class":2102},"conda",[252,30472,23973],{"class":367},[252,30474,30475],{"class":367}," pytorch==",[252,30477,30478],{"class":311},"2.5.1",[252,30480,30481],{"class":367}," torchvision==",[252,30483,30484],{"class":311},"0.20.1",[252,30486,30487],{"class":367}," torchaudio==",[252,30489,30478],{"class":311},[252,30491,30492],{"class":367}," pytorch-cuda=",[252,30494,30495],{"class":311},"12.4",[252,30497,30498],{"class":311}," -c",[252,30500,30501],{"class":367}," pytorch",[252,30503,30498],{"class":311},[252,30505,30506],{"class":367}," nvidia\n",[19,30508,30509],{},"）：",[19,30511,30512],{},[501,30513,30514],{"href":30514,"rel":30515},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24004],[244,30517,30521],{"className":30518,"code":30519,"language":30520,"meta":169,"style":169},"language-python shiki shiki-themes github-light github-dark","# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n","python",[22,30522,30523,30528,30536,30541,30551,30567,30572,30582,30619,30626,30638,30654,30659,30669,30681,30691],{"__ignoreMap":169},[252,30524,30525],{"class":254,"line":255},[252,30526,30527],{"class":321},"# 对深度学习环境进行测试\n",[252,30529,30530,30533],{"class":254,"line":170},[252,30531,30532],{"class":258},"import",[252,30534,30535],{"class":262}," torch\n",[252,30537,30538],{"class":254,"line":1318},[252,30539,30540],{"class":321},"# 查看cuda是否被激活\n",[252,30542,30543,30546,30548],{"class":254,"line":1333},[252,30544,30545],{"class":262},"flag",[252,30547,308],{"class":258},[252,30549,30550],{"class":262},"torch.cuda.is_available()\n",[252,30552,30553,30556,30558,30561,30564],{"class":254,"line":1339},[252,30554,30555],{"class":311},"print",[252,30557,263],{"class":262},[252,30559,30560],{"class":367},"\"cuda:\"",[252,30562,30563],{"class":262},", flag)   ",[252,30565,30566],{"class":321},"#返回true的话说明被激活\n",[252,30568,30569],{"class":254,"line":1353},[252,30570,30571],{"class":321},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[252,30573,30574,30577,30579],{"class":254,"line":1359},[252,30575,30576],{"class":262},"ngpu",[252,30578,308],{"class":258},[252,30580,30581],{"class":311},"1\n",[252,30583,30584,30587,30589,30592,30595,30597,30600,30603,30606,30608,30610,30612,30614,30617],{"class":254,"line":1450},[252,30585,30586],{"class":262},"device",[252,30588,308],{"class":258},[252,30590,30591],{"class":262},"torch.device(",[252,30593,30594],{"class":367},"\"cuda:0\"",[252,30596,1843],{"class":258},[252,30598,30599],{"class":262},"(torch.cuda.is_available() ",[252,30601,30602],{"class":258},"and",[252,30604,30605],{"class":262}," ngpu",[252,30607,1223],{"class":258},[252,30609,454],{"class":311},[252,30611,13854],{"class":262},[252,30613,1840],{"class":258},[252,30615,30616],{"class":367}," \"cpu\"",[252,30618,269],{"class":262},[252,30620,30621,30623],{"class":254,"line":1456},[252,30622,30555],{"class":311},[252,30624,30625],{"class":262},"(device)\n",[252,30627,30628,30630,30633,30635],{"class":254,"line":1468},[252,30629,30555],{"class":311},[252,30631,30632],{"class":262},"(torch.cuda.get_device_name(",[252,30634,454],{"class":311},[252,30636,30637],{"class":262},"))\n",[252,30639,30640,30642,30645,30647,30649,30651],{"class":254,"line":1751},[252,30641,30555],{"class":311},[252,30643,30644],{"class":262},"(torch.rand(",[252,30646,334],{"class":311},[252,30648,641],{"class":262},[252,30650,334],{"class":311},[252,30652,30653],{"class":262},").cuda())\n",[252,30655,30656],{"class":254,"line":1756},[252,30657,30658],{"class":321},"# 查看cuda和cudnn的版本\n",[252,30660,30661,30664,30666],{"class":254,"line":1762},[252,30662,30663],{"class":262},"cuda_version",[252,30665,308],{"class":258},[252,30667,30668],{"class":262},"torch.version.cuda\n",[252,30670,30671,30673,30675,30678],{"class":254,"line":1767},[252,30672,30555],{"class":311},[252,30674,263],{"class":262},[252,30676,30677],{"class":367},"\"cuda version\"",[252,30679,30680],{"class":262},",cuda_version)\n",[252,30682,30683,30686,30688],{"class":254,"line":1781},[252,30684,30685],{"class":262},"cudnn_version",[252,30687,308],{"class":258},[252,30689,30690],{"class":262},"torch.backends.cudnn.version()\n",[252,30692,30693,30695,30697,30700],{"class":254,"line":1786},[252,30694,30555],{"class":311},[252,30696,263],{"class":262},[252,30698,30699],{"class":367},"\"cudnn version\"",[252,30701,30702],{"class":262},",cudnn_version)\n",[19,30704,30705],{},[1601,30706],{"alt":169,"src":30707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,30709,30710],{},"cuda:0 指的是一块显卡",[5266,30712,30713],{},"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":169,"searchDepth":170,"depth":170,"links":30715},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30422,"description":178},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30722,"title":30723,"body":30724,"description":178,"extension":179,"meta":50528,"navigation":181,"path":50529,"seo":50530,"stem":50531,"__hash__":50532},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30725,"toc":50522},[30726,30729,30733,30737,30740,30745,30750,30753,30758,30763,30768,30771,30775,30780,30784,30789,30792,30797,30800,30803,30806,30809,30814,30817,30822,30827,30832,30837,30840,30844,30847,30852,31456,31461,31464,31469,31472,31475,31939,31942,31945,31948,31951,34002,34005,34010,34015,34810,34813,34818,35596,35600,37259,37263,37977,37981,37985,37990,37995,38000,38003,38008,38013,38018,38023,38028,38032,38037,39319,39324,39327,39330,39333,39488,39491,39494,40710,40715,41410,41414,41418,41423,41428,41431,41436,41441,41446,41451,41456,41461,41466,41471,41476,41481,41486,41491,41496,41501,41506,41511,41516,41521,41526,41531,41536,41541,41546,41551,41556,41561,41566,41571,41576,41581,41585,41589,41592,43070,43074,44721,44725,45419,45423,45426,45429,45973,45976,45980,45983,47380,47384,47387,47965,49752,49756,49759,50519],[10,30727,30723],{"id":30728},"_2经典神经网络",[224,30730,30732],{"id":30731},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22137,30734,30736],{"id":30735},"_211原理介绍","2.1.1.原理介绍",[19,30738,30739],{},"LeNet-5",[207,30741,30742],{},[210,30743,30744],{},"原理",[19,30746,30747],{},[1601,30748],{"alt":169,"src":30749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,30751,30752],{},"B是batch批次；C是channel通道",[207,30754,30755],{"start":170},[210,30756,30757],{},"网络参数详细",[19,30759,30760],{},[1601,30761],{"alt":169,"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-004.png",[19,30764,30765],{},[1601,30766],{"alt":169,"src":30767},"\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",[19,30769,30770],{},"AlexNet",[207,30772,30773],{},[210,30774,30744],{},[19,30776,30777],{},[1601,30778],{"alt":169,"src":30779},"\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",[207,30781,30782],{"start":170},[210,30783,30757],{},[19,30785,30786],{},[1601,30787],{"alt":169,"src":30788},"\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",[19,30790,30791],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,30793,30794],{},[1601,30795],{"alt":169,"src":30796},"\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",[19,30798,30799],{},"数据处理中的图像增强操作:",[19,30801,30802],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,30804,30805],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,30807,30808],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,30810,30811],{},[1601,30812],{"alt":169,"src":30813},"\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",[19,30815,30816],{},"提升网络精确度的方法：LRN正则化",[19,30818,30819],{},[1601,30820],{"alt":169,"src":30821},"\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",[19,30823,30824],{},[1601,30825],{"alt":169,"src":30826},"\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",[207,30828,30829],{"start":1318},[210,30830,30831],{},"AlexNet的总结",[19,30833,30834],{},[1601,30835],{"alt":169,"src":30836},"\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",[19,30838,30839],{},"比LeNet模型要深一丢丢",[22137,30841,30843],{"id":30842},"_212代码实现","2.1.2.代码实现",[19,30845,30846],{},"（1）LeNet",[207,30848,30849],{},[210,30850,30851],{},"模型搭建",[244,30853,30855],{"className":30518,"code":30854,"language":30520,"meta":169,"style":169},"# 导入库\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",[22,30856,30857,30862,30868,30873,30886,30891,30903,30907,30927,30932,30937,30948,30953,30972,30976,30981,31030,31042,31047,31076,31111,31138,31143,31155,31160,31180,31199,31218,31222,31227,31237,31254,31265,31280,31291,31302,31317,31332,31343,31350,31354,31368,31373,31396,31401,31406,31411,31415,31420,31425,31435],{"__ignoreMap":169},[252,30858,30859],{"class":254,"line":255},[252,30860,30861],{"class":321},"# 导入库\n",[252,30863,30864,30866],{"class":254,"line":170},[252,30865,30532],{"class":258},[252,30867,30535],{"class":262},[252,30869,30870],{"class":254,"line":1318},[252,30871,30872],{"class":321},"# 导入神经网络层\n",[252,30874,30875,30878,30881,30883],{"class":254,"line":1333},[252,30876,30877],{"class":258},"from",[252,30879,30880],{"class":262}," torch ",[252,30882,30532],{"class":258},[252,30884,30885],{"class":262}," nn\n",[252,30887,30888],{"class":254,"line":1339},[252,30889,30890],{"class":321},"# 导入展示神经网络参数的包\n",[252,30892,30893,30895,30898,30900],{"class":254,"line":1353},[252,30894,30877],{"class":258},[252,30896,30897],{"class":262}," torchsummary ",[252,30899,30532],{"class":258},[252,30901,30902],{"class":262}," summary\n",[252,30904,30905],{"class":254,"line":1359},[252,30906,2539],{"emptyLinePlaceholder":181},[252,30908,30909,30911,30914,30916,30919,30921,30924],{"class":254,"line":1450},[252,30910,14834],{"class":258},[252,30912,30913],{"class":2102}," LeNet",[252,30915,263],{"class":262},[252,30917,30918],{"class":2102},"nn",[252,30920,821],{"class":262},[252,30922,30923],{"class":2102},"Module",[252,30925,30926],{"class":262},"):\n",[252,30928,30929],{"class":254,"line":1456},[252,30930,30931],{"class":321},"    # 模型初始化:\n",[252,30933,30934],{"class":254,"line":1468},[252,30935,30936],{"class":321},"    # 定义一些网络层和激活函数\n",[252,30938,30939,30942,30945],{"class":254,"line":1751},[252,30940,30941],{"class":258},"    def",[252,30943,30944],{"class":311}," __init__",[252,30946,30947],{"class":262},"(self):\n",[252,30949,30950],{"class":254,"line":1756},[252,30951,30952],{"class":321},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[252,30954,30955,30958,30961,30964,30967,30970],{"class":254,"line":1762},[252,30956,30957],{"class":311},"        super",[252,30959,30960],{"class":262},"(LeNet,",[252,30962,30963],{"class":311},"self",[252,30965,30966],{"class":262},").",[252,30968,30969],{"class":311},"__init__",[252,30971,2115],{"class":262},[252,30973,30974],{"class":254,"line":1767},[252,30975,2539],{"emptyLinePlaceholder":181},[252,30977,30978],{"class":254,"line":1781},[252,30979,30980],{"class":321},"        # 定义网络层\n",[252,30982,30983,30986,30989,30991,30994,30997,30999,31001,31003,31006,31008,31010,31012,31015,31017,31019,31021,31024,31026,31028],{"class":254,"line":1786},[252,30984,30985],{"class":311},"        self",[252,30987,30988],{"class":262},".c1",[252,30990,308],{"class":258},[252,30992,30993],{"class":262},"nn.Conv2d(",[252,30995,30996],{"class":5356},"in_channels",[252,30998,308],{"class":258},[252,31000,480],{"class":311},[252,31002,641],{"class":262},[252,31004,31005],{"class":5356},"out_channels",[252,31007,308],{"class":258},[252,31009,607],{"class":311},[252,31011,641],{"class":262},[252,31013,31014],{"class":5356},"kernel_size",[252,31016,308],{"class":258},[252,31018,582],{"class":311},[252,31020,641],{"class":262},[252,31022,31023],{"class":5356},"padding",[252,31025,308],{"class":258},[252,31027,340],{"class":311},[252,31029,269],{"class":262},[252,31031,31032,31034,31037,31039],{"class":254,"line":1792},[252,31033,30985],{"class":311},[252,31035,31036],{"class":262},".sig",[252,31038,308],{"class":258},[252,31040,31041],{"class":262},"nn.Sigmoid()\n",[252,31043,31044],{"class":254,"line":1813},[252,31045,31046],{"class":321},"        # 定义池化\n",[252,31048,31049,31051,31054,31056,31059,31061,31063,31065,31067,31070,31072,31074],{"class":254,"line":1818},[252,31050,30985],{"class":311},[252,31052,31053],{"class":262},".s2",[252,31055,308],{"class":258},[252,31057,31058],{"class":262},"nn.AvgPool2d(",[252,31060,31014],{"class":5356},[252,31062,308],{"class":258},[252,31064,340],{"class":311},[252,31066,641],{"class":262},[252,31068,31069],{"class":5356},"stride",[252,31071,308],{"class":258},[252,31073,340],{"class":311},[252,31075,269],{"class":262},[252,31077,31078,31080,31083,31085,31087,31089,31091,31093,31095,31097,31099,31101,31103,31105,31107,31109],{"class":254,"line":1832},[252,31079,30985],{"class":311},[252,31081,31082],{"class":262},".c3",[252,31084,308],{"class":258},[252,31086,30993],{"class":262},[252,31088,30996],{"class":5356},[252,31090,308],{"class":258},[252,31092,607],{"class":311},[252,31094,641],{"class":262},[252,31096,31005],{"class":5356},[252,31098,308],{"class":258},[252,31100,864],{"class":311},[252,31102,641],{"class":262},[252,31104,31014],{"class":5356},[252,31106,308],{"class":258},[252,31108,582],{"class":311},[252,31110,269],{"class":262},[252,31112,31113,31115,31118,31120,31122,31124,31126,31128,31130,31132,31134,31136],{"class":254,"line":1837},[252,31114,30985],{"class":311},[252,31116,31117],{"class":262},".s4",[252,31119,308],{"class":258},[252,31121,31058],{"class":262},[252,31123,31014],{"class":5356},[252,31125,308],{"class":258},[252,31127,340],{"class":311},[252,31129,641],{"class":262},[252,31131,31069],{"class":5356},[252,31133,308],{"class":258},[252,31135,340],{"class":311},[252,31137,269],{"class":262},[252,31139,31140],{"class":254,"line":1866},[252,31141,31142],{"class":321},"        # 定义平展层\n",[252,31144,31145,31147,31150,31152],{"class":254,"line":1871},[252,31146,30985],{"class":311},[252,31148,31149],{"class":262},".flatten",[252,31151,308],{"class":258},[252,31153,31154],{"class":262},"nn.Flatten()\n",[252,31156,31157],{"class":254,"line":1888},[252,31158,31159],{"class":321},"        # 定义全连接层\n",[252,31161,31162,31164,31167,31169,31172,31174,31176,31178],{"class":254,"line":1893},[252,31163,30985],{"class":311},[252,31165,31166],{"class":262},".f5",[252,31168,308],{"class":258},[252,31170,31171],{"class":262},"nn.Linear(",[252,31173,4126],{"class":311},[252,31175,641],{"class":262},[252,31177,1080],{"class":311},[252,31179,269],{"class":262},[252,31181,31182,31184,31187,31189,31191,31193,31195,31197],{"class":254,"line":1898},[252,31183,30985],{"class":311},[252,31185,31186],{"class":262},".f6",[252,31188,308],{"class":258},[252,31190,31171],{"class":262},[252,31192,1080],{"class":311},[252,31194,641],{"class":262},[252,31196,974],{"class":311},[252,31198,269],{"class":262},[252,31200,31201,31203,31206,31208,31210,31212,31214,31216],{"class":254,"line":1903},[252,31202,30985],{"class":311},[252,31204,31205],{"class":262},".f7",[252,31207,308],{"class":258},[252,31209,31171],{"class":262},[252,31211,974],{"class":311},[252,31213,641],{"class":262},[252,31215,709],{"class":311},[252,31217,269],{"class":262},[252,31219,31220],{"class":254,"line":1917},[252,31221,2539],{"emptyLinePlaceholder":181},[252,31223,31224],{"class":254,"line":1922},[252,31225,31226],{"class":321},"    # 写工具->写前向传播\n",[252,31228,31229,31231,31234],{"class":254,"line":2716},[252,31230,30941],{"class":258},[252,31232,31233],{"class":2102}," forward",[252,31235,31236],{"class":262},"(self,x):\n",[252,31238,31239,31242,31244,31246,31249,31251],{"class":254,"line":2730},[252,31240,31241],{"class":262},"        x",[252,31243,308],{"class":258},[252,31245,30963],{"class":311},[252,31247,31248],{"class":262},".sig(",[252,31250,30963],{"class":311},[252,31252,31253],{"class":262},".c1(x))\n",[252,31255,31256,31258,31260,31262],{"class":254,"line":2738},[252,31257,31241],{"class":262},[252,31259,308],{"class":258},[252,31261,30963],{"class":311},[252,31263,31264],{"class":262},".s2(x)\n",[252,31266,31267,31269,31271,31273,31275,31277],{"class":254,"line":2743},[252,31268,31241],{"class":262},[252,31270,308],{"class":258},[252,31272,30963],{"class":311},[252,31274,31248],{"class":262},[252,31276,30963],{"class":311},[252,31278,31279],{"class":262},".c3(x))\n",[252,31281,31282,31284,31286,31288],{"class":254,"line":2749},[252,31283,31241],{"class":262},[252,31285,308],{"class":258},[252,31287,30963],{"class":311},[252,31289,31290],{"class":262},".s4(x)\n",[252,31292,31293,31295,31297,31299],{"class":254,"line":2755},[252,31294,31241],{"class":262},[252,31296,308],{"class":258},[252,31298,30963],{"class":311},[252,31300,31301],{"class":262},".flatten(x)\n",[252,31303,31304,31306,31308,31310,31312,31314],{"class":254,"line":2760},[252,31305,31241],{"class":262},[252,31307,308],{"class":258},[252,31309,30963],{"class":311},[252,31311,31248],{"class":262},[252,31313,30963],{"class":311},[252,31315,31316],{"class":262},".f5(x))\n",[252,31318,31319,31321,31323,31325,31327,31329],{"class":254,"line":8088},[252,31320,31241],{"class":262},[252,31322,308],{"class":258},[252,31324,30963],{"class":311},[252,31326,31248],{"class":262},[252,31328,30963],{"class":311},[252,31330,31331],{"class":262},".f6(x))\n",[252,31333,31334,31336,31338,31340],{"class":254,"line":8112},[252,31335,31241],{"class":262},[252,31337,308],{"class":258},[252,31339,30963],{"class":311},[252,31341,31342],{"class":262},".f7(x)\n",[252,31344,31345,31347],{"class":254,"line":8117},[252,31346,14892],{"class":258},[252,31348,31349],{"class":262}," x\n",[252,31351,31352],{"class":254,"line":8123},[252,31353,2539],{"emptyLinePlaceholder":181},[252,31355,31356,31358,31361,31363,31366],{"class":254,"line":8150},[252,31357,1670],{"class":258},[252,31359,31360],{"class":311}," __name__",[252,31362,3088],{"class":258},[252,31364,31365],{"class":367},"\"__main__\"",[252,31367,3878],{"class":262},[252,31369,31370],{"class":254,"line":8155},[252,31371,31372],{"class":321},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[252,31374,31375,31378,31380,31382,31385,31387,31390,31392,31394],{"class":254,"line":8161},[252,31376,31377],{"class":262},"    device",[252,31379,308],{"class":258},[252,31381,30591],{"class":262},[252,31383,31384],{"class":367},"\"cuda\"",[252,31386,1843],{"class":258},[252,31388,31389],{"class":262}," torch.cuda.is_available() ",[252,31391,1840],{"class":258},[252,31393,30616],{"class":367},[252,31395,269],{"class":262},[252,31397,31398],{"class":254,"line":8173},[252,31399,31400],{"class":321},"    # 如果就是想指定用cpu用下方代码:\n",[252,31402,31403],{"class":254,"line":8185},[252,31404,31405],{"class":321},"    # device=\"cpu\"\n",[252,31407,31408],{"class":254,"line":8197},[252,31409,31410],{"class":321},"    # print(device)\n",[252,31412,31413],{"class":254,"line":9856},[252,31414,2539],{"emptyLinePlaceholder":181},[252,31416,31417],{"class":254,"line":9881},[252,31418,31419],{"class":321},"    # 实例化模型\n",[252,31421,31422],{"class":254,"line":9904},[252,31423,31424],{"class":321},"    # 将模型放到设备中去运行\n",[252,31426,31427,31430,31432],{"class":254,"line":9928},[252,31428,31429],{"class":262},"    model",[252,31431,308],{"class":258},[252,31433,31434],{"class":262},"LeNet().to(device)\n",[252,31436,31437,31440,31443,31445,31447,31449,31451,31453],{"class":254,"line":9933},[252,31438,31439],{"class":311},"    print",[252,31441,31442],{"class":262},"(summary(model,(",[252,31444,480],{"class":311},[252,31446,641],{"class":262},[252,31448,1164],{"class":311},[252,31450,641],{"class":262},[252,31452,1164],{"class":311},[252,31454,31455],{"class":262},")))\n",[19,31457,31458],{},[1601,31459],{"alt":169,"src":31460},"\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",[19,31462,31463],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[207,31465,31466],{"start":170},[210,31467,31468],{},"训练",[19,31470,31471],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31473,31474],{},"在训练之前可以将数据展示看一下",[244,31476,31478],{"className":30518,"code":31477,"language":30520,"meta":169,"style":169},"# 建立画图的函数，用于展示数据\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",[22,31479,31480,31485,31490,31502,31514,31527,31532,31544,31549,31561,31566,31578,31582,31586,31607,31619,31624,31645,31656,31660,31665,31683,31694,31699,31710,31715,31726,31730,31735,31750,31763,31768,31773,31786,31799,31812,31817,31821,31826,31846,31863,31883,31896,31909,31919,31934],{"__ignoreMap":169},[252,31481,31482],{"class":254,"line":255},[252,31483,31484],{"class":321},"# 建立画图的函数，用于展示数据\n",[252,31486,31487],{"class":254,"line":170},[252,31488,31489],{"class":321},"# torchvision中包含很多内置的数据集\n",[252,31491,31492,31494,31497,31499],{"class":254,"line":1318},[252,31493,30877],{"class":258},[252,31495,31496],{"class":262}," sklearn.externals.array_api_compat.torch ",[252,31498,30532],{"class":258},[252,31500,31501],{"class":262}," squeeze\n",[252,31503,31504,31506,31509,31511],{"class":254,"line":1333},[252,31505,30877],{"class":258},[252,31507,31508],{"class":262}," torchvision.datasets ",[252,31510,30532],{"class":258},[252,31512,31513],{"class":262}," FashionMNIST\n",[252,31515,31516,31518,31521,31524],{"class":254,"line":1339},[252,31517,30532],{"class":258},[252,31519,31520],{"class":262}," numpy ",[252,31522,31523],{"class":258},"as",[252,31525,31526],{"class":262}," np\n",[252,31528,31529],{"class":254,"line":1353},[252,31530,31531],{"class":321},"# 引入处理数据集的包\n",[252,31533,31534,31536,31539,31541],{"class":254,"line":1359},[252,31535,30877],{"class":258},[252,31537,31538],{"class":262}," torchvision ",[252,31540,30532],{"class":258},[252,31542,31543],{"class":262}," transforms\n",[252,31545,31546],{"class":254,"line":1450},[252,31547,31548],{"class":321},"# 从torch库中引入数据处理的包\n",[252,31550,31551,31553,31556,31558],{"class":254,"line":1456},[252,31552,30532],{"class":258},[252,31554,31555],{"class":262}," torch.utils.data ",[252,31557,31523],{"class":258},[252,31559,31560],{"class":262}," Data\n",[252,31562,31563],{"class":254,"line":1468},[252,31564,31565],{"class":321},"# 导入画图的库\n",[252,31567,31568,31570,31573,31575],{"class":254,"line":1751},[252,31569,30532],{"class":258},[252,31571,31572],{"class":262}," matplotlib.pyplot ",[252,31574,31523],{"class":258},[252,31576,31577],{"class":262}," plt\n",[252,31579,31580],{"class":254,"line":1756},[252,31581,2539],{"emptyLinePlaceholder":181},[252,31583,31584],{"class":254,"line":1762},[252,31585,2539],{"emptyLinePlaceholder":181},[252,31587,31588,31591,31593,31596,31599,31601,31604],{"class":254,"line":1767},[252,31589,31590],{"class":262},"train_data",[252,31592,308],{"class":258},[252,31594,31595],{"class":262},"FashionMNIST(",[252,31597,31598],{"class":5356},"root",[252,31600,308],{"class":258},[252,31602,31603],{"class":367},"'.\u002Fdata'",[252,31605,31606],{"class":262},",\n",[252,31608,31609,31612,31614,31617],{"class":254,"line":1781},[252,31610,31611],{"class":5356},"                        train",[252,31613,308],{"class":258},[252,31615,31616],{"class":311},"True",[252,31618,31606],{"class":262},[252,31620,31621],{"class":254,"line":1786},[252,31622,31623],{"class":321},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[252,31625,31626,31629,31631,31634,31637,31639,31642],{"class":254,"line":1792},[252,31627,31628],{"class":5356},"                        transform",[252,31630,308],{"class":258},[252,31632,31633],{"class":262},"transforms.Compose([transforms.Resize(",[252,31635,31636],{"class":5356},"size",[252,31638,308],{"class":258},[252,31640,31641],{"class":311},"224",[252,31643,31644],{"class":262},"),transforms.ToTensor()]),\n",[252,31646,31647,31650,31652,31654],{"class":254,"line":1813},[252,31648,31649],{"class":5356},"                        download",[252,31651,308],{"class":258},[252,31653,31616],{"class":311},[252,31655,269],{"class":262},[252,31657,31658],{"class":254,"line":1818},[252,31659,2539],{"emptyLinePlaceholder":181},[252,31661,31662],{"class":254,"line":1832},[252,31663,31664],{"class":321},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[252,31666,31667,31670,31672,31675,31678,31680],{"class":254,"line":1837},[252,31668,31669],{"class":262},"train_loader",[252,31671,308],{"class":258},[252,31673,31674],{"class":262},"Data.DataLoader(",[252,31676,31677],{"class":5356},"dataset",[252,31679,308],{"class":258},[252,31681,31682],{"class":262},"train_data,\n",[252,31684,31685,31688,31690,31692],{"class":254,"line":1866},[252,31686,31687],{"class":5356},"                             batch_size",[252,31689,308],{"class":258},[252,31691,466],{"class":311},[252,31693,31606],{"class":262},[252,31695,31696],{"class":254,"line":1871},[252,31697,31698],{"class":321},"                             # 数据是否打乱\n",[252,31700,31701,31704,31706,31708],{"class":254,"line":1888},[252,31702,31703],{"class":5356},"                             shuffle",[252,31705,308],{"class":258},[252,31707,31616],{"class":311},[252,31709,31606],{"class":262},[252,31711,31712],{"class":254,"line":1893},[252,31713,31714],{"class":321},"                             # 规定加载数据的进程\n",[252,31716,31717,31720,31722,31724],{"class":254,"line":1898},[252,31718,31719],{"class":5356},"                             num_workers",[252,31721,308],{"class":258},[252,31723,454],{"class":311},[252,31725,269],{"class":262},[252,31727,31728],{"class":254,"line":1903},[252,31729,2539],{"emptyLinePlaceholder":181},[252,31731,31732],{"class":254,"line":1917},[252,31733,31734],{"class":321},"# 获得一个batch的数据\n",[252,31736,31737,31739,31742,31744,31747],{"class":254,"line":1922},[252,31738,3164],{"class":258},[252,31740,31741],{"class":262}," step,(b_x,b_y) ",[252,31743,26183],{"class":258},[252,31745,31746],{"class":311}," enumerate",[252,31748,31749],{"class":262},"(train_loader):\n",[252,31751,31752,31754,31757,31759,31761],{"class":254,"line":2716},[252,31753,3240],{"class":258},[252,31755,31756],{"class":262}," step ",[252,31758,1223],{"class":258},[252,31760,4232],{"class":311},[252,31762,3878],{"class":262},[252,31764,31765],{"class":254,"line":2730},[252,31766,31767],{"class":258},"        break\n",[252,31769,31770],{"class":254,"line":2738},[252,31771,31772],{"class":321},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[252,31774,31775,31778,31780,31783],{"class":254,"line":2743},[252,31776,31777],{"class":262},"batch_x",[252,31779,308],{"class":258},[252,31781,31782],{"class":262},"b_x.squeeze().numpy()  ",[252,31784,31785],{"class":321},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[252,31787,31788,31791,31793,31796],{"class":254,"line":2749},[252,31789,31790],{"class":262},"batch_y",[252,31792,308],{"class":258},[252,31794,31795],{"class":262},"b_y.numpy()   ",[252,31797,31798],{"class":321},"#将张量转换成功numpy数组\n",[252,31800,31801,31804,31806,31809],{"class":254,"line":2755},[252,31802,31803],{"class":262},"class_label",[252,31805,308],{"class":258},[252,31807,31808],{"class":262},"train_data.classes  ",[252,31810,31811],{"class":321},"#训练集标签\n",[252,31813,31814],{"class":254,"line":2760},[252,31815,31816],{"class":321},"# print(class_label)\n",[252,31818,31819],{"class":254,"line":8088},[252,31820,2539],{"emptyLinePlaceholder":181},[252,31822,31823],{"class":254,"line":8112},[252,31824,31825],{"class":321},"# 可视化一个batch的图像\n",[252,31827,31828,31831,31834,31836,31838,31840,31842,31844],{"class":254,"line":8117},[252,31829,31830],{"class":262},"plt.figure(",[252,31832,31833],{"class":5356},"figsize",[252,31835,308],{"class":258},[252,31837,263],{"class":262},[252,31839,761],{"class":311},[252,31841,641],{"class":262},[252,31843,582],{"class":311},[252,31845,30637],{"class":262},[252,31847,31848,31850,31853,31855,31858,31860],{"class":254,"line":8123},[252,31849,3164],{"class":258},[252,31851,31852],{"class":262}," ii ",[252,31854,26183],{"class":258},[252,31856,31857],{"class":262}," np.arange(",[252,31859,7498],{"class":311},[252,31861,31862],{"class":262},"(batch_y)):\n",[252,31864,31865,31868,31870,31872,31874,31877,31879,31881],{"class":254,"line":8150},[252,31866,31867],{"class":262},"    plt.subplot(",[252,31869,556],{"class":311},[252,31871,641],{"class":262},[252,31873,864],{"class":311},[252,31875,31876],{"class":262},",ii ",[252,31878,744],{"class":258},[252,31880,25258],{"class":311},[252,31882,269],{"class":262},[252,31884,31885,31888,31891,31893],{"class":254,"line":8155},[252,31886,31887],{"class":262},"    plt.imshow(batch_x[ii,:,:],",[252,31889,31890],{"class":5356},"cmap",[252,31892,308],{"class":258},[252,31894,31895],{"class":262},"plt.cm.gray)\n",[252,31897,31898,31901,31903,31905,31907],{"class":254,"line":8161},[252,31899,31900],{"class":262},"    plt.title(class_label[batch_y[ii]],",[252,31902,31636],{"class":5356},[252,31904,308],{"class":258},[252,31906,709],{"class":311},[252,31908,269],{"class":262},[252,31910,31911,31914,31917],{"class":254,"line":8173},[252,31912,31913],{"class":262},"    plt.axis(",[252,31915,31916],{"class":367},"\"off\"",[252,31918,269],{"class":262},[252,31920,31921,31924,31927,31929,31932],{"class":254,"line":8185},[252,31922,31923],{"class":262},"    plt.subplots_adjust(",[252,31925,31926],{"class":5356},"wspace",[252,31928,308],{"class":258},[252,31930,31931],{"class":311},"0.05",[252,31933,269],{"class":262},[252,31935,31936],{"class":254,"line":8197},[252,31937,31938],{"class":262},"plt.show()\n",[19,31940,31941],{},"用matplotlib进行展示的过程可以后续再补",[19,31943,31944],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,31946,31947],{},"训练次数就是按照批次过整个训练集数据的次数",[19,31949,31950],{},"模型训练：",[244,31952,31954],{"className":30518,"code":31953,"language":30520,"meta":169,"style":169},"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",[22,31955,31956,31963,31970,31974,31986,31992,32003,32013,32023,32033,32043,32048,32060,32070,32074,32078,32083,32094,32107,32118,32135,32146,32185,32201,32213,32224,32229,32240,32256,32267,32278,32289,32296,32300,32305,32310,32314,32319,32329,32350,32354,32358,32363,32368,32373,32393,32397,32402,32412,32416,32421,32430,32435,32440,32445,32455,32459,32463,32468,32473,32483,32488,32498,32503,32512,32517,32526,32531,32540,32544,32549,32559,32563,32567,32572,32587,32615,32630,32634,32639,32644,32653,32658,32667,32672,32681,32686,32695,32700,32709,32714,32723,32728,32741,32746,32756,32761,32771,32777,32783,32789,32795,32806,32812,32832,32838,32849,32855,32861,32867,32873,32879,32885,32891,32911,32917,32933,32939,32953,32959,32974,32980,32989,32995,33004,33010,33016,33025,33031,33042,33048,33067,33073,33084,33090,33110,33126,33132,33146,33152,33158,33169,33175,33181,33191,33197,33208,33214,33224,33229,33235,33284,33331,33336,33342,33361,33367,33387,33393,33399,33409,33414,33420,33436,33481,33487,33493,33499,33510,33516,33522,33528,33546,33560,33569,33578,33587,33596,33602,33608,33616,33621,33627,33638,33644,33664,33670,33676,33682,33699,33705,33711,33717,33723,33729,33756,33780,33786,33792,33798,33809,33820,33826,33843,33866,33889,33895,33900,33909,33919,33925,33930,33936,33949,33955,33966,33977,33996],{"__ignoreMap":169},[252,31957,31958,31960],{"class":254,"line":255},[252,31959,30532],{"class":258},[252,31961,31962],{"class":262}," copy\n",[252,31964,31965,31967],{"class":254,"line":170},[252,31966,30532],{"class":258},[252,31968,31969],{"class":262}," time\n",[252,31971,31972],{"class":254,"line":1318},[252,31973,2539],{"emptyLinePlaceholder":181},[252,31975,31976,31978,31981,31983],{"class":254,"line":1333},[252,31977,30532],{"class":258},[252,31979,31980],{"class":262}," pandas ",[252,31982,31523],{"class":258},[252,31984,31985],{"class":262}," pd\n",[252,31987,31988,31990],{"class":254,"line":1339},[252,31989,30532],{"class":258},[252,31991,30535],{"class":262},[252,31993,31994,31996,31998,32000],{"class":254,"line":1353},[252,31995,30877],{"class":258},[252,31997,31555],{"class":262},[252,31999,30532],{"class":258},[252,32001,32002],{"class":262}," Dataset\n",[252,32004,32005,32007,32009,32011],{"class":254,"line":1359},[252,32006,30877],{"class":258},[252,32008,31508],{"class":262},[252,32010,30532],{"class":258},[252,32012,31513],{"class":262},[252,32014,32015,32017,32019,32021],{"class":254,"line":1450},[252,32016,30877],{"class":258},[252,32018,31538],{"class":262},[252,32020,30532],{"class":258},[252,32022,31543],{"class":262},[252,32024,32025,32027,32029,32031],{"class":254,"line":1456},[252,32026,30532],{"class":258},[252,32028,31555],{"class":262},[252,32030,31523],{"class":258},[252,32032,31560],{"class":262},[252,32034,32035,32037,32039,32041],{"class":254,"line":1468},[252,32036,30532],{"class":258},[252,32038,31572],{"class":262},[252,32040,31523],{"class":258},[252,32042,31577],{"class":262},[252,32044,32045],{"class":254,"line":1751},[252,32046,32047],{"class":321},"# 导入模型\n",[252,32049,32050,32052,32055,32057],{"class":254,"line":1756},[252,32051,30877],{"class":258},[252,32053,32054],{"class":262}," model ",[252,32056,30532],{"class":258},[252,32058,32059],{"class":262}," LeNet\n",[252,32061,32062,32064,32066,32068],{"class":254,"line":1762},[252,32063,30877],{"class":258},[252,32065,30880],{"class":262},[252,32067,30532],{"class":258},[252,32069,30885],{"class":262},[252,32071,32072],{"class":254,"line":1767},[252,32073,2539],{"emptyLinePlaceholder":181},[252,32075,32076],{"class":254,"line":1781},[252,32077,2539],{"emptyLinePlaceholder":181},[252,32079,32080],{"class":254,"line":1786},[252,32081,32082],{"class":321},"# 处理训练集与验证集函数--->划分数据集\n",[252,32084,32085,32088,32091],{"class":254,"line":1792},[252,32086,32087],{"class":258},"def",[252,32089,32090],{"class":2102}," train_val_data_process",[252,32092,32093],{"class":262},"():\n",[252,32095,32096,32099,32101,32103,32105],{"class":254,"line":1813},[252,32097,32098],{"class":262},"    train_data",[252,32100,308],{"class":258},[252,32102,31595],{"class":262},[252,32104,31603],{"class":367},[252,32106,31606],{"class":262},[252,32108,32109,32112,32114,32116],{"class":254,"line":1818},[252,32110,32111],{"class":5356},"                            train",[252,32113,308],{"class":258},[252,32115,31616],{"class":311},[252,32117,31606],{"class":262},[252,32119,32120,32123,32125,32127,32129,32131,32133],{"class":254,"line":1832},[252,32121,32122],{"class":5356},"                            transform",[252,32124,308],{"class":258},[252,32126,31633],{"class":262},[252,32128,31636],{"class":5356},[252,32130,308],{"class":258},[252,32132,1164],{"class":311},[252,32134,31644],{"class":262},[252,32136,32137,32140,32142,32144],{"class":254,"line":1837},[252,32138,32139],{"class":5356},"                            download",[252,32141,308],{"class":258},[252,32143,31616],{"class":311},[252,32145,269],{"class":262},[252,32147,32148,32151,32153,32156,32159,32161,32164,32166,32168,32171,32173,32175,32178,32180,32182],{"class":254,"line":1866},[252,32149,32150],{"class":262},"    train_data,val_data",[252,32152,308],{"class":258},[252,32154,32155],{"class":262},"Data.random_split(train_data,[",[252,32157,32158],{"class":311},"round",[252,32160,263],{"class":262},[252,32162,32163],{"class":311},"0.8",[252,32165,718],{"class":258},[252,32167,7498],{"class":311},[252,32169,32170],{"class":262},"(train_data)),",[252,32172,32158],{"class":311},[252,32174,263],{"class":262},[252,32176,32177],{"class":311},"0.2",[252,32179,718],{"class":258},[252,32181,7498],{"class":311},[252,32183,32184],{"class":262},"(train_data))])\n",[252,32186,32187,32190,32192,32195,32197,32199],{"class":254,"line":1871},[252,32188,32189],{"class":262},"    train_dataloader ",[252,32191,308],{"class":258},[252,32193,32194],{"class":262}," Data.DataLoader(",[252,32196,31677],{"class":5356},[252,32198,308],{"class":258},[252,32200,31682],{"class":262},[252,32202,32203,32206,32208,32211],{"class":254,"line":1888},[252,32204,32205],{"class":5356},"                                       batch_size",[252,32207,308],{"class":258},[252,32209,32210],{"class":311},"128",[252,32212,31606],{"class":262},[252,32214,32215,32218,32220,32222],{"class":254,"line":1893},[252,32216,32217],{"class":5356},"                                       shuffle",[252,32219,308],{"class":258},[252,32221,31616],{"class":311},[252,32223,31606],{"class":262},[252,32225,32226],{"class":254,"line":1898},[252,32227,32228],{"class":321},"                                       # 规定8个进程\n",[252,32230,32231,32234,32236,32238],{"class":254,"line":1903},[252,32232,32233],{"class":5356},"                                       num_workers",[252,32235,308],{"class":258},[252,32237,658],{"class":311},[252,32239,269],{"class":262},[252,32241,32242,32245,32247,32249,32251,32253],{"class":254,"line":1917},[252,32243,32244],{"class":262},"    val_dataloader",[252,32246,308],{"class":258},[252,32248,31674],{"class":262},[252,32250,31677],{"class":5356},[252,32252,308],{"class":258},[252,32254,32255],{"class":262},"val_data,\n",[252,32257,32258,32261,32263,32265],{"class":254,"line":1922},[252,32259,32260],{"class":5356},"                                   batch_size",[252,32262,308],{"class":258},[252,32264,32210],{"class":311},[252,32266,31606],{"class":262},[252,32268,32269,32272,32274,32276],{"class":254,"line":2716},[252,32270,32271],{"class":5356},"                                   shuffle",[252,32273,308],{"class":258},[252,32275,31616],{"class":311},[252,32277,31606],{"class":262},[252,32279,32280,32283,32285,32287],{"class":254,"line":2730},[252,32281,32282],{"class":5356},"                                   num_workers",[252,32284,308],{"class":258},[252,32286,658],{"class":311},[252,32288,269],{"class":262},[252,32290,32291,32293],{"class":254,"line":2738},[252,32292,4229],{"class":258},[252,32294,32295],{"class":262}," train_dataloader,val_dataloader\n",[252,32297,32298],{"class":254,"line":2743},[252,32299,2539],{"emptyLinePlaceholder":181},[252,32301,32302],{"class":254,"line":2749},[252,32303,32304],{"class":321},"# 验证是否出错\n",[252,32306,32307],{"class":254,"line":2755},[252,32308,32309],{"class":321},"# train_val_data_process()\n",[252,32311,32312],{"class":254,"line":2760},[252,32313,2539],{"emptyLinePlaceholder":181},[252,32315,32316],{"class":254,"line":8088},[252,32317,32318],{"class":321},"# 定义模型训练函数\n",[252,32320,32321,32323,32326],{"class":254,"line":8112},[252,32322,32087],{"class":258},[252,32324,32325],{"class":2102}," train_model_process",[252,32327,32328],{"class":262},"(model,train_dataloader,val_dataloader,num_epochs):\n",[252,32330,32331,32333,32335,32337,32339,32341,32343,32345,32348],{"class":254,"line":8117},[252,32332,31377],{"class":262},[252,32334,308],{"class":258},[252,32336,30591],{"class":262},[252,32338,31384],{"class":367},[252,32340,1843],{"class":258},[252,32342,31389],{"class":262},[252,32344,1840],{"class":258},[252,32346,32347],{"class":367}," 'cpu'",[252,32349,269],{"class":262},[252,32351,32352],{"class":254,"line":8123},[252,32353,2539],{"emptyLinePlaceholder":181},[252,32355,32356],{"class":254,"line":8150},[252,32357,2539],{"emptyLinePlaceholder":181},[252,32359,32360],{"class":254,"line":8155},[252,32361,32362],{"class":321},"    # 定义优化器\n",[252,32364,32365],{"class":254,"line":8161},[252,32366,32367],{"class":321},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[252,32369,32370],{"class":254,"line":8173},[252,32371,32372],{"class":321},"    # lr为学习率\n",[252,32374,32375,32378,32380,32383,32386,32388,32391],{"class":254,"line":8185},[252,32376,32377],{"class":262},"    optimizer",[252,32379,308],{"class":258},[252,32381,32382],{"class":262},"torch.optim.Adam(model.parameters(),",[252,32384,32385],{"class":5356},"lr",[252,32387,308],{"class":258},[252,32389,32390],{"class":311},"0.001",[252,32392,269],{"class":262},[252,32394,32395],{"class":254,"line":8197},[252,32396,2539],{"emptyLinePlaceholder":181},[252,32398,32399],{"class":254,"line":9856},[252,32400,32401],{"class":321},"    # 定义损失函数使用交叉熵损失函数\n",[252,32403,32404,32407,32409],{"class":254,"line":9881},[252,32405,32406],{"class":262},"    criterion",[252,32408,308],{"class":258},[252,32410,32411],{"class":262},"nn.CrossEntropyLoss()\n",[252,32413,32414],{"class":254,"line":9904},[252,32415,2539],{"emptyLinePlaceholder":181},[252,32417,32418],{"class":254,"line":9928},[252,32419,32420],{"class":321},"    # 将模型放到GPU中进行训练\n",[252,32422,32423,32425,32427],{"class":254,"line":9933},[252,32424,31429],{"class":262},[252,32426,308],{"class":258},[252,32428,32429],{"class":262},"model.to(device)\n",[252,32431,32432],{"class":254,"line":9938},[252,32433,32434],{"class":321},"    # 复制当前模型的参数\n",[252,32436,32437],{"class":254,"line":9943},[252,32438,32439],{"class":321},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[252,32441,32442],{"class":254,"line":9952},[252,32443,32444],{"class":321},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[252,32446,32447,32450,32452],{"class":254,"line":9957},[252,32448,32449],{"class":262},"    best_model_wts",[252,32451,308],{"class":258},[252,32453,32454],{"class":262},"copy.deepcopy(model.state_dict())\n",[252,32456,32457],{"class":254,"line":9963},[252,32458,2539],{"emptyLinePlaceholder":181},[252,32460,32461],{"class":254,"line":9984},[252,32462,2539],{"emptyLinePlaceholder":181},[252,32464,32465],{"class":254,"line":9990},[252,32466,32467],{"class":321},"    # 初始化参数\n",[252,32469,32470],{"class":254,"line":10004},[252,32471,32472],{"class":321},"    # 最高准确度\n",[252,32474,32475,32478,32480],{"class":254,"line":10010},[252,32476,32477],{"class":262},"    best_acc",[252,32479,308],{"class":258},[252,32481,32482],{"class":311},"0.0\n",[252,32484,32485],{"class":254,"line":10037},[252,32486,32487],{"class":321},"    # 训练集损失列表\n",[252,32489,32490,32493,32495],{"class":254,"line":10046},[252,32491,32492],{"class":262},"    train_loss_all",[252,32494,308],{"class":258},[252,32496,32497],{"class":262},"[]\n",[252,32499,32500],{"class":254,"line":10052},[252,32501,32502],{"class":321},"    # 验证集函数列表\n",[252,32504,32505,32508,32510],{"class":254,"line":10060},[252,32506,32507],{"class":262},"    val_loss_all",[252,32509,308],{"class":258},[252,32511,32497],{"class":262},[252,32513,32514],{"class":254,"line":10065},[252,32515,32516],{"class":321},"    # 训练集准确度列表\n",[252,32518,32519,32522,32524],{"class":254,"line":16744},[252,32520,32521],{"class":262},"    train_acc_all",[252,32523,308],{"class":258},[252,32525,32497],{"class":262},[252,32527,32528],{"class":254,"line":16750},[252,32529,32530],{"class":321},"    # 验证集准确度列表\n",[252,32532,32533,32536,32538],{"class":254,"line":16773},[252,32534,32535],{"class":262},"    val_acc_all",[252,32537,308],{"class":258},[252,32539,32497],{"class":262},[252,32541,32542],{"class":254,"line":16779},[252,32543,2539],{"emptyLinePlaceholder":181},[252,32545,32546],{"class":254,"line":16802},[252,32547,32548],{"class":321},"    # 保存当前时间--->方便看每轮训练的时间\n",[252,32550,32551,32554,32556],{"class":254,"line":16816},[252,32552,32553],{"class":262},"    since",[252,32555,308],{"class":258},[252,32557,32558],{"class":262},"time.time()\n",[252,32560,32561],{"class":254,"line":16836},[252,32562,2539],{"emptyLinePlaceholder":181},[252,32564,32565],{"class":254,"line":16842},[252,32566,2539],{"emptyLinePlaceholder":181},[252,32568,32569],{"class":254,"line":16853},[252,32570,32571],{"class":321},"    # 准备工作完成--->开始训练模型\n",[252,32573,32574,32576,32579,32581,32584],{"class":254,"line":16876},[252,32575,3340],{"class":258},[252,32577,32578],{"class":262}," epoch ",[252,32580,26183],{"class":258},[252,32582,32583],{"class":311}," range",[252,32585,32586],{"class":262},"(num_epochs):\n",[252,32588,32589,32592,32594,32597,32600,32602,32604,32606,32609,32611,32613],{"class":254,"line":16898},[252,32590,32591],{"class":311},"        print",[252,32593,263],{"class":262},[252,32595,32596],{"class":367},"\"Epoch ",[252,32598,32599],{"class":311},"{}",[252,32601,847],{"class":367},[252,32603,32599],{"class":311},[252,32605,514],{"class":367},[252,32607,32608],{"class":262},".format(epoch,num_epochs",[252,32610,795],{"class":258},[252,32612,480],{"class":311},[252,32614,30637],{"class":262},[252,32616,32617,32619,32621,32624,32626,32628],{"class":254,"line":16903},[252,32618,32591],{"class":311},[252,32620,263],{"class":262},[252,32622,32623],{"class":367},"\"-\"",[252,32625,718],{"class":258},[252,32627,709],{"class":311},[252,32629,269],{"class":262},[252,32631,32632],{"class":254,"line":16909},[252,32633,2539],{"emptyLinePlaceholder":181},[252,32635,32636],{"class":254,"line":16923},[252,32637,32638],{"class":321},"        # 初始化参数\n",[252,32640,32641],{"class":254,"line":16936},[252,32642,32643],{"class":321},"        # 训练集损失函数\n",[252,32645,32646,32649,32651],{"class":254,"line":16941},[252,32647,32648],{"class":262},"        train_loss",[252,32650,308],{"class":258},[252,32652,32482],{"class":311},[252,32654,32655],{"class":254,"line":16955},[252,32656,32657],{"class":321},"        # 训练集准确度\n",[252,32659,32660,32663,32665],{"class":254,"line":16960},[252,32661,32662],{"class":262},"        train_corrects",[252,32664,308],{"class":258},[252,32666,3224],{"class":311},[252,32668,32669],{"class":254,"line":16966},[252,32670,32671],{"class":321},"        # 验证集损失函数\n",[252,32673,32674,32677,32679],{"class":254,"line":16971},[252,32675,32676],{"class":262},"        val_loss",[252,32678,308],{"class":258},[252,32680,32482],{"class":311},[252,32682,32683],{"class":254,"line":16985},[252,32684,32685],{"class":321},"        # 验证集准确度\n",[252,32687,32688,32691,32693],{"class":254,"line":16990},[252,32689,32690],{"class":262},"        val_corrects",[252,32692,308],{"class":258},[252,32694,3224],{"class":311},[252,32696,32697],{"class":254,"line":16995},[252,32698,32699],{"class":321},"        # 训练集样本数量\n",[252,32701,32702,32705,32707],{"class":254,"line":17009},[252,32703,32704],{"class":262},"        train_num",[252,32706,308],{"class":258},[252,32708,3224],{"class":311},[252,32710,32711],{"class":254,"line":17021},[252,32712,32713],{"class":321},"        # 验证集样本数量\n",[252,32715,32716,32719,32721],{"class":254,"line":17026},[252,32717,32718],{"class":262},"        val_num",[252,32720,308],{"class":258},[252,32722,3224],{"class":311},[252,32724,32725],{"class":254,"line":17039},[252,32726,32727],{"class":321},"        # 将数据放到设备,并开始训练\n",[252,32729,32730,32732,32734,32736,32738],{"class":254,"line":17044},[252,32731,3542],{"class":258},[252,32733,31741],{"class":262},[252,32735,26183],{"class":258},[252,32737,31746],{"class":311},[252,32739,32740],{"class":262},"(train_dataloader):\n",[252,32742,32743],{"class":254,"line":17049},[252,32744,32745],{"class":321},"            # 将特征放入到训练设备\n",[252,32747,32748,32751,32753],{"class":254,"line":17054},[252,32749,32750],{"class":262},"            b_x",[252,32752,308],{"class":258},[252,32754,32755],{"class":262},"b_x.to(device)\n",[252,32757,32758],{"class":254,"line":17067},[252,32759,32760],{"class":321},"            # 将标签放入到训练设备当中\n",[252,32762,32763,32766,32768],{"class":254,"line":17072},[252,32764,32765],{"class":262},"            b_y",[252,32767,308],{"class":258},[252,32769,32770],{"class":262},"b_y.to(device)\n",[252,32772,32774],{"class":254,"line":32773},98,[252,32775,32776],{"class":321},"            # 设置模型为训练模式\n",[252,32778,32780],{"class":254,"line":32779},99,[252,32781,32782],{"class":262},"            model.train()\n",[252,32784,32786],{"class":254,"line":32785},100,[252,32787,32788],{"class":321},"            # 将数据放到模型当中,开始前向传播\n",[252,32790,32792],{"class":254,"line":32791},101,[252,32793,32794],{"class":321},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[252,32796,32798,32801,32803],{"class":254,"line":32797},102,[252,32799,32800],{"class":262},"            output",[252,32802,308],{"class":258},[252,32804,32805],{"class":262},"model(b_x)\n",[252,32807,32809],{"class":254,"line":32808},103,[252,32810,32811],{"class":321},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[252,32813,32815,32818,32820,32823,32826,32828,32830],{"class":254,"line":32814},104,[252,32816,32817],{"class":262},"            pre_lab",[252,32819,308],{"class":258},[252,32821,32822],{"class":262},"torch.argmax(output,",[252,32824,32825],{"class":5356},"dim",[252,32827,308],{"class":258},[252,32829,480],{"class":311},[252,32831,269],{"class":262},[252,32833,32835],{"class":254,"line":32834},105,[252,32836,32837],{"class":321},"            # 计算每一个batch的损失函数\n",[252,32839,32841,32844,32846],{"class":254,"line":32840},106,[252,32842,32843],{"class":262},"            loss",[252,32845,308],{"class":258},[252,32847,32848],{"class":262},"criterion(output,b_y)\n",[252,32850,32852],{"class":254,"line":32851},107,[252,32853,32854],{"class":321},"            # 将梯度初始化为0\n",[252,32856,32858],{"class":254,"line":32857},108,[252,32859,32860],{"class":262},"            optimizer.zero_grad()\n",[252,32862,32864],{"class":254,"line":32863},109,[252,32865,32866],{"class":321},"            # 梯度置为0后再进行反向传播\n",[252,32868,32870],{"class":254,"line":32869},110,[252,32871,32872],{"class":262},"            loss.backward()\n",[252,32874,32876],{"class":254,"line":32875},111,[252,32877,32878],{"class":321},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[252,32880,32882],{"class":254,"line":32881},112,[252,32883,32884],{"class":262},"            optimizer.step()\n",[252,32886,32888],{"class":254,"line":32887},113,[252,32889,32890],{"class":321},"            # loss.item()指的是batch的平均损失\n",[252,32892,32894,32897,32899,32902,32904,32907,32909],{"class":254,"line":32893},114,[252,32895,32896],{"class":262},"            train_loss",[252,32898,9617],{"class":258},[252,32900,32901],{"class":262},"loss.item()",[252,32903,718],{"class":258},[252,32905,32906],{"class":262},"b_x.size(",[252,32908,454],{"class":311},[252,32910,269],{"class":262},[252,32912,32914],{"class":254,"line":32913},115,[252,32915,32916],{"class":321},"            # 计算每个批次中正确预测的数量\n",[252,32918,32920,32923,32925,32928,32930],{"class":254,"line":32919},116,[252,32921,32922],{"class":262},"            train_corrects",[252,32924,9617],{"class":258},[252,32926,32927],{"class":262},"torch.sum(pre_lab",[252,32929,3088],{"class":258},[252,32931,32932],{"class":262},"b_y.data)\n",[252,32934,32936],{"class":254,"line":32935},117,[252,32937,32938],{"class":321},"            # 计算目前为止一共处理了多少样本\n",[252,32940,32942,32945,32947,32949,32951],{"class":254,"line":32941},118,[252,32943,32944],{"class":262},"            train_num",[252,32946,9617],{"class":258},[252,32948,32906],{"class":262},[252,32950,454],{"class":311},[252,32952,269],{"class":262},[252,32954,32956],{"class":254,"line":32955},119,[252,32957,32958],{"class":321},"        # 验证数据\n",[252,32960,32962,32964,32967,32969,32971],{"class":254,"line":32961},120,[252,32963,3542],{"class":258},[252,32965,32966],{"class":262}," step ,(b_x,b_y) ",[252,32968,26183],{"class":258},[252,32970,31746],{"class":311},[252,32972,32973],{"class":262},"(val_dataloader):\n",[252,32975,32977],{"class":254,"line":32976},121,[252,32978,32979],{"class":321},"            # 将特征放到验证设备当中\n",[252,32981,32983,32985,32987],{"class":254,"line":32982},122,[252,32984,32750],{"class":262},[252,32986,308],{"class":258},[252,32988,32755],{"class":262},[252,32990,32992],{"class":254,"line":32991},123,[252,32993,32994],{"class":321},"            # 将标签放到放到训练设备当中\n",[252,32996,32998,33000,33002],{"class":254,"line":32997},124,[252,32999,32765],{"class":262},[252,33001,308],{"class":258},[252,33003,32770],{"class":262},[252,33005,33007],{"class":254,"line":33006},125,[252,33008,33009],{"class":321},"            # 开启验证模式，设置模型为评估模式\n",[252,33011,33013],{"class":254,"line":33012},126,[252,33014,33015],{"class":262},"            model.eval()\n",[252,33017,33019,33022],{"class":254,"line":33018},127,[252,33020,33021],{"class":258},"            with",[252,33023,33024],{"class":262}," torch.no_grad():\n",[252,33026,33028],{"class":254,"line":33027},128,[252,33029,33030],{"class":321},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[252,33032,33034,33037,33039],{"class":254,"line":33033},129,[252,33035,33036],{"class":262},"                output ",[252,33038,308],{"class":258},[252,33040,33041],{"class":262}," model(b_x)\n",[252,33043,33045],{"class":254,"line":33044},130,[252,33046,33047],{"class":321},"                # 查找每一行中最大值对应的下标\n",[252,33049,33051,33054,33056,33059,33061,33063,33065],{"class":254,"line":33050},131,[252,33052,33053],{"class":262},"                pre_lab ",[252,33055,308],{"class":258},[252,33057,33058],{"class":262}," torch.argmax(output, ",[252,33060,32825],{"class":5356},[252,33062,308],{"class":258},[252,33064,480],{"class":311},[252,33066,269],{"class":262},[252,33068,33070],{"class":254,"line":33069},132,[252,33071,33072],{"class":321},"                # 计算验证集上的当前 batch 损失\n",[252,33074,33076,33079,33081],{"class":254,"line":33075},133,[252,33077,33078],{"class":262},"                val_batch_loss ",[252,33080,308],{"class":258},[252,33082,33083],{"class":262}," criterion(output, b_y)\n",[252,33085,33087],{"class":254,"line":33086},134,[252,33088,33089],{"class":321},"                # 对损失函数进行累加（按样本数加权）\n",[252,33091,33093,33096,33098,33101,33103,33106,33108],{"class":254,"line":33092},135,[252,33094,33095],{"class":262},"                val_loss ",[252,33097,9617],{"class":258},[252,33099,33100],{"class":262}," val_batch_loss.item() ",[252,33102,718],{"class":258},[252,33104,33105],{"class":262}," b_x.size(",[252,33107,454],{"class":311},[252,33109,269],{"class":262},[252,33111,33113,33116,33118,33121,33123],{"class":254,"line":33112},136,[252,33114,33115],{"class":262},"                val_corrects ",[252,33117,9617],{"class":258},[252,33119,33120],{"class":262}," torch.sum(pre_lab ",[252,33122,3088],{"class":258},[252,33124,33125],{"class":262}," b_y.data)\n",[252,33127,33129],{"class":254,"line":33128},137,[252,33130,33131],{"class":321},"                # 当前用于验证的样本数量\n",[252,33133,33135,33138,33140,33142,33144],{"class":254,"line":33134},138,[252,33136,33137],{"class":262},"            val_num ",[252,33139,9617],{"class":258},[252,33141,33105],{"class":262},[252,33143,454],{"class":311},[252,33145,269],{"class":262},[252,33147,33149],{"class":254,"line":33148},139,[252,33150,33151],{"class":321},"        # 计算并保存每一次迭代的loss值和准确率\n",[252,33153,33155],{"class":254,"line":33154},140,[252,33156,33157],{"class":321},"        # 计算并保存训练集的loss值\n",[252,33159,33161,33164,33166],{"class":254,"line":33160},141,[252,33162,33163],{"class":262},"        train_loss_all.append(train_loss",[252,33165,847],{"class":258},[252,33167,33168],{"class":262},"train_num)\n",[252,33170,33172],{"class":254,"line":33171},142,[252,33173,33174],{"class":321},"        # 取双精度\n",[252,33176,33178],{"class":254,"line":33177},143,[252,33179,33180],{"class":321},"        # 计算并保存训练集的准确率\n",[252,33182,33184,33187,33189],{"class":254,"line":33183},144,[252,33185,33186],{"class":262},"        train_acc_all.append(train_corrects.double().item()",[252,33188,847],{"class":258},[252,33190,33168],{"class":262},[252,33192,33194],{"class":254,"line":33193},145,[252,33195,33196],{"class":321},"        # 计算并保存验证集的loss值\n",[252,33198,33200,33203,33205],{"class":254,"line":33199},146,[252,33201,33202],{"class":262},"        val_loss_all.append(val_loss",[252,33204,847],{"class":258},[252,33206,33207],{"class":262},"val_num)\n",[252,33209,33211],{"class":254,"line":33210},147,[252,33212,33213],{"class":321},"        # 计算并保存验证集的准确率\n",[252,33215,33217,33220,33222],{"class":254,"line":33216},148,[252,33218,33219],{"class":262},"        val_acc_all.append(val_corrects.double().item()",[252,33221,847],{"class":258},[252,33223,33207],{"class":262},[252,33225,33227],{"class":254,"line":33226},149,[252,33228,2539],{"emptyLinePlaceholder":181},[252,33230,33232],{"class":254,"line":33231},150,[252,33233,33234],{"class":321},"        # 打印训练一轮的loss值和准确率\n",[252,33236,33238,33240,33242,33244,33246,33249,33251,33254,33256,33259,33261,33263,33265,33267,33270,33272,33274,33277,33279,33281],{"class":254,"line":33237},151,[252,33239,32591],{"class":311},[252,33241,263],{"class":262},[252,33243,3731],{"class":367},[252,33245,32599],{"class":311},[252,33247,33248],{"class":367},"train loss:",[252,33250,1159],{"class":311},[252,33252,33253],{"class":258},":.4f",[252,33255,1209],{"class":311},[252,33257,33258],{"class":367}," train acc:",[252,33260,1159],{"class":311},[252,33262,33253],{"class":258},[252,33264,1209],{"class":311},[252,33266,3731],{"class":367},[252,33268,33269],{"class":262},".format(epoch,train_loss_all[",[252,33271,795],{"class":258},[252,33273,480],{"class":311},[252,33275,33276],{"class":262},"],train_acc_all[",[252,33278,795],{"class":258},[252,33280,480],{"class":311},[252,33282,33283],{"class":262},"]))\n",[252,33285,33287,33289,33291,33293,33295,33298,33300,33302,33304,33307,33309,33311,33313,33315,33318,33320,33322,33325,33327,33329],{"class":254,"line":33286},152,[252,33288,32591],{"class":311},[252,33290,263],{"class":262},[252,33292,3731],{"class":367},[252,33294,32599],{"class":311},[252,33296,33297],{"class":367},"val loss:",[252,33299,1159],{"class":311},[252,33301,33253],{"class":258},[252,33303,1209],{"class":311},[252,33305,33306],{"class":367}," val acc:",[252,33308,1159],{"class":311},[252,33310,33253],{"class":258},[252,33312,1209],{"class":311},[252,33314,3731],{"class":367},[252,33316,33317],{"class":262},".format(epoch,val_loss_all[",[252,33319,795],{"class":258},[252,33321,480],{"class":311},[252,33323,33324],{"class":262},"],val_acc_all[",[252,33326,795],{"class":258},[252,33328,480],{"class":311},[252,33330,33283],{"class":262},[252,33332,33334],{"class":254,"line":33333},153,[252,33335,2539],{"emptyLinePlaceholder":181},[252,33337,33339],{"class":254,"line":33338},154,[252,33340,33341],{"class":321},"        # 判断准确度--->保存最优模型\n",[252,33343,33345,33347,33350,33352,33354,33356,33358],{"class":254,"line":33344},155,[252,33346,2636],{"class":258},[252,33348,33349],{"class":262}," val_acc_all[",[252,33351,795],{"class":258},[252,33353,480],{"class":311},[252,33355,1203],{"class":262},[252,33357,1223],{"class":258},[252,33359,33360],{"class":262},"best_acc:\n",[252,33362,33364],{"class":254,"line":33363},156,[252,33365,33366],{"class":321},"            # 保存当前模型准确度\n",[252,33368,33370,33373,33375,33377,33380,33382,33384],{"class":254,"line":33369},157,[252,33371,33372],{"class":262},"            best_acc:",[252,33374,302],{"class":311},[252,33376,308],{"class":258},[252,33378,33379],{"class":262},"val_acc_all[",[252,33381,795],{"class":258},[252,33383,480],{"class":311},[252,33385,33386],{"class":262},"]\n",[252,33388,33390],{"class":254,"line":33389},158,[252,33391,33392],{"class":321},"            # 保存当前的准确度\n",[252,33394,33396],{"class":254,"line":33395},159,[252,33397,33398],{"class":321},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[252,33400,33402,33405,33407],{"class":254,"line":33401},160,[252,33403,33404],{"class":262},"            best_model_wts",[252,33406,308],{"class":258},[252,33408,32454],{"class":262},[252,33410,33412],{"class":254,"line":33411},161,[252,33413,2539],{"emptyLinePlaceholder":181},[252,33415,33417],{"class":254,"line":33416},162,[252,33418,33419],{"class":321},"        # 计算耗时\n",[252,33421,33423,33426,33428,33431,33433],{"class":254,"line":33422},163,[252,33424,33425],{"class":262},"        time_use",[252,33427,308],{"class":258},[252,33429,33430],{"class":262},"time.time()",[252,33432,795],{"class":258},[252,33434,33435],{"class":262},"since\n",[252,33437,33439,33441,33443,33446,33448,33451,33453,33455,33457,33459,33461,33464,33467,33470,33472,33475,33477,33479],{"class":254,"line":33438},164,[252,33440,32591],{"class":311},[252,33442,263],{"class":262},[252,33444,33445],{"class":367},"'训练和验证耗费的时间",[252,33447,1159],{"class":311},[252,33449,33450],{"class":258},":.0f",[252,33452,1209],{"class":311},[252,33454,807],{"class":367},[252,33456,1159],{"class":311},[252,33458,33450],{"class":258},[252,33460,1209],{"class":311},[252,33462,33463],{"class":367},"s'",[252,33465,33466],{"class":262},".format(time_use",[252,33468,33469],{"class":258},"\u002F\u002F",[252,33471,1170],{"class":311},[252,33473,33474],{"class":262},",time_use",[252,33476,591],{"class":258},[252,33478,1170],{"class":311},[252,33480,30637],{"class":262},[252,33482,33484],{"class":254,"line":33483},165,[252,33485,33486],{"class":321},"    # 选择最优参数\n",[252,33488,33490],{"class":254,"line":33489},166,[252,33491,33492],{"class":321},"    # 加载最高准确率下的模型参数\n",[252,33494,33496],{"class":254,"line":33495},167,[252,33497,33498],{"class":321},"    # model.load_state_dict(best_model_wts)\n",[252,33500,33502,33505,33508],{"class":254,"line":33501},168,[252,33503,33504],{"class":262},"    torch.save(model.state_dict(best_model_wts), ",[252,33506,33507],{"class":367},"'.\u002Fbest_model.pth'",[252,33509,269],{"class":262},[252,33511,33513],{"class":254,"line":33512},169,[252,33514,33515],{"class":321},"    # 或者写成\n",[252,33517,33519],{"class":254,"line":33518},170,[252,33520,33521],{"class":321},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[252,33523,33525],{"class":254,"line":33524},171,[252,33526,33527],{"class":321},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[252,33529,33531,33534,33536,33539,33542,33544],{"class":254,"line":33530},172,[252,33532,33533],{"class":262},"    train_process",[252,33535,308],{"class":258},[252,33537,33538],{"class":262},"pd.DataFrame(",[252,33540,33541],{"class":5356},"data",[252,33543,308],{"class":258},[252,33545,1685],{"class":262},[252,33547,33549,33552,33554,33557],{"class":254,"line":33548},173,[252,33550,33551],{"class":367},"        \"epoch\"",[252,33553,1122],{"class":262},[252,33555,33556],{"class":311},"range",[252,33558,33559],{"class":262},"(num_epochs),\n",[252,33561,33563,33566],{"class":254,"line":33562},174,[252,33564,33565],{"class":367},"        \"train_loss_all\"",[252,33567,33568],{"class":262},":train_loss_all,\n",[252,33570,33572,33575],{"class":254,"line":33571},175,[252,33573,33574],{"class":367},"        \"val_loss_all\"",[252,33576,33577],{"class":262},":val_loss_all,\n",[252,33579,33581,33584],{"class":254,"line":33580},176,[252,33582,33583],{"class":367},"        \"train_acc_all\"",[252,33585,33586],{"class":262},":train_acc_all,\n",[252,33588,33590,33593],{"class":254,"line":33589},177,[252,33591,33592],{"class":367},"        \"val_acc_all\"",[252,33594,33595],{"class":262},":val_acc_all\n",[252,33597,33599],{"class":254,"line":33598},178,[252,33600,33601],{"class":262},"    })\n",[252,33603,33605],{"class":254,"line":33604},179,[252,33606,33607],{"class":321},"    # 返回训练保存的过程\n",[252,33609,33611,33613],{"class":254,"line":33610},180,[252,33612,4229],{"class":258},[252,33614,33615],{"class":262}," train_process\n",[252,33617,33619],{"class":254,"line":33618},181,[252,33620,2539],{"emptyLinePlaceholder":181},[252,33622,33624],{"class":254,"line":33623},182,[252,33625,33626],{"class":321},"# 将loss值和精度按照图片的形式展示出来\n",[252,33628,33630,33632,33635],{"class":254,"line":33629},183,[252,33631,32087],{"class":258},[252,33633,33634],{"class":2102}," matplot_acc_loss",[252,33636,33637],{"class":262},"(train_process):\n",[252,33639,33641],{"class":254,"line":33640},184,[252,33642,33643],{"class":321},"    # 设置图的大小\n",[252,33645,33647,33650,33652,33654,33656,33658,33660,33662],{"class":254,"line":33646},185,[252,33648,33649],{"class":262},"    plt.figure(",[252,33651,31833],{"class":5356},[252,33653,308],{"class":258},[252,33655,263],{"class":262},[252,33657,761],{"class":311},[252,33659,641],{"class":262},[252,33661,556],{"class":311},[252,33663,30637],{"class":262},[252,33665,33667],{"class":254,"line":33666},186,[252,33668,33669],{"class":321},"    # 设置图中有几张图\n",[252,33671,33673],{"class":254,"line":33672},187,[252,33674,33675],{"class":321},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[252,33677,33679],{"class":254,"line":33678},188,[252,33680,33681],{"class":321},"    # ①loss图\n",[252,33683,33685,33687,33689,33691,33693,33695,33697],{"class":254,"line":33684},189,[252,33686,31867],{"class":262},[252,33688,480],{"class":311},[252,33690,641],{"class":262},[252,33692,340],{"class":311},[252,33694,641],{"class":262},[252,33696,480],{"class":311},[252,33698,269],{"class":262},[252,33700,33702],{"class":254,"line":33701},190,[252,33703,33704],{"class":321},"    # 补充:\n",[252,33706,33708],{"class":254,"line":33707},191,[252,33709,33710],{"class":321},"    # plt.subplot(nrows, ncols, index)\n",[252,33712,33714],{"class":254,"line":33713},192,[252,33715,33716],{"class":321},"    # nrows：行数\n",[252,33718,33720],{"class":254,"line":33719},193,[252,33721,33722],{"class":321},"    # ncols：列数\n",[252,33724,33726],{"class":254,"line":33725},194,[252,33727,33728],{"class":321},"    # index：目前选中第几个子图（从1开始）\n",[252,33730,33732,33735,33738,33741,33744,33746,33749,33751,33754],{"class":254,"line":33731},195,[252,33733,33734],{"class":262},"    plt.plot(train_process[",[252,33736,33737],{"class":367},"\"epoch\"",[252,33739,33740],{"class":262},"],train_process.train_loss_all,",[252,33742,33743],{"class":367},"'ro-'",[252,33745,641],{"class":262},[252,33747,33748],{"class":5356},"label",[252,33750,308],{"class":258},[252,33752,33753],{"class":367},"'train loss'",[252,33755,269],{"class":262},[252,33757,33759,33761,33763,33766,33769,33771,33773,33775,33778],{"class":254,"line":33758},196,[252,33760,33734],{"class":262},[252,33762,33737],{"class":367},[252,33764,33765],{"class":262},"],train_process.val_loss_all,",[252,33767,33768],{"class":367},"'bs--'",[252,33770,641],{"class":262},[252,33772,33748],{"class":5356},[252,33774,308],{"class":258},[252,33776,33777],{"class":367},"'val loss'",[252,33779,269],{"class":262},[252,33781,33783],{"class":254,"line":33782},197,[252,33784,33785],{"class":321},"    # 添加一个图例\n",[252,33787,33789],{"class":254,"line":33788},198,[252,33790,33791],{"class":262},"    plt.legend()\n",[252,33793,33795],{"class":254,"line":33794},199,[252,33796,33797],{"class":321},"    # 给轴添加标签\n",[252,33799,33801,33804,33807],{"class":254,"line":33800},200,[252,33802,33803],{"class":262},"    plt.xlabel(",[252,33805,33806],{"class":367},"'epoch'",[252,33808,269],{"class":262},[252,33810,33812,33815,33818],{"class":254,"line":33811},201,[252,33813,33814],{"class":262},"    plt.ylabel(",[252,33816,33817],{"class":367},"'loss'",[252,33819,269],{"class":262},[252,33821,33823],{"class":254,"line":33822},202,[252,33824,33825],{"class":321},"    # ②准确度图\n",[252,33827,33829,33831,33833,33835,33837,33839,33841],{"class":254,"line":33828},203,[252,33830,31867],{"class":262},[252,33832,480],{"class":311},[252,33834,641],{"class":262},[252,33836,340],{"class":311},[252,33838,641],{"class":262},[252,33840,340],{"class":311},[252,33842,269],{"class":262},[252,33844,33846,33848,33850,33853,33855,33857,33859,33861,33864],{"class":254,"line":33845},204,[252,33847,33734],{"class":262},[252,33849,33737],{"class":367},[252,33851,33852],{"class":262},"],train_process.train_acc_all,",[252,33854,33743],{"class":367},[252,33856,641],{"class":262},[252,33858,33748],{"class":5356},[252,33860,308],{"class":258},[252,33862,33863],{"class":367},"'train acc'",[252,33865,269],{"class":262},[252,33867,33869,33871,33873,33876,33878,33880,33882,33884,33887],{"class":254,"line":33868},205,[252,33870,33734],{"class":262},[252,33872,33737],{"class":367},[252,33874,33875],{"class":262},"],train_process.val_acc_all,",[252,33877,33768],{"class":367},[252,33879,641],{"class":262},[252,33881,33748],{"class":5356},[252,33883,308],{"class":258},[252,33885,33886],{"class":367},"'val acc'",[252,33888,269],{"class":262},[252,33890,33892],{"class":254,"line":33891},206,[252,33893,33894],{"class":321},"    # 添加图例\n",[252,33896,33898],{"class":254,"line":33897},207,[252,33899,33791],{"class":262},[252,33901,33903,33905,33907],{"class":254,"line":33902},208,[252,33904,33803],{"class":262},[252,33906,33737],{"class":367},[252,33908,269],{"class":262},[252,33910,33912,33914,33917],{"class":254,"line":33911},209,[252,33913,33814],{"class":262},[252,33915,33916],{"class":367},"\"acc\"",[252,33918,269],{"class":262},[252,33920,33922],{"class":254,"line":33921},210,[252,33923,33924],{"class":262},"    plt.show()\n",[252,33926,33928],{"class":254,"line":33927},211,[252,33929,2539],{"emptyLinePlaceholder":181},[252,33931,33933],{"class":254,"line":33932},212,[252,33934,33935],{"class":321},"# 正式开始训练:\n",[252,33937,33939,33941,33943,33945,33947],{"class":254,"line":33938},213,[252,33940,1670],{"class":258},[252,33942,31360],{"class":311},[252,33944,3088],{"class":258},[252,33946,31365],{"class":367},[252,33948,3878],{"class":262},[252,33950,33952],{"class":254,"line":33951},214,[252,33953,33954],{"class":321},"    # 将模型实例化\n",[252,33956,33958,33961,33963],{"class":254,"line":33957},215,[252,33959,33960],{"class":262},"    LeNet",[252,33962,308],{"class":258},[252,33964,33965],{"class":262},"LeNet()\n",[252,33967,33969,33972,33974],{"class":254,"line":33968},216,[252,33970,33971],{"class":262},"    train_dataloader,val_dataloader",[252,33973,308],{"class":258},[252,33975,33976],{"class":262},"train_val_data_process()\n",[252,33978,33980,33982,33984,33987,33990,33992,33994],{"class":254,"line":33979},217,[252,33981,33533],{"class":262},[252,33983,308],{"class":258},[252,33985,33986],{"class":262},"train_model_process(LeNet,train_dataloader,val_dataloader,",[252,33988,33989],{"class":5356},"num_epochs",[252,33991,308],{"class":258},[252,33993,963],{"class":311},[252,33995,269],{"class":262},[252,33997,33999],{"class":254,"line":33998},218,[252,34000,34001],{"class":262},"    matplot_acc_loss(train_process)\n",[19,34003,34004],{},"画图的补充点学习：",[19,34006,34007],{},[1601,34008],{"alt":169,"src":34009},"\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",[207,34011,34012],{"start":1318},[210,34013,34014],{},"测试",[244,34016,34018],{"className":30518,"code":34017,"language":30520,"meta":169,"style":169},"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",[22,34019,34020,34026,34036,34048,34058,34063,34073,34083,34087,34092,34101,34118,34130,34147,34158,34174,34179,34190,34201,34212,34219,34223,34228,34238,34243,34260,34268,34272,34277,34286,34295,34299,34304,34309,34314,34321,34326,34338,34348,34358,34363,34367,34372,34381,34386,34402,34407,34412,34417,34431,34436,34450,34454,34459,34474,34479,34491,34495,34500,34512,34517,34525,34530,34535,34545,34550,34559,34564,34569,34573,34578,34583,34599,34607,34612,34617,34676,34682,34687,34698,34706,34714,34718,34723,34727,34732,34740,34745,34761,34766,34776,34786],{"__ignoreMap":169},[252,34021,34022,34024],{"class":254,"line":255},[252,34023,30532],{"class":258},[252,34025,30535],{"class":262},[252,34027,34028,34030,34032,34034],{"class":254,"line":170},[252,34029,30532],{"class":258},[252,34031,31555],{"class":262},[252,34033,31523],{"class":258},[252,34035,31560],{"class":262},[252,34037,34038,34040,34043,34045],{"class":254,"line":1318},[252,34039,30877],{"class":258},[252,34041,34042],{"class":262}," jupyter_client.consoleapp ",[252,34044,30532],{"class":258},[252,34046,34047],{"class":262}," classes\n",[252,34049,34050,34052,34054,34056],{"class":254,"line":1333},[252,34051,30877],{"class":258},[252,34053,31538],{"class":262},[252,34055,30532],{"class":258},[252,34057,31543],{"class":262},[252,34059,34060],{"class":254,"line":1339},[252,34061,34062],{"class":321},"# 导入数据集\n",[252,34064,34065,34067,34069,34071],{"class":254,"line":1353},[252,34066,30877],{"class":258},[252,34068,31508],{"class":262},[252,34070,30532],{"class":258},[252,34072,31513],{"class":262},[252,34074,34075,34077,34079,34081],{"class":254,"line":1359},[252,34076,30877],{"class":258},[252,34078,32054],{"class":262},[252,34080,30532],{"class":258},[252,34082,32059],{"class":262},[252,34084,34085],{"class":254,"line":1450},[252,34086,2539],{"emptyLinePlaceholder":181},[252,34088,34089],{"class":254,"line":1456},[252,34090,34091],{"class":321},"# 测试数据处理\n",[252,34093,34094,34096,34099],{"class":254,"line":1468},[252,34095,32087],{"class":258},[252,34097,34098],{"class":2102}," test_data_process",[252,34100,32093],{"class":262},[252,34102,34103,34106,34108,34110,34112,34114,34116],{"class":254,"line":1751},[252,34104,34105],{"class":262},"    test_data",[252,34107,308],{"class":258},[252,34109,31595],{"class":262},[252,34111,31598],{"class":5356},[252,34113,308],{"class":258},[252,34115,31603],{"class":367},[252,34117,31606],{"class":262},[252,34119,34120,34123,34125,34128],{"class":254,"line":1756},[252,34121,34122],{"class":5356},"                           train",[252,34124,308],{"class":258},[252,34126,34127],{"class":311},"False",[252,34129,31606],{"class":262},[252,34131,34132,34135,34137,34139,34141,34143,34145],{"class":254,"line":1762},[252,34133,34134],{"class":5356},"                           transform",[252,34136,308],{"class":258},[252,34138,31633],{"class":262},[252,34140,31636],{"class":5356},[252,34142,308],{"class":258},[252,34144,1164],{"class":311},[252,34146,31644],{"class":262},[252,34148,34149,34152,34154,34156],{"class":254,"line":1767},[252,34150,34151],{"class":5356},"                           download",[252,34153,308],{"class":258},[252,34155,31616],{"class":311},[252,34157,269],{"class":262},[252,34159,34160,34163,34165,34167,34169,34171],{"class":254,"line":1781},[252,34161,34162],{"class":262},"    test_dataloader",[252,34164,308],{"class":258},[252,34166,31674],{"class":262},[252,34168,31677],{"class":5356},[252,34170,308],{"class":258},[252,34172,34173],{"class":262},"test_data,\n",[252,34175,34176],{"class":254,"line":1786},[252,34177,34178],{"class":321},"                                    # 这里是一张一张进行测试\n",[252,34180,34181,34184,34186,34188],{"class":254,"line":1792},[252,34182,34183],{"class":5356},"                                    batch_size",[252,34185,308],{"class":258},[252,34187,480],{"class":311},[252,34189,31606],{"class":262},[252,34191,34192,34195,34197,34199],{"class":254,"line":1813},[252,34193,34194],{"class":5356},"                                    shuffle",[252,34196,308],{"class":258},[252,34198,31616],{"class":311},[252,34200,31606],{"class":262},[252,34202,34203,34206,34208,34210],{"class":254,"line":1818},[252,34204,34205],{"class":5356},"                                    num_workers",[252,34207,308],{"class":258},[252,34209,454],{"class":311},[252,34211,269],{"class":262},[252,34213,34214,34216],{"class":254,"line":1832},[252,34215,4229],{"class":258},[252,34217,34218],{"class":262}," test_dataloader\n",[252,34220,34221],{"class":254,"line":1837},[252,34222,2539],{"emptyLinePlaceholder":181},[252,34224,34225],{"class":254,"line":1866},[252,34226,34227],{"class":321},"# 定义模型测试函数\n",[252,34229,34230,34232,34235],{"class":254,"line":1871},[252,34231,32087],{"class":258},[252,34233,34234],{"class":2102}," test_model_process",[252,34236,34237],{"class":262},"(model,test_dataloader):\n",[252,34239,34240],{"class":254,"line":1888},[252,34241,34242],{"class":321},"    # 将模型放到设备当中，先进行判断\n",[252,34244,34245,34247,34249,34251,34253,34255,34257],{"class":254,"line":1893},[252,34246,31377],{"class":262},[252,34248,308],{"class":258},[252,34250,31384],{"class":367},[252,34252,1843],{"class":258},[252,34254,31389],{"class":262},[252,34256,1840],{"class":258},[252,34258,34259],{"class":367}," \"cpu\"\n",[252,34261,34262,34264,34266],{"class":254,"line":1898},[252,34263,31429],{"class":262},[252,34265,308],{"class":258},[252,34267,32429],{"class":262},[252,34269,34270],{"class":254,"line":1903},[252,34271,2539],{"emptyLinePlaceholder":181},[252,34273,34274],{"class":254,"line":1917},[252,34275,34276],{"class":321},"    # 设置初始化参数\n",[252,34278,34279,34282,34284],{"class":254,"line":1922},[252,34280,34281],{"class":262},"    test_corrects",[252,34283,308],{"class":258},[252,34285,32482],{"class":311},[252,34287,34288,34291,34293],{"class":254,"line":2716},[252,34289,34290],{"class":262},"    test_num",[252,34292,308],{"class":258},[252,34294,3224],{"class":311},[252,34296,34297],{"class":254,"line":2730},[252,34298,2539],{"emptyLinePlaceholder":181},[252,34300,34301],{"class":254,"line":2738},[252,34302,34303],{"class":321},"    # 进行模型测试\n",[252,34305,34306],{"class":254,"line":2743},[252,34307,34308],{"class":321},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[252,34310,34311],{"class":254,"line":2749},[252,34312,34313],{"class":321},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[252,34315,34316,34319],{"class":254,"line":2755},[252,34317,34318],{"class":258},"    with",[252,34320,33024],{"class":262},[252,34322,34323],{"class":254,"line":2760},[252,34324,34325],{"class":321},"        # 从数据中进行\n",[252,34327,34328,34330,34333,34335],{"class":254,"line":8088},[252,34329,3542],{"class":258},[252,34331,34332],{"class":262}," test_data_x,test_data_y ",[252,34334,26183],{"class":258},[252,34336,34337],{"class":262}," test_dataloader:\n",[252,34339,34340,34343,34345],{"class":254,"line":8112},[252,34341,34342],{"class":262},"            test_data_x",[252,34344,308],{"class":258},[252,34346,34347],{"class":262},"test_data_x.to(device)\n",[252,34349,34350,34353,34355],{"class":254,"line":8117},[252,34351,34352],{"class":262},"            test_data_y",[252,34354,308],{"class":258},[252,34356,34357],{"class":262},"test_data_y.to(device)\n",[252,34359,34360],{"class":254,"line":8123},[252,34361,34362],{"class":321},"            # 设置为验证模式\n",[252,34364,34365],{"class":254,"line":8150},[252,34366,33015],{"class":262},[252,34368,34369],{"class":254,"line":8155},[252,34370,34371],{"class":321},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[252,34373,34374,34376,34378],{"class":254,"line":8161},[252,34375,32800],{"class":262},[252,34377,308],{"class":258},[252,34379,34380],{"class":262},"model(test_data_x)\n",[252,34382,34383],{"class":254,"line":8173},[252,34384,34385],{"class":321},"            # 查找每一行中最大值对应的下标\n",[252,34387,34388,34390,34392,34394,34396,34398,34400],{"class":254,"line":8185},[252,34389,32817],{"class":262},[252,34391,308],{"class":258},[252,34393,32822],{"class":262},[252,34395,32825],{"class":5356},[252,34397,308],{"class":258},[252,34399,480],{"class":311},[252,34401,269],{"class":262},[252,34403,34404],{"class":254,"line":8197},[252,34405,34406],{"class":321},"            # 计算正确率\n",[252,34408,34409],{"class":254,"line":9856},[252,34410,34411],{"class":321},"            # .data表示是一个不带梯度信息的tensor\n",[252,34413,34414],{"class":254,"line":9881},[252,34415,34416],{"class":321},"            # 如果预测正确，则准确度test_corrects加1\n",[252,34418,34419,34422,34424,34426,34428],{"class":254,"line":9904},[252,34420,34421],{"class":262},"            test_corrects",[252,34423,9617],{"class":258},[252,34425,32927],{"class":262},[252,34427,3088],{"class":258},[252,34429,34430],{"class":262},"test_data_y.data)\n",[252,34432,34433],{"class":254,"line":9928},[252,34434,34435],{"class":321},"            # 将所有的测试样本进行累计\n",[252,34437,34438,34441,34443,34446,34448],{"class":254,"line":9933},[252,34439,34440],{"class":262},"            test_num",[252,34442,9617],{"class":258},[252,34444,34445],{"class":262},"test_data_x.size(",[252,34447,454],{"class":311},[252,34449,269],{"class":262},[252,34451,34452],{"class":254,"line":9938},[252,34453,2539],{"emptyLinePlaceholder":181},[252,34455,34456],{"class":254,"line":9943},[252,34457,34458],{"class":321},"        # 计算准确度\n",[252,34460,34461,34464,34466,34469,34471],{"class":254,"line":9952},[252,34462,34463],{"class":262},"        test_acc",[252,34465,308],{"class":258},[252,34467,34468],{"class":262},"test_corrects.double().item()",[252,34470,847],{"class":258},[252,34472,34473],{"class":262},"test_num\n",[252,34475,34476],{"class":254,"line":9957},[252,34477,34478],{"class":321},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[252,34480,34481,34483,34485,34488],{"class":254,"line":9963},[252,34482,32591],{"class":311},[252,34484,263],{"class":262},[252,34486,34487],{"class":367},"\"测试的准确率：\"",[252,34489,34490],{"class":262},",test_acc)\n",[252,34492,34493],{"class":254,"line":9984},[252,34494,2539],{"emptyLinePlaceholder":181},[252,34496,34497],{"class":254,"line":9990},[252,34498,34499],{"class":321},"# 实现模型的测试功能\n",[252,34501,34502,34504,34506,34508,34510],{"class":254,"line":10004},[252,34503,1670],{"class":258},[252,34505,31360],{"class":311},[252,34507,3088],{"class":258},[252,34509,31365],{"class":367},[252,34511,3878],{"class":262},[252,34513,34514],{"class":254,"line":10010},[252,34515,34516],{"class":321},"    # 加载模型\n",[252,34518,34519,34521,34523],{"class":254,"line":10037},[252,34520,31429],{"class":262},[252,34522,308],{"class":258},[252,34524,33965],{"class":262},[252,34526,34527],{"class":254,"line":10046},[252,34528,34529],{"class":321},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[252,34531,34532],{"class":254,"line":10052},[252,34533,34534],{"class":321},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[252,34536,34537,34540,34543],{"class":254,"line":10060},[252,34538,34539],{"class":262},"    model.load_state_dict(torch.load(",[252,34541,34542],{"class":367},"'best_model.pth'",[252,34544,30637],{"class":262},[252,34546,34547],{"class":254,"line":10065},[252,34548,34549],{"class":321},"    # 数据加载\n",[252,34551,34552,34554,34556],{"class":254,"line":16744},[252,34553,34162],{"class":262},[252,34555,308],{"class":258},[252,34557,34558],{"class":262},"test_data_process()\n",[252,34560,34561],{"class":254,"line":16750},[252,34562,34563],{"class":321},"    # 加载模型测试的函数\n",[252,34565,34566],{"class":254,"line":16773},[252,34567,34568],{"class":262},"    test_model_process(model,test_dataloader)\n",[252,34570,34571],{"class":254,"line":16779},[252,34572,2539],{"emptyLinePlaceholder":181},[252,34574,34575],{"class":254,"line":16802},[252,34576,34577],{"class":321},"    # 验证集推理实现：\n",[252,34579,34580],{"class":254,"line":16816},[252,34581,34582],{"class":321},"    # 加载数据加载的更详细一些\n",[252,34584,34585,34587,34589,34591,34593,34595,34597],{"class":254,"line":16836},[252,34586,31377],{"class":262},[252,34588,308],{"class":258},[252,34590,31384],{"class":367},[252,34592,1843],{"class":258},[252,34594,31389],{"class":262},[252,34596,1840],{"class":258},[252,34598,34259],{"class":367},[252,34600,34601,34603,34605],{"class":254,"line":16842},[252,34602,31429],{"class":262},[252,34604,308],{"class":258},[252,34606,32429],{"class":262},[252,34608,34609],{"class":254,"line":16853},[252,34610,34611],{"class":321},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[252,34613,34614],{"class":254,"line":16876},[252,34615,34616],{"class":321},"    # 顺序不可改变\n",[252,34618,34619,34622,34624,34626,34629,34631,34634,34636,34639,34641,34644,34646,34649,34651,34654,34656,34659,34661,34664,34666,34669,34671,34674],{"class":254,"line":16898},[252,34620,34621],{"class":262},"    classes",[252,34623,308],{"class":258},[252,34625,1153],{"class":262},[252,34627,34628],{"class":367},"'T-shirt\u002Ftop'",[252,34630,641],{"class":262},[252,34632,34633],{"class":367},"'Trouser'",[252,34635,641],{"class":262},[252,34637,34638],{"class":367},"'Pullover'",[252,34640,641],{"class":262},[252,34642,34643],{"class":367},"'Dress'",[252,34645,641],{"class":262},[252,34647,34648],{"class":367},"'Coat'",[252,34650,641],{"class":262},[252,34652,34653],{"class":367},"'Sandal'",[252,34655,641],{"class":262},[252,34657,34658],{"class":367},"'Shirt'",[252,34660,641],{"class":262},[252,34662,34663],{"class":367},"'Sneaker'",[252,34665,641],{"class":262},[252,34667,34668],{"class":367},"'Bag'",[252,34670,641],{"class":262},[252,34672,34673],{"class":367},"'Ankle boot'",[252,34675,33386],{"class":262},[252,34677,34678,34680],{"class":254,"line":16903},[252,34679,34318],{"class":258},[252,34681,33024],{"class":262},[252,34683,34684],{"class":254,"line":16909},[252,34685,34686],{"class":321},"        # 将数据和标签都放到设备当中\n",[252,34688,34689,34691,34694,34696],{"class":254,"line":16923},[252,34690,3542],{"class":258},[252,34692,34693],{"class":262}," b_x,b_y ",[252,34695,26183],{"class":258},[252,34697,34337],{"class":262},[252,34699,34700,34702,34704],{"class":254,"line":16936},[252,34701,32750],{"class":262},[252,34703,308],{"class":258},[252,34705,32755],{"class":262},[252,34707,34708,34710,34712],{"class":254,"line":16941},[252,34709,32765],{"class":262},[252,34711,308],{"class":258},[252,34713,32770],{"class":262},[252,34715,34716],{"class":254,"line":16955},[252,34717,2539],{"emptyLinePlaceholder":181},[252,34719,34720],{"class":254,"line":16960},[252,34721,34722],{"class":321},"            # 设置模型为验证模式\n",[252,34724,34725],{"class":254,"line":16966},[252,34726,33015],{"class":262},[252,34728,34729],{"class":254,"line":16971},[252,34730,34731],{"class":321},"            # 模型推理结果\n",[252,34733,34734,34736,34738],{"class":254,"line":16985},[252,34735,32800],{"class":262},[252,34737,308],{"class":258},[252,34739,32805],{"class":262},[252,34741,34742],{"class":254,"line":16990},[252,34743,34744],{"class":321},"            # 获取最大下标，最大下标就是类别号\n",[252,34746,34747,34749,34751,34753,34755,34757,34759],{"class":254,"line":16995},[252,34748,32817],{"class":262},[252,34750,308],{"class":258},[252,34752,32822],{"class":262},[252,34754,32825],{"class":5356},[252,34756,308],{"class":258},[252,34758,480],{"class":311},[252,34760,269],{"class":262},[252,34762,34763],{"class":254,"line":17009},[252,34764,34765],{"class":321},"            # 取出张量中的数值\n",[252,34767,34768,34771,34773],{"class":254,"line":17021},[252,34769,34770],{"class":262},"            result",[252,34772,308],{"class":258},[252,34774,34775],{"class":262},"pre_lab.item()\n",[252,34777,34778,34781,34783],{"class":254,"line":17026},[252,34779,34780],{"class":262},"            label",[252,34782,308],{"class":258},[252,34784,34785],{"class":262},"b_y.item()\n",[252,34787,34788,34791,34793,34796,34799,34802,34804,34807],{"class":254,"line":17039},[252,34789,34790],{"class":311},"            print",[252,34792,263],{"class":262},[252,34794,34795],{"class":367},"\"预测值：\"",[252,34797,34798],{"class":262},",classes[result],",[252,34800,34801],{"class":367},"\"------\"",[252,34803,641],{"class":262},[252,34805,34806],{"class":367},"\"真实值：\"",[252,34808,34809],{"class":262},",classes[label])\n",[19,34811,34812],{},"（2）AlexNet",[207,34814,34815],{},[210,34816,34817],{},"神经网络构建",[244,34819,34821],{"className":30518,"code":34820,"language":30520,"meta":169,"style":169},"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",[22,34822,34823,34829,34839,34849,34861,34865,34882,34890,34905,34917,34959,34986,35029,35055,35099,35142,35185,35212,35216,35226,35231,35259,35278,35297,35301,35306,35314,35329,35339,35353,35363,35378,35393,35408,35419,35423,35428,35438,35453,35458,35472,35487,35499,35504,35515,35520,35526,35531,35543,35563,35568,35577],{"__ignoreMap":169},[252,34824,34825,34827],{"class":254,"line":255},[252,34826,30532],{"class":258},[252,34828,30535],{"class":262},[252,34830,34831,34833,34835,34837],{"class":254,"line":170},[252,34832,30877],{"class":258},[252,34834,30880],{"class":262},[252,34836,30532],{"class":258},[252,34838,30885],{"class":262},[252,34840,34841,34843,34845,34847],{"class":254,"line":1318},[252,34842,30877],{"class":258},[252,34844,30897],{"class":262},[252,34846,30532],{"class":258},[252,34848,30902],{"class":262},[252,34850,34851,34853,34856,34858],{"class":254,"line":1333},[252,34852,30532],{"class":258},[252,34854,34855],{"class":262}," torch.nn.functional ",[252,34857,31523],{"class":258},[252,34859,34860],{"class":262}," F\n",[252,34862,34863],{"class":254,"line":1339},[252,34864,2539],{"emptyLinePlaceholder":181},[252,34866,34867,34869,34872,34874,34876,34878,34880],{"class":254,"line":1353},[252,34868,14834],{"class":258},[252,34870,34871],{"class":2102}," AlexNet",[252,34873,263],{"class":262},[252,34875,30918],{"class":2102},[252,34877,821],{"class":262},[252,34879,30923],{"class":2102},[252,34881,30926],{"class":262},[252,34883,34884,34886,34888],{"class":254,"line":1359},[252,34885,30941],{"class":258},[252,34887,30944],{"class":311},[252,34889,30947],{"class":262},[252,34891,34892,34894,34897,34899,34901,34903],{"class":254,"line":1450},[252,34893,30957],{"class":311},[252,34895,34896],{"class":262},"(AlexNet,",[252,34898,30963],{"class":311},[252,34900,30966],{"class":262},[252,34902,30969],{"class":311},[252,34904,2115],{"class":262},[252,34906,34907,34909,34912,34914],{"class":254,"line":1456},[252,34908,30985],{"class":311},[252,34910,34911],{"class":262},".ReLu",[252,34913,308],{"class":258},[252,34915,34916],{"class":262},"nn.ReLU()\n",[252,34918,34919,34921,34923,34925,34927,34929,34931,34933,34935,34937,34939,34941,34943,34945,34947,34949,34951,34953,34955,34957],{"class":254,"line":1468},[252,34920,30985],{"class":311},[252,34922,30988],{"class":262},[252,34924,308],{"class":258},[252,34926,30993],{"class":262},[252,34928,30996],{"class":5356},[252,34930,308],{"class":258},[252,34932,480],{"class":311},[252,34934,641],{"class":262},[252,34936,31005],{"class":5356},[252,34938,308],{"class":258},[252,34940,472],{"class":311},[252,34942,641],{"class":262},[252,34944,31014],{"class":5356},[252,34946,308],{"class":258},[252,34948,735],{"class":311},[252,34950,641],{"class":262},[252,34952,31069],{"class":5356},[252,34954,308],{"class":258},[252,34956,556],{"class":311},[252,34958,269],{"class":262},[252,34960,34961,34963,34965,34967,34970,34972,34974,34976,34978,34980,34982,34984],{"class":254,"line":1751},[252,34962,30985],{"class":311},[252,34964,31053],{"class":262},[252,34966,308],{"class":258},[252,34968,34969],{"class":262},"nn.MaxPool2d(",[252,34971,31014],{"class":5356},[252,34973,308],{"class":258},[252,34975,334],{"class":311},[252,34977,641],{"class":262},[252,34979,31069],{"class":5356},[252,34981,308],{"class":258},[252,34983,340],{"class":311},[252,34985,269],{"class":262},[252,34987,34988,34990,34992,34994,34996,34998,35000,35002,35004,35006,35008,35011,35013,35015,35017,35019,35021,35023,35025,35027],{"class":254,"line":1756},[252,34989,30985],{"class":311},[252,34991,31082],{"class":262},[252,34993,308],{"class":258},[252,34995,30993],{"class":262},[252,34997,30996],{"class":5356},[252,34999,308],{"class":258},[252,35001,472],{"class":311},[252,35003,641],{"class":262},[252,35005,31005],{"class":5356},[252,35007,308],{"class":258},[252,35009,35010],{"class":311},"256",[252,35012,641],{"class":262},[252,35014,31014],{"class":5356},[252,35016,308],{"class":258},[252,35018,582],{"class":311},[252,35020,641],{"class":262},[252,35022,31023],{"class":5356},[252,35024,308],{"class":258},[252,35026,340],{"class":311},[252,35028,269],{"class":262},[252,35030,35031,35033,35035,35037,35039,35041,35043,35045,35047,35049,35051,35053],{"class":254,"line":1762},[252,35032,30985],{"class":311},[252,35034,31117],{"class":262},[252,35036,308],{"class":258},[252,35038,34969],{"class":262},[252,35040,31014],{"class":5356},[252,35042,308],{"class":258},[252,35044,334],{"class":311},[252,35046,641],{"class":262},[252,35048,31069],{"class":5356},[252,35050,308],{"class":258},[252,35052,340],{"class":311},[252,35054,269],{"class":262},[252,35056,35057,35059,35062,35064,35066,35068,35070,35072,35074,35076,35078,35081,35083,35085,35087,35089,35091,35093,35095,35097],{"class":254,"line":1767},[252,35058,30985],{"class":311},[252,35060,35061],{"class":262},".c5",[252,35063,308],{"class":258},[252,35065,30993],{"class":262},[252,35067,30996],{"class":5356},[252,35069,308],{"class":258},[252,35071,35010],{"class":311},[252,35073,641],{"class":262},[252,35075,31005],{"class":5356},[252,35077,308],{"class":258},[252,35079,35080],{"class":311},"384",[252,35082,641],{"class":262},[252,35084,31014],{"class":5356},[252,35086,308],{"class":258},[252,35088,334],{"class":311},[252,35090,641],{"class":262},[252,35092,31023],{"class":5356},[252,35094,308],{"class":258},[252,35096,480],{"class":311},[252,35098,269],{"class":262},[252,35100,35101,35103,35106,35108,35110,35112,35114,35116,35118,35120,35122,35124,35126,35128,35130,35132,35134,35136,35138,35140],{"class":254,"line":1781},[252,35102,30985],{"class":311},[252,35104,35105],{"class":262},".c6",[252,35107,308],{"class":258},[252,35109,30993],{"class":262},[252,35111,30996],{"class":5356},[252,35113,308],{"class":258},[252,35115,35080],{"class":311},[252,35117,641],{"class":262},[252,35119,31005],{"class":5356},[252,35121,308],{"class":258},[252,35123,35080],{"class":311},[252,35125,641],{"class":262},[252,35127,31014],{"class":5356},[252,35129,308],{"class":258},[252,35131,334],{"class":311},[252,35133,641],{"class":262},[252,35135,31023],{"class":5356},[252,35137,308],{"class":258},[252,35139,480],{"class":311},[252,35141,269],{"class":262},[252,35143,35144,35146,35149,35151,35153,35155,35157,35159,35161,35163,35165,35167,35169,35171,35173,35175,35177,35179,35181,35183],{"class":254,"line":1786},[252,35145,30985],{"class":311},[252,35147,35148],{"class":262},".c7",[252,35150,308],{"class":258},[252,35152,30993],{"class":262},[252,35154,30996],{"class":5356},[252,35156,308],{"class":258},[252,35158,35080],{"class":311},[252,35160,641],{"class":262},[252,35162,31005],{"class":5356},[252,35164,308],{"class":258},[252,35166,35010],{"class":311},[252,35168,641],{"class":262},[252,35170,31014],{"class":5356},[252,35172,308],{"class":258},[252,35174,334],{"class":311},[252,35176,641],{"class":262},[252,35178,31023],{"class":5356},[252,35180,308],{"class":258},[252,35182,480],{"class":311},[252,35184,269],{"class":262},[252,35186,35187,35189,35192,35194,35196,35198,35200,35202,35204,35206,35208,35210],{"class":254,"line":1792},[252,35188,30985],{"class":311},[252,35190,35191],{"class":262},".s8",[252,35193,308],{"class":258},[252,35195,34969],{"class":262},[252,35197,31014],{"class":5356},[252,35199,308],{"class":258},[252,35201,334],{"class":311},[252,35203,641],{"class":262},[252,35205,31069],{"class":5356},[252,35207,308],{"class":258},[252,35209,340],{"class":311},[252,35211,269],{"class":262},[252,35213,35214],{"class":254,"line":1813},[252,35215,31142],{"class":321},[252,35217,35218,35220,35222,35224],{"class":254,"line":1818},[252,35219,30985],{"class":311},[252,35221,31149],{"class":262},[252,35223,308],{"class":258},[252,35225,31154],{"class":262},[252,35227,35228],{"class":254,"line":1832},[252,35229,35230],{"class":321},"       # 定义全连接层\n",[252,35232,35233,35235,35238,35240,35242,35244,35246,35248,35250,35252,35254,35257],{"class":254,"line":1837},[252,35234,30985],{"class":311},[252,35236,35237],{"class":262},".f1",[252,35239,308],{"class":258},[252,35241,31171],{"class":262},[252,35243,607],{"class":311},[252,35245,718],{"class":258},[252,35247,607],{"class":311},[252,35249,718],{"class":258},[252,35251,35010],{"class":311},[252,35253,641],{"class":262},[252,35255,35256],{"class":311},"4096",[252,35258,269],{"class":262},[252,35260,35261,35263,35266,35268,35270,35272,35274,35276],{"class":254,"line":1866},[252,35262,30985],{"class":311},[252,35264,35265],{"class":262},".f2",[252,35267,308],{"class":258},[252,35269,31171],{"class":262},[252,35271,35256],{"class":311},[252,35273,641],{"class":262},[252,35275,35256],{"class":311},[252,35277,269],{"class":262},[252,35279,35280,35282,35285,35287,35289,35291,35293,35295],{"class":254,"line":1871},[252,35281,30985],{"class":311},[252,35283,35284],{"class":262},".f3",[252,35286,308],{"class":258},[252,35288,31171],{"class":262},[252,35290,35256],{"class":311},[252,35292,641],{"class":262},[252,35294,709],{"class":311},[252,35296,269],{"class":262},[252,35298,35299],{"class":254,"line":1888},[252,35300,2539],{"emptyLinePlaceholder":181},[252,35302,35303],{"class":254,"line":1893},[252,35304,35305],{"class":321},"    # 定义前向传播\n",[252,35307,35308,35310,35312],{"class":254,"line":1898},[252,35309,30941],{"class":258},[252,35311,31233],{"class":2102},[252,35313,31236],{"class":262},[252,35315,35316,35318,35320,35322,35325,35327],{"class":254,"line":1903},[252,35317,31241],{"class":262},[252,35319,308],{"class":258},[252,35321,30963],{"class":311},[252,35323,35324],{"class":262},".ReLu(",[252,35326,30963],{"class":311},[252,35328,31253],{"class":262},[252,35330,35331,35333,35335,35337],{"class":254,"line":1917},[252,35332,31241],{"class":262},[252,35334,308],{"class":258},[252,35336,30963],{"class":311},[252,35338,31264],{"class":262},[252,35340,35341,35343,35345,35347,35349,35351],{"class":254,"line":1922},[252,35342,31241],{"class":262},[252,35344,308],{"class":258},[252,35346,30963],{"class":311},[252,35348,35324],{"class":262},[252,35350,30963],{"class":311},[252,35352,31279],{"class":262},[252,35354,35355,35357,35359,35361],{"class":254,"line":2716},[252,35356,31241],{"class":262},[252,35358,308],{"class":258},[252,35360,30963],{"class":311},[252,35362,31290],{"class":262},[252,35364,35365,35367,35369,35371,35373,35375],{"class":254,"line":2730},[252,35366,31241],{"class":262},[252,35368,308],{"class":258},[252,35370,30963],{"class":311},[252,35372,35324],{"class":262},[252,35374,30963],{"class":311},[252,35376,35377],{"class":262},".c5(x))\n",[252,35379,35380,35382,35384,35386,35388,35390],{"class":254,"line":2738},[252,35381,31241],{"class":262},[252,35383,308],{"class":258},[252,35385,30963],{"class":311},[252,35387,35324],{"class":262},[252,35389,30963],{"class":311},[252,35391,35392],{"class":262},".c6(x))\n",[252,35394,35395,35397,35399,35401,35403,35405],{"class":254,"line":2743},[252,35396,31241],{"class":262},[252,35398,308],{"class":258},[252,35400,30963],{"class":311},[252,35402,35324],{"class":262},[252,35404,30963],{"class":311},[252,35406,35407],{"class":262},".c7(x))\n",[252,35409,35410,35412,35414,35416],{"class":254,"line":2749},[252,35411,31241],{"class":262},[252,35413,308],{"class":258},[252,35415,30963],{"class":311},[252,35417,35418],{"class":262},".s8(x)\n",[252,35420,35421],{"class":254,"line":2755},[252,35422,2539],{"emptyLinePlaceholder":181},[252,35424,35425],{"class":254,"line":2760},[252,35426,35427],{"class":321},"        # 展平加线性全连接层\n",[252,35429,35430,35432,35434,35436],{"class":254,"line":8088},[252,35431,31241],{"class":262},[252,35433,308],{"class":258},[252,35435,30963],{"class":311},[252,35437,31301],{"class":262},[252,35439,35440,35442,35444,35446,35448,35450],{"class":254,"line":8112},[252,35441,31241],{"class":262},[252,35443,308],{"class":258},[252,35445,30963],{"class":311},[252,35447,35324],{"class":262},[252,35449,30963],{"class":311},[252,35451,35452],{"class":262},".f1(x))\n",[252,35454,35455],{"class":254,"line":8117},[252,35456,35457],{"class":321},"        # 还需要dropout对神经元随机进行失活\n",[252,35459,35460,35462,35464,35467,35470],{"class":254,"line":8123},[252,35461,31241],{"class":262},[252,35463,308],{"class":258},[252,35465,35466],{"class":262},"F.dropout(x,",[252,35468,35469],{"class":311},"0.5",[252,35471,269],{"class":262},[252,35473,35474,35476,35478,35480,35482,35484],{"class":254,"line":8150},[252,35475,31241],{"class":262},[252,35477,308],{"class":258},[252,35479,30963],{"class":311},[252,35481,35324],{"class":262},[252,35483,30963],{"class":311},[252,35485,35486],{"class":262},".f2(x))\n",[252,35488,35489,35491,35493,35495,35497],{"class":254,"line":8155},[252,35490,31241],{"class":262},[252,35492,308],{"class":258},[252,35494,35466],{"class":262},[252,35496,35469],{"class":311},[252,35498,269],{"class":262},[252,35500,35501],{"class":254,"line":8161},[252,35502,35503],{"class":321},"        # 直接输出\n",[252,35505,35506,35508,35510,35512],{"class":254,"line":8173},[252,35507,31241],{"class":262},[252,35509,308],{"class":258},[252,35511,30963],{"class":311},[252,35513,35514],{"class":262},".f3(x)\n",[252,35516,35517],{"class":254,"line":8185},[252,35518,35519],{"class":321},"        # 前向传播输出\n",[252,35521,35522,35524],{"class":254,"line":8197},[252,35523,14892],{"class":258},[252,35525,31349],{"class":262},[252,35527,35528],{"class":254,"line":9856},[252,35529,35530],{"class":321},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[252,35532,35533,35535,35537,35539,35541],{"class":254,"line":9881},[252,35534,1670],{"class":258},[252,35536,31360],{"class":311},[252,35538,3088],{"class":258},[252,35540,31365],{"class":367},[252,35542,3878],{"class":262},[252,35544,35545,35547,35549,35551,35553,35555,35557,35559,35561],{"class":254,"line":9904},[252,35546,31377],{"class":262},[252,35548,308],{"class":258},[252,35550,30591],{"class":262},[252,35552,31384],{"class":367},[252,35554,1843],{"class":258},[252,35556,31389],{"class":262},[252,35558,1840],{"class":258},[252,35560,30616],{"class":367},[252,35562,269],{"class":262},[252,35564,35565],{"class":254,"line":9928},[252,35566,35567],{"class":321},"    # 模型实例化，然后将实例化的模型放到设备中\n",[252,35569,35570,35572,35574],{"class":254,"line":9933},[252,35571,31429],{"class":262},[252,35573,308],{"class":258},[252,35575,35576],{"class":262},"AlexNet().to(device)\n",[252,35578,35579,35581,35583,35585,35587,35590,35592,35594],{"class":254,"line":9938},[252,35580,31439],{"class":311},[252,35582,31442],{"class":262},[252,35584,480],{"class":311},[252,35586,641],{"class":262},[252,35588,35589],{"class":311},"227",[252,35591,641],{"class":262},[252,35593,35589],{"class":311},[252,35595,31455],{"class":262},[207,35597,35598],{"start":170},[210,35599,31468],{},[244,35601,35603],{"className":30518,"code":35602,"language":30520,"meta":169,"style":169},"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",[22,35604,35605,35611,35617,35627,35633,35643,35653,35663,35673,35683,35687,35698,35708,35712,35716,35720,35728,35740,35750,35766,35776,35808,35822,35832,35842,35846,35856,35870,35880,35890,35900,35906,35910,35914,35918,35922,35926,35934,35954,35958,35962,35966,35970,35974,35990,35994,35998,36006,36010,36014,36022,36026,36030,36034,36042,36046,36050,36054,36058,36066,36070,36078,36082,36090,36094,36102,36106,36114,36118,36122,36130,36134,36138,36142,36154,36178,36192,36196,36200,36204,36212,36216,36224,36228,36236,36240,36248,36252,36260,36264,36272,36276,36288,36292,36300,36304,36312,36316,36320,36324,36328,36336,36340,36356,36360,36368,36372,36376,36380,36384,36388,36392,36396,36412,36416,36428,36432,36444,36448,36460,36464,36472,36476,36484,36488,36492,36497,36503,36507,36516,36520,36537,36541,36550,36554,36572,36585,36590,36603,36607,36611,36619,36623,36627,36635,36639,36647,36651,36659,36663,36667,36709,36751,36755,36759,36775,36779,36795,36799,36803,36811,36815,36819,36831,36869,36874,36879,36888,36892,36906,36916,36922,36928,36934,36940,36944,36948,36954,36958,36962,36970,36974,36992,36996,37000,37004,37020,37024,37028,37032,37036,37040,37060,37080,37084,37088,37092,37100,37108,37112,37128,37148,37168,37172,37176,37184,37192,37196,37200,37204,37216,37220,37230,37238,37255],{"__ignoreMap":169},[252,35606,35607,35609],{"class":254,"line":255},[252,35608,30532],{"class":258},[252,35610,31962],{"class":262},[252,35612,35613,35615],{"class":254,"line":170},[252,35614,30532],{"class":258},[252,35616,31969],{"class":262},[252,35618,35619,35621,35623,35625],{"class":254,"line":1318},[252,35620,30532],{"class":258},[252,35622,31980],{"class":262},[252,35624,31523],{"class":258},[252,35626,31985],{"class":262},[252,35628,35629,35631],{"class":254,"line":1333},[252,35630,30532],{"class":258},[252,35632,30535],{"class":262},[252,35634,35635,35637,35639,35641],{"class":254,"line":1339},[252,35636,30877],{"class":258},[252,35638,31555],{"class":262},[252,35640,30532],{"class":258},[252,35642,32002],{"class":262},[252,35644,35645,35647,35649,35651],{"class":254,"line":1353},[252,35646,30877],{"class":258},[252,35648,31508],{"class":262},[252,35650,30532],{"class":258},[252,35652,31513],{"class":262},[252,35654,35655,35657,35659,35661],{"class":254,"line":1359},[252,35656,30877],{"class":258},[252,35658,31538],{"class":262},[252,35660,30532],{"class":258},[252,35662,31543],{"class":262},[252,35664,35665,35667,35669,35671],{"class":254,"line":1450},[252,35666,30532],{"class":258},[252,35668,31555],{"class":262},[252,35670,31523],{"class":258},[252,35672,31560],{"class":262},[252,35674,35675,35677,35679,35681],{"class":254,"line":1456},[252,35676,30532],{"class":258},[252,35678,31572],{"class":262},[252,35680,31523],{"class":258},[252,35682,31577],{"class":262},[252,35684,35685],{"class":254,"line":1468},[252,35686,32047],{"class":321},[252,35688,35689,35691,35693,35695],{"class":254,"line":1751},[252,35690,30877],{"class":258},[252,35692,32054],{"class":262},[252,35694,30532],{"class":258},[252,35696,35697],{"class":262}," AlexNet\n",[252,35699,35700,35702,35704,35706],{"class":254,"line":1756},[252,35701,30877],{"class":258},[252,35703,30880],{"class":262},[252,35705,30532],{"class":258},[252,35707,30885],{"class":262},[252,35709,35710],{"class":254,"line":1762},[252,35711,2539],{"emptyLinePlaceholder":181},[252,35713,35714],{"class":254,"line":1767},[252,35715,2539],{"emptyLinePlaceholder":181},[252,35717,35718],{"class":254,"line":1781},[252,35719,32082],{"class":321},[252,35721,35722,35724,35726],{"class":254,"line":1786},[252,35723,32087],{"class":258},[252,35725,32090],{"class":2102},[252,35727,32093],{"class":262},[252,35729,35730,35732,35734,35736,35738],{"class":254,"line":1792},[252,35731,32098],{"class":262},[252,35733,308],{"class":258},[252,35735,31595],{"class":262},[252,35737,31603],{"class":367},[252,35739,31606],{"class":262},[252,35741,35742,35744,35746,35748],{"class":254,"line":1813},[252,35743,32111],{"class":5356},[252,35745,308],{"class":258},[252,35747,31616],{"class":311},[252,35749,31606],{"class":262},[252,35751,35752,35754,35756,35758,35760,35762,35764],{"class":254,"line":1818},[252,35753,32122],{"class":5356},[252,35755,308],{"class":258},[252,35757,31633],{"class":262},[252,35759,31636],{"class":5356},[252,35761,308],{"class":258},[252,35763,35589],{"class":311},[252,35765,31644],{"class":262},[252,35767,35768,35770,35772,35774],{"class":254,"line":1832},[252,35769,32139],{"class":5356},[252,35771,308],{"class":258},[252,35773,31616],{"class":311},[252,35775,269],{"class":262},[252,35777,35778,35780,35782,35784,35786,35788,35790,35792,35794,35796,35798,35800,35802,35804,35806],{"class":254,"line":1837},[252,35779,32150],{"class":262},[252,35781,308],{"class":258},[252,35783,32155],{"class":262},[252,35785,32158],{"class":311},[252,35787,263],{"class":262},[252,35789,32163],{"class":311},[252,35791,718],{"class":258},[252,35793,7498],{"class":311},[252,35795,32170],{"class":262},[252,35797,32158],{"class":311},[252,35799,263],{"class":262},[252,35801,32177],{"class":311},[252,35803,718],{"class":258},[252,35805,7498],{"class":311},[252,35807,32184],{"class":262},[252,35809,35810,35812,35814,35816,35818,35820],{"class":254,"line":1866},[252,35811,32189],{"class":262},[252,35813,308],{"class":258},[252,35815,32194],{"class":262},[252,35817,31677],{"class":5356},[252,35819,308],{"class":258},[252,35821,31682],{"class":262},[252,35823,35824,35826,35828,35830],{"class":254,"line":1871},[252,35825,32205],{"class":5356},[252,35827,308],{"class":258},[252,35829,32210],{"class":311},[252,35831,31606],{"class":262},[252,35833,35834,35836,35838,35840],{"class":254,"line":1888},[252,35835,32217],{"class":5356},[252,35837,308],{"class":258},[252,35839,31616],{"class":311},[252,35841,31606],{"class":262},[252,35843,35844],{"class":254,"line":1893},[252,35845,32228],{"class":321},[252,35847,35848,35850,35852,35854],{"class":254,"line":1898},[252,35849,32233],{"class":5356},[252,35851,308],{"class":258},[252,35853,658],{"class":311},[252,35855,269],{"class":262},[252,35857,35858,35860,35862,35864,35866,35868],{"class":254,"line":1903},[252,35859,32244],{"class":262},[252,35861,308],{"class":258},[252,35863,31674],{"class":262},[252,35865,31677],{"class":5356},[252,35867,308],{"class":258},[252,35869,32255],{"class":262},[252,35871,35872,35874,35876,35878],{"class":254,"line":1917},[252,35873,32260],{"class":5356},[252,35875,308],{"class":258},[252,35877,32210],{"class":311},[252,35879,31606],{"class":262},[252,35881,35882,35884,35886,35888],{"class":254,"line":1922},[252,35883,32271],{"class":5356},[252,35885,308],{"class":258},[252,35887,31616],{"class":311},[252,35889,31606],{"class":262},[252,35891,35892,35894,35896,35898],{"class":254,"line":2716},[252,35893,32282],{"class":5356},[252,35895,308],{"class":258},[252,35897,658],{"class":311},[252,35899,269],{"class":262},[252,35901,35902,35904],{"class":254,"line":2730},[252,35903,4229],{"class":258},[252,35905,32295],{"class":262},[252,35907,35908],{"class":254,"line":2738},[252,35909,2539],{"emptyLinePlaceholder":181},[252,35911,35912],{"class":254,"line":2743},[252,35913,32304],{"class":321},[252,35915,35916],{"class":254,"line":2749},[252,35917,32309],{"class":321},[252,35919,35920],{"class":254,"line":2755},[252,35921,2539],{"emptyLinePlaceholder":181},[252,35923,35924],{"class":254,"line":2760},[252,35925,32318],{"class":321},[252,35927,35928,35930,35932],{"class":254,"line":8088},[252,35929,32087],{"class":258},[252,35931,32325],{"class":2102},[252,35933,32328],{"class":262},[252,35935,35936,35938,35940,35942,35944,35946,35948,35950,35952],{"class":254,"line":8112},[252,35937,31377],{"class":262},[252,35939,308],{"class":258},[252,35941,30591],{"class":262},[252,35943,31384],{"class":367},[252,35945,1843],{"class":258},[252,35947,31389],{"class":262},[252,35949,1840],{"class":258},[252,35951,32347],{"class":367},[252,35953,269],{"class":262},[252,35955,35956],{"class":254,"line":8117},[252,35957,2539],{"emptyLinePlaceholder":181},[252,35959,35960],{"class":254,"line":8123},[252,35961,2539],{"emptyLinePlaceholder":181},[252,35963,35964],{"class":254,"line":8150},[252,35965,32362],{"class":321},[252,35967,35968],{"class":254,"line":8155},[252,35969,32367],{"class":321},[252,35971,35972],{"class":254,"line":8161},[252,35973,32372],{"class":321},[252,35975,35976,35978,35980,35982,35984,35986,35988],{"class":254,"line":8173},[252,35977,32377],{"class":262},[252,35979,308],{"class":258},[252,35981,32382],{"class":262},[252,35983,32385],{"class":5356},[252,35985,308],{"class":258},[252,35987,32390],{"class":311},[252,35989,269],{"class":262},[252,35991,35992],{"class":254,"line":8185},[252,35993,2539],{"emptyLinePlaceholder":181},[252,35995,35996],{"class":254,"line":8197},[252,35997,32401],{"class":321},[252,35999,36000,36002,36004],{"class":254,"line":9856},[252,36001,32406],{"class":262},[252,36003,308],{"class":258},[252,36005,32411],{"class":262},[252,36007,36008],{"class":254,"line":9881},[252,36009,2539],{"emptyLinePlaceholder":181},[252,36011,36012],{"class":254,"line":9904},[252,36013,32420],{"class":321},[252,36015,36016,36018,36020],{"class":254,"line":9928},[252,36017,31429],{"class":262},[252,36019,308],{"class":258},[252,36021,32429],{"class":262},[252,36023,36024],{"class":254,"line":9933},[252,36025,32434],{"class":321},[252,36027,36028],{"class":254,"line":9938},[252,36029,32439],{"class":321},[252,36031,36032],{"class":254,"line":9943},[252,36033,32444],{"class":321},[252,36035,36036,36038,36040],{"class":254,"line":9952},[252,36037,32449],{"class":262},[252,36039,308],{"class":258},[252,36041,32454],{"class":262},[252,36043,36044],{"class":254,"line":9957},[252,36045,2539],{"emptyLinePlaceholder":181},[252,36047,36048],{"class":254,"line":9963},[252,36049,2539],{"emptyLinePlaceholder":181},[252,36051,36052],{"class":254,"line":9984},[252,36053,32467],{"class":321},[252,36055,36056],{"class":254,"line":9990},[252,36057,32472],{"class":321},[252,36059,36060,36062,36064],{"class":254,"line":10004},[252,36061,32477],{"class":262},[252,36063,308],{"class":258},[252,36065,32482],{"class":311},[252,36067,36068],{"class":254,"line":10010},[252,36069,32487],{"class":321},[252,36071,36072,36074,36076],{"class":254,"line":10037},[252,36073,32492],{"class":262},[252,36075,308],{"class":258},[252,36077,32497],{"class":262},[252,36079,36080],{"class":254,"line":10046},[252,36081,32502],{"class":321},[252,36083,36084,36086,36088],{"class":254,"line":10052},[252,36085,32507],{"class":262},[252,36087,308],{"class":258},[252,36089,32497],{"class":262},[252,36091,36092],{"class":254,"line":10060},[252,36093,32516],{"class":321},[252,36095,36096,36098,36100],{"class":254,"line":10065},[252,36097,32521],{"class":262},[252,36099,308],{"class":258},[252,36101,32497],{"class":262},[252,36103,36104],{"class":254,"line":16744},[252,36105,32530],{"class":321},[252,36107,36108,36110,36112],{"class":254,"line":16750},[252,36109,32535],{"class":262},[252,36111,308],{"class":258},[252,36113,32497],{"class":262},[252,36115,36116],{"class":254,"line":16773},[252,36117,2539],{"emptyLinePlaceholder":181},[252,36119,36120],{"class":254,"line":16779},[252,36121,32548],{"class":321},[252,36123,36124,36126,36128],{"class":254,"line":16802},[252,36125,32553],{"class":262},[252,36127,308],{"class":258},[252,36129,32558],{"class":262},[252,36131,36132],{"class":254,"line":16816},[252,36133,2539],{"emptyLinePlaceholder":181},[252,36135,36136],{"class":254,"line":16836},[252,36137,2539],{"emptyLinePlaceholder":181},[252,36139,36140],{"class":254,"line":16842},[252,36141,32571],{"class":321},[252,36143,36144,36146,36148,36150,36152],{"class":254,"line":16853},[252,36145,3340],{"class":258},[252,36147,32578],{"class":262},[252,36149,26183],{"class":258},[252,36151,32583],{"class":311},[252,36153,32586],{"class":262},[252,36155,36156,36158,36160,36162,36164,36166,36168,36170,36172,36174,36176],{"class":254,"line":16876},[252,36157,32591],{"class":311},[252,36159,263],{"class":262},[252,36161,32596],{"class":367},[252,36163,32599],{"class":311},[252,36165,847],{"class":367},[252,36167,32599],{"class":311},[252,36169,514],{"class":367},[252,36171,32608],{"class":262},[252,36173,795],{"class":258},[252,36175,480],{"class":311},[252,36177,30637],{"class":262},[252,36179,36180,36182,36184,36186,36188,36190],{"class":254,"line":16898},[252,36181,32591],{"class":311},[252,36183,263],{"class":262},[252,36185,32623],{"class":367},[252,36187,718],{"class":258},[252,36189,709],{"class":311},[252,36191,269],{"class":262},[252,36193,36194],{"class":254,"line":16903},[252,36195,2539],{"emptyLinePlaceholder":181},[252,36197,36198],{"class":254,"line":16909},[252,36199,32638],{"class":321},[252,36201,36202],{"class":254,"line":16923},[252,36203,32643],{"class":321},[252,36205,36206,36208,36210],{"class":254,"line":16936},[252,36207,32648],{"class":262},[252,36209,308],{"class":258},[252,36211,32482],{"class":311},[252,36213,36214],{"class":254,"line":16941},[252,36215,32657],{"class":321},[252,36217,36218,36220,36222],{"class":254,"line":16955},[252,36219,32662],{"class":262},[252,36221,308],{"class":258},[252,36223,3224],{"class":311},[252,36225,36226],{"class":254,"line":16960},[252,36227,32671],{"class":321},[252,36229,36230,36232,36234],{"class":254,"line":16966},[252,36231,32676],{"class":262},[252,36233,308],{"class":258},[252,36235,32482],{"class":311},[252,36237,36238],{"class":254,"line":16971},[252,36239,32685],{"class":321},[252,36241,36242,36244,36246],{"class":254,"line":16985},[252,36243,32690],{"class":262},[252,36245,308],{"class":258},[252,36247,3224],{"class":311},[252,36249,36250],{"class":254,"line":16990},[252,36251,32699],{"class":321},[252,36253,36254,36256,36258],{"class":254,"line":16995},[252,36255,32704],{"class":262},[252,36257,308],{"class":258},[252,36259,3224],{"class":311},[252,36261,36262],{"class":254,"line":17009},[252,36263,32713],{"class":321},[252,36265,36266,36268,36270],{"class":254,"line":17021},[252,36267,32718],{"class":262},[252,36269,308],{"class":258},[252,36271,3224],{"class":311},[252,36273,36274],{"class":254,"line":17026},[252,36275,32727],{"class":321},[252,36277,36278,36280,36282,36284,36286],{"class":254,"line":17039},[252,36279,3542],{"class":258},[252,36281,31741],{"class":262},[252,36283,26183],{"class":258},[252,36285,31746],{"class":311},[252,36287,32740],{"class":262},[252,36289,36290],{"class":254,"line":17044},[252,36291,32745],{"class":321},[252,36293,36294,36296,36298],{"class":254,"line":17049},[252,36295,32750],{"class":262},[252,36297,308],{"class":258},[252,36299,32755],{"class":262},[252,36301,36302],{"class":254,"line":17054},[252,36303,32760],{"class":321},[252,36305,36306,36308,36310],{"class":254,"line":17067},[252,36307,32765],{"class":262},[252,36309,308],{"class":258},[252,36311,32770],{"class":262},[252,36313,36314],{"class":254,"line":17072},[252,36315,32776],{"class":321},[252,36317,36318],{"class":254,"line":32773},[252,36319,32782],{"class":262},[252,36321,36322],{"class":254,"line":32779},[252,36323,32788],{"class":321},[252,36325,36326],{"class":254,"line":32785},[252,36327,32794],{"class":321},[252,36329,36330,36332,36334],{"class":254,"line":32791},[252,36331,32800],{"class":262},[252,36333,308],{"class":258},[252,36335,32805],{"class":262},[252,36337,36338],{"class":254,"line":32797},[252,36339,32811],{"class":321},[252,36341,36342,36344,36346,36348,36350,36352,36354],{"class":254,"line":32808},[252,36343,32817],{"class":262},[252,36345,308],{"class":258},[252,36347,32822],{"class":262},[252,36349,32825],{"class":5356},[252,36351,308],{"class":258},[252,36353,480],{"class":311},[252,36355,269],{"class":262},[252,36357,36358],{"class":254,"line":32814},[252,36359,32837],{"class":321},[252,36361,36362,36364,36366],{"class":254,"line":32834},[252,36363,32843],{"class":262},[252,36365,308],{"class":258},[252,36367,32848],{"class":262},[252,36369,36370],{"class":254,"line":32840},[252,36371,32854],{"class":321},[252,36373,36374],{"class":254,"line":32851},[252,36375,32860],{"class":262},[252,36377,36378],{"class":254,"line":32857},[252,36379,32866],{"class":321},[252,36381,36382],{"class":254,"line":32863},[252,36383,32872],{"class":262},[252,36385,36386],{"class":254,"line":32869},[252,36387,32878],{"class":321},[252,36389,36390],{"class":254,"line":32875},[252,36391,32884],{"class":262},[252,36393,36394],{"class":254,"line":32881},[252,36395,32890],{"class":321},[252,36397,36398,36400,36402,36404,36406,36408,36410],{"class":254,"line":32887},[252,36399,32896],{"class":262},[252,36401,9617],{"class":258},[252,36403,32901],{"class":262},[252,36405,718],{"class":258},[252,36407,32906],{"class":262},[252,36409,454],{"class":311},[252,36411,269],{"class":262},[252,36413,36414],{"class":254,"line":32893},[252,36415,32916],{"class":321},[252,36417,36418,36420,36422,36424,36426],{"class":254,"line":32913},[252,36419,32922],{"class":262},[252,36421,9617],{"class":258},[252,36423,32927],{"class":262},[252,36425,3088],{"class":258},[252,36427,32932],{"class":262},[252,36429,36430],{"class":254,"line":32919},[252,36431,32938],{"class":321},[252,36433,36434,36436,36438,36440,36442],{"class":254,"line":32935},[252,36435,32944],{"class":262},[252,36437,9617],{"class":258},[252,36439,32906],{"class":262},[252,36441,454],{"class":311},[252,36443,269],{"class":262},[252,36445,36446],{"class":254,"line":32941},[252,36447,32958],{"class":321},[252,36449,36450,36452,36454,36456,36458],{"class":254,"line":32955},[252,36451,3542],{"class":258},[252,36453,32966],{"class":262},[252,36455,26183],{"class":258},[252,36457,31746],{"class":311},[252,36459,32973],{"class":262},[252,36461,36462],{"class":254,"line":32961},[252,36463,32979],{"class":321},[252,36465,36466,36468,36470],{"class":254,"line":32976},[252,36467,32750],{"class":262},[252,36469,308],{"class":258},[252,36471,32755],{"class":262},[252,36473,36474],{"class":254,"line":32982},[252,36475,32994],{"class":321},[252,36477,36478,36480,36482],{"class":254,"line":32991},[252,36479,32765],{"class":262},[252,36481,308],{"class":258},[252,36483,32770],{"class":262},[252,36485,36486],{"class":254,"line":32997},[252,36487,33009],{"class":321},[252,36489,36490],{"class":254,"line":33006},[252,36491,33015],{"class":262},[252,36493,36494],{"class":254,"line":33012},[252,36495,36496],{"class":321},"            # 验证时不计算梯度以节省内存\u002F计算\n",[252,36498,36499,36501],{"class":254,"line":33018},[252,36500,33021],{"class":258},[252,36502,33024],{"class":262},[252,36504,36505],{"class":254,"line":33027},[252,36506,33030],{"class":321},[252,36508,36509,36512,36514],{"class":254,"line":33033},[252,36510,36511],{"class":262},"                output",[252,36513,308],{"class":258},[252,36515,32805],{"class":262},[252,36517,36518],{"class":254,"line":33044},[252,36519,33047],{"class":321},[252,36521,36522,36525,36527,36529,36531,36533,36535],{"class":254,"line":33050},[252,36523,36524],{"class":262},"                pre_lab",[252,36526,308],{"class":258},[252,36528,32822],{"class":262},[252,36530,32825],{"class":5356},[252,36532,308],{"class":258},[252,36534,480],{"class":311},[252,36536,269],{"class":262},[252,36538,36539],{"class":254,"line":33069},[252,36540,33072],{"class":321},[252,36542,36543,36546,36548],{"class":254,"line":33075},[252,36544,36545],{"class":262},"                val_batch_loss",[252,36547,308],{"class":258},[252,36549,32848],{"class":262},[252,36551,36552],{"class":254,"line":33086},[252,36553,33089],{"class":321},[252,36555,36556,36559,36561,36564,36566,36568,36570],{"class":254,"line":33092},[252,36557,36558],{"class":262},"                val_loss",[252,36560,9617],{"class":258},[252,36562,36563],{"class":262},"val_batch_loss.item()",[252,36565,718],{"class":258},[252,36567,32906],{"class":262},[252,36569,454],{"class":311},[252,36571,269],{"class":262},[252,36573,36574,36577,36579,36581,36583],{"class":254,"line":33112},[252,36575,36576],{"class":262},"                val_corrects",[252,36578,9617],{"class":258},[252,36580,32927],{"class":262},[252,36582,3088],{"class":258},[252,36584,32932],{"class":262},[252,36586,36587],{"class":254,"line":33128},[252,36588,36589],{"class":321},"            # 当前用于验证的样本数量\n",[252,36591,36592,36595,36597,36599,36601],{"class":254,"line":33134},[252,36593,36594],{"class":262},"            val_num",[252,36596,9617],{"class":258},[252,36598,32906],{"class":262},[252,36600,454],{"class":311},[252,36602,269],{"class":262},[252,36604,36605],{"class":254,"line":33148},[252,36606,33151],{"class":321},[252,36608,36609],{"class":254,"line":33154},[252,36610,33157],{"class":321},[252,36612,36613,36615,36617],{"class":254,"line":33160},[252,36614,33163],{"class":262},[252,36616,847],{"class":258},[252,36618,33168],{"class":262},[252,36620,36621],{"class":254,"line":33171},[252,36622,33174],{"class":321},[252,36624,36625],{"class":254,"line":33177},[252,36626,33180],{"class":321},[252,36628,36629,36631,36633],{"class":254,"line":33183},[252,36630,33186],{"class":262},[252,36632,847],{"class":258},[252,36634,33168],{"class":262},[252,36636,36637],{"class":254,"line":33193},[252,36638,33196],{"class":321},[252,36640,36641,36643,36645],{"class":254,"line":33199},[252,36642,33202],{"class":262},[252,36644,847],{"class":258},[252,36646,33207],{"class":262},[252,36648,36649],{"class":254,"line":33210},[252,36650,33213],{"class":321},[252,36652,36653,36655,36657],{"class":254,"line":33216},[252,36654,33219],{"class":262},[252,36656,847],{"class":258},[252,36658,33207],{"class":262},[252,36660,36661],{"class":254,"line":33226},[252,36662,2539],{"emptyLinePlaceholder":181},[252,36664,36665],{"class":254,"line":33231},[252,36666,33234],{"class":321},[252,36668,36669,36671,36673,36675,36677,36679,36681,36683,36685,36687,36689,36691,36693,36695,36697,36699,36701,36703,36705,36707],{"class":254,"line":33237},[252,36670,32591],{"class":311},[252,36672,263],{"class":262},[252,36674,3731],{"class":367},[252,36676,32599],{"class":311},[252,36678,33248],{"class":367},[252,36680,1159],{"class":311},[252,36682,33253],{"class":258},[252,36684,1209],{"class":311},[252,36686,33258],{"class":367},[252,36688,1159],{"class":311},[252,36690,33253],{"class":258},[252,36692,1209],{"class":311},[252,36694,3731],{"class":367},[252,36696,33269],{"class":262},[252,36698,795],{"class":258},[252,36700,480],{"class":311},[252,36702,33276],{"class":262},[252,36704,795],{"class":258},[252,36706,480],{"class":311},[252,36708,33283],{"class":262},[252,36710,36711,36713,36715,36717,36719,36721,36723,36725,36727,36729,36731,36733,36735,36737,36739,36741,36743,36745,36747,36749],{"class":254,"line":33286},[252,36712,32591],{"class":311},[252,36714,263],{"class":262},[252,36716,3731],{"class":367},[252,36718,32599],{"class":311},[252,36720,33297],{"class":367},[252,36722,1159],{"class":311},[252,36724,33253],{"class":258},[252,36726,1209],{"class":311},[252,36728,33306],{"class":367},[252,36730,1159],{"class":311},[252,36732,33253],{"class":258},[252,36734,1209],{"class":311},[252,36736,3731],{"class":367},[252,36738,33317],{"class":262},[252,36740,795],{"class":258},[252,36742,480],{"class":311},[252,36744,33324],{"class":262},[252,36746,795],{"class":258},[252,36748,480],{"class":311},[252,36750,33283],{"class":262},[252,36752,36753],{"class":254,"line":33333},[252,36754,2539],{"emptyLinePlaceholder":181},[252,36756,36757],{"class":254,"line":33338},[252,36758,33341],{"class":321},[252,36760,36761,36763,36765,36767,36769,36771,36773],{"class":254,"line":33344},[252,36762,2636],{"class":258},[252,36764,33349],{"class":262},[252,36766,795],{"class":258},[252,36768,480],{"class":311},[252,36770,1203],{"class":262},[252,36772,1223],{"class":258},[252,36774,33360],{"class":262},[252,36776,36777],{"class":254,"line":33363},[252,36778,33366],{"class":321},[252,36780,36781,36783,36785,36787,36789,36791,36793],{"class":254,"line":33369},[252,36782,33372],{"class":262},[252,36784,302],{"class":311},[252,36786,308],{"class":258},[252,36788,33379],{"class":262},[252,36790,795],{"class":258},[252,36792,480],{"class":311},[252,36794,33386],{"class":262},[252,36796,36797],{"class":254,"line":33389},[252,36798,33392],{"class":321},[252,36800,36801],{"class":254,"line":33395},[252,36802,33398],{"class":321},[252,36804,36805,36807,36809],{"class":254,"line":33401},[252,36806,33404],{"class":262},[252,36808,308],{"class":258},[252,36810,32454],{"class":262},[252,36812,36813],{"class":254,"line":33411},[252,36814,2539],{"emptyLinePlaceholder":181},[252,36816,36817],{"class":254,"line":33416},[252,36818,33419],{"class":321},[252,36820,36821,36823,36825,36827,36829],{"class":254,"line":33422},[252,36822,33425],{"class":262},[252,36824,308],{"class":258},[252,36826,33430],{"class":262},[252,36828,795],{"class":258},[252,36830,33435],{"class":262},[252,36832,36833,36835,36837,36839,36841,36843,36845,36847,36849,36851,36853,36855,36857,36859,36861,36863,36865,36867],{"class":254,"line":33438},[252,36834,32591],{"class":311},[252,36836,263],{"class":262},[252,36838,33445],{"class":367},[252,36840,1159],{"class":311},[252,36842,33450],{"class":258},[252,36844,1209],{"class":311},[252,36846,807],{"class":367},[252,36848,1159],{"class":311},[252,36850,33450],{"class":258},[252,36852,1209],{"class":311},[252,36854,33463],{"class":367},[252,36856,33466],{"class":262},[252,36858,33469],{"class":258},[252,36860,1170],{"class":311},[252,36862,33474],{"class":262},[252,36864,591],{"class":258},[252,36866,1170],{"class":311},[252,36868,30637],{"class":262},[252,36870,36871],{"class":254,"line":33483},[252,36872,36873],{"class":321},"    # 选择最优参数并保存\n",[252,36875,36876],{"class":254,"line":33489},[252,36877,36878],{"class":321},"    # 保存最佳模型权重字典\n",[252,36880,36881,36884,36886],{"class":254,"line":33495},[252,36882,36883],{"class":262},"    torch.save(best_model_wts,",[252,36885,33507],{"class":367},[252,36887,269],{"class":262},[252,36889,36890],{"class":254,"line":33501},[252,36891,33527],{"class":321},[252,36893,36894,36896,36898,36900,36902,36904],{"class":254,"line":33512},[252,36895,33533],{"class":262},[252,36897,308],{"class":258},[252,36899,33538],{"class":262},[252,36901,33541],{"class":5356},[252,36903,308],{"class":258},[252,36905,1685],{"class":262},[252,36907,36908,36910,36912,36914],{"class":254,"line":33518},[252,36909,33551],{"class":367},[252,36911,1122],{"class":262},[252,36913,33556],{"class":311},[252,36915,33559],{"class":262},[252,36917,36918,36920],{"class":254,"line":33524},[252,36919,33565],{"class":367},[252,36921,33568],{"class":262},[252,36923,36924,36926],{"class":254,"line":33530},[252,36925,33574],{"class":367},[252,36927,33577],{"class":262},[252,36929,36930,36932],{"class":254,"line":33548},[252,36931,33583],{"class":367},[252,36933,33586],{"class":262},[252,36935,36936,36938],{"class":254,"line":33562},[252,36937,33592],{"class":367},[252,36939,33595],{"class":262},[252,36941,36942],{"class":254,"line":33571},[252,36943,33601],{"class":262},[252,36945,36946],{"class":254,"line":33580},[252,36947,33607],{"class":321},[252,36949,36950,36952],{"class":254,"line":33589},[252,36951,4229],{"class":258},[252,36953,33615],{"class":262},[252,36955,36956],{"class":254,"line":33598},[252,36957,2539],{"emptyLinePlaceholder":181},[252,36959,36960],{"class":254,"line":33604},[252,36961,33626],{"class":321},[252,36963,36964,36966,36968],{"class":254,"line":33610},[252,36965,32087],{"class":258},[252,36967,33634],{"class":2102},[252,36969,33637],{"class":262},[252,36971,36972],{"class":254,"line":33618},[252,36973,33643],{"class":321},[252,36975,36976,36978,36980,36982,36984,36986,36988,36990],{"class":254,"line":33623},[252,36977,33649],{"class":262},[252,36979,31833],{"class":5356},[252,36981,308],{"class":258},[252,36983,263],{"class":262},[252,36985,761],{"class":311},[252,36987,641],{"class":262},[252,36989,556],{"class":311},[252,36991,30637],{"class":262},[252,36993,36994],{"class":254,"line":33629},[252,36995,33669],{"class":321},[252,36997,36998],{"class":254,"line":33640},[252,36999,33675],{"class":321},[252,37001,37002],{"class":254,"line":33646},[252,37003,33681],{"class":321},[252,37005,37006,37008,37010,37012,37014,37016,37018],{"class":254,"line":33666},[252,37007,31867],{"class":262},[252,37009,480],{"class":311},[252,37011,641],{"class":262},[252,37013,340],{"class":311},[252,37015,641],{"class":262},[252,37017,480],{"class":311},[252,37019,269],{"class":262},[252,37021,37022],{"class":254,"line":33672},[252,37023,33704],{"class":321},[252,37025,37026],{"class":254,"line":33678},[252,37027,33710],{"class":321},[252,37029,37030],{"class":254,"line":33684},[252,37031,33716],{"class":321},[252,37033,37034],{"class":254,"line":33701},[252,37035,33722],{"class":321},[252,37037,37038],{"class":254,"line":33707},[252,37039,33728],{"class":321},[252,37041,37042,37044,37046,37048,37050,37052,37054,37056,37058],{"class":254,"line":33713},[252,37043,33734],{"class":262},[252,37045,33737],{"class":367},[252,37047,33740],{"class":262},[252,37049,33743],{"class":367},[252,37051,641],{"class":262},[252,37053,33748],{"class":5356},[252,37055,308],{"class":258},[252,37057,33753],{"class":367},[252,37059,269],{"class":262},[252,37061,37062,37064,37066,37068,37070,37072,37074,37076,37078],{"class":254,"line":33719},[252,37063,33734],{"class":262},[252,37065,33737],{"class":367},[252,37067,33765],{"class":262},[252,37069,33768],{"class":367},[252,37071,641],{"class":262},[252,37073,33748],{"class":5356},[252,37075,308],{"class":258},[252,37077,33777],{"class":367},[252,37079,269],{"class":262},[252,37081,37082],{"class":254,"line":33725},[252,37083,33785],{"class":321},[252,37085,37086],{"class":254,"line":33731},[252,37087,33791],{"class":262},[252,37089,37090],{"class":254,"line":33758},[252,37091,33797],{"class":321},[252,37093,37094,37096,37098],{"class":254,"line":33782},[252,37095,33803],{"class":262},[252,37097,33806],{"class":367},[252,37099,269],{"class":262},[252,37101,37102,37104,37106],{"class":254,"line":33788},[252,37103,33814],{"class":262},[252,37105,33817],{"class":367},[252,37107,269],{"class":262},[252,37109,37110],{"class":254,"line":33794},[252,37111,33825],{"class":321},[252,37113,37114,37116,37118,37120,37122,37124,37126],{"class":254,"line":33800},[252,37115,31867],{"class":262},[252,37117,480],{"class":311},[252,37119,641],{"class":262},[252,37121,340],{"class":311},[252,37123,641],{"class":262},[252,37125,340],{"class":311},[252,37127,269],{"class":262},[252,37129,37130,37132,37134,37136,37138,37140,37142,37144,37146],{"class":254,"line":33811},[252,37131,33734],{"class":262},[252,37133,33737],{"class":367},[252,37135,33852],{"class":262},[252,37137,33743],{"class":367},[252,37139,641],{"class":262},[252,37141,33748],{"class":5356},[252,37143,308],{"class":258},[252,37145,33863],{"class":367},[252,37147,269],{"class":262},[252,37149,37150,37152,37154,37156,37158,37160,37162,37164,37166],{"class":254,"line":33822},[252,37151,33734],{"class":262},[252,37153,33737],{"class":367},[252,37155,33875],{"class":262},[252,37157,33768],{"class":367},[252,37159,641],{"class":262},[252,37161,33748],{"class":5356},[252,37163,308],{"class":258},[252,37165,33886],{"class":367},[252,37167,269],{"class":262},[252,37169,37170],{"class":254,"line":33828},[252,37171,33894],{"class":321},[252,37173,37174],{"class":254,"line":33845},[252,37175,33791],{"class":262},[252,37177,37178,37180,37182],{"class":254,"line":33868},[252,37179,33803],{"class":262},[252,37181,33737],{"class":367},[252,37183,269],{"class":262},[252,37185,37186,37188,37190],{"class":254,"line":33891},[252,37187,33814],{"class":262},[252,37189,33916],{"class":367},[252,37191,269],{"class":262},[252,37193,37194],{"class":254,"line":33897},[252,37195,33924],{"class":262},[252,37197,37198],{"class":254,"line":33902},[252,37199,2539],{"emptyLinePlaceholder":181},[252,37201,37202],{"class":254,"line":33911},[252,37203,33935],{"class":321},[252,37205,37206,37208,37210,37212,37214],{"class":254,"line":33921},[252,37207,1670],{"class":258},[252,37209,31360],{"class":311},[252,37211,3088],{"class":258},[252,37213,31365],{"class":367},[252,37215,3878],{"class":262},[252,37217,37218],{"class":254,"line":33927},[252,37219,33954],{"class":321},[252,37221,37222,37225,37227],{"class":254,"line":33932},[252,37223,37224],{"class":262},"    AlexNet",[252,37226,308],{"class":258},[252,37228,37229],{"class":262},"AlexNet()\n",[252,37231,37232,37234,37236],{"class":254,"line":33938},[252,37233,33971],{"class":262},[252,37235,308],{"class":258},[252,37237,33976],{"class":262},[252,37239,37240,37242,37244,37247,37249,37251,37253],{"class":254,"line":33951},[252,37241,33533],{"class":262},[252,37243,308],{"class":258},[252,37245,37246],{"class":262},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[252,37248,33989],{"class":5356},[252,37250,308],{"class":258},[252,37252,963],{"class":311},[252,37254,269],{"class":262},[252,37256,37257],{"class":254,"line":33957},[252,37258,34001],{"class":262},[207,37260,37261],{"start":1318},[210,37262,34014],{},[244,37264,37266],{"className":30518,"code":37265,"language":30520,"meta":169,"style":169},"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",[22,37267,37268,37274,37284,37294,37304,37308,37318,37328,37339,37343,37347,37351,37359,37375,37385,37401,37411,37425,37429,37439,37449,37459,37465,37469,37473,37481,37485,37501,37509,37513,37517,37525,37533,37537,37541,37545,37549,37555,37559,37569,37577,37585,37589,37593,37597,37605,37609,37625,37629,37633,37637,37649,37653,37665,37669,37673,37685,37689,37699,37703,37707,37719,37723,37731,37735,37739,37747,37751,37759,37763,37767,37771,37775,37779,37795,37803,37807,37811,37859,37865,37869,37879,37887,37895,37899,37903,37907,37911,37919,37923,37939,37943,37951,37959],{"__ignoreMap":169},[252,37269,37270,37272],{"class":254,"line":255},[252,37271,30532],{"class":258},[252,37273,30535],{"class":262},[252,37275,37276,37278,37280,37282],{"class":254,"line":170},[252,37277,30532],{"class":258},[252,37279,31555],{"class":262},[252,37281,31523],{"class":258},[252,37283,31560],{"class":262},[252,37285,37286,37288,37290,37292],{"class":254,"line":1318},[252,37287,30877],{"class":258},[252,37289,34042],{"class":262},[252,37291,30532],{"class":258},[252,37293,34047],{"class":262},[252,37295,37296,37298,37300,37302],{"class":254,"line":1333},[252,37297,30877],{"class":258},[252,37299,31538],{"class":262},[252,37301,30532],{"class":258},[252,37303,31543],{"class":262},[252,37305,37306],{"class":254,"line":1339},[252,37307,34062],{"class":321},[252,37309,37310,37312,37314,37316],{"class":254,"line":1353},[252,37311,30877],{"class":258},[252,37313,31508],{"class":262},[252,37315,30532],{"class":258},[252,37317,31513],{"class":262},[252,37319,37320,37322,37324,37326],{"class":254,"line":1359},[252,37321,30877],{"class":258},[252,37323,32054],{"class":262},[252,37325,30532],{"class":258},[252,37327,35697],{"class":262},[252,37329,37330,37332,37335,37337],{"class":254,"line":1450},[252,37331,30877],{"class":258},[252,37333,37334],{"class":262}," 练习.AlexNet.model ",[252,37336,30532],{"class":258},[252,37338,35697],{"class":262},[252,37340,37341],{"class":254,"line":1456},[252,37342,2539],{"emptyLinePlaceholder":181},[252,37344,37345],{"class":254,"line":1468},[252,37346,2539],{"emptyLinePlaceholder":181},[252,37348,37349],{"class":254,"line":1751},[252,37350,34091],{"class":321},[252,37352,37353,37355,37357],{"class":254,"line":1756},[252,37354,32087],{"class":258},[252,37356,34098],{"class":2102},[252,37358,32093],{"class":262},[252,37360,37361,37363,37365,37367,37369,37371,37373],{"class":254,"line":1762},[252,37362,34105],{"class":262},[252,37364,308],{"class":258},[252,37366,31595],{"class":262},[252,37368,31598],{"class":5356},[252,37370,308],{"class":258},[252,37372,31603],{"class":367},[252,37374,31606],{"class":262},[252,37376,37377,37379,37381,37383],{"class":254,"line":1767},[252,37378,34122],{"class":5356},[252,37380,308],{"class":258},[252,37382,34127],{"class":311},[252,37384,31606],{"class":262},[252,37386,37387,37389,37391,37393,37395,37397,37399],{"class":254,"line":1781},[252,37388,34134],{"class":5356},[252,37390,308],{"class":258},[252,37392,31633],{"class":262},[252,37394,31636],{"class":5356},[252,37396,308],{"class":258},[252,37398,35589],{"class":311},[252,37400,31644],{"class":262},[252,37402,37403,37405,37407,37409],{"class":254,"line":1786},[252,37404,34151],{"class":5356},[252,37406,308],{"class":258},[252,37408,31616],{"class":311},[252,37410,269],{"class":262},[252,37412,37413,37415,37417,37419,37421,37423],{"class":254,"line":1792},[252,37414,34162],{"class":262},[252,37416,308],{"class":258},[252,37418,31674],{"class":262},[252,37420,31677],{"class":5356},[252,37422,308],{"class":258},[252,37424,34173],{"class":262},[252,37426,37427],{"class":254,"line":1813},[252,37428,34178],{"class":321},[252,37430,37431,37433,37435,37437],{"class":254,"line":1818},[252,37432,34183],{"class":5356},[252,37434,308],{"class":258},[252,37436,480],{"class":311},[252,37438,31606],{"class":262},[252,37440,37441,37443,37445,37447],{"class":254,"line":1832},[252,37442,34194],{"class":5356},[252,37444,308],{"class":258},[252,37446,31616],{"class":311},[252,37448,31606],{"class":262},[252,37450,37451,37453,37455,37457],{"class":254,"line":1837},[252,37452,34205],{"class":5356},[252,37454,308],{"class":258},[252,37456,454],{"class":311},[252,37458,269],{"class":262},[252,37460,37461,37463],{"class":254,"line":1866},[252,37462,4229],{"class":258},[252,37464,34218],{"class":262},[252,37466,37467],{"class":254,"line":1871},[252,37468,2539],{"emptyLinePlaceholder":181},[252,37470,37471],{"class":254,"line":1888},[252,37472,34227],{"class":321},[252,37474,37475,37477,37479],{"class":254,"line":1893},[252,37476,32087],{"class":258},[252,37478,34234],{"class":2102},[252,37480,34237],{"class":262},[252,37482,37483],{"class":254,"line":1898},[252,37484,34242],{"class":321},[252,37486,37487,37489,37491,37493,37495,37497,37499],{"class":254,"line":1903},[252,37488,31377],{"class":262},[252,37490,308],{"class":258},[252,37492,31384],{"class":367},[252,37494,1843],{"class":258},[252,37496,31389],{"class":262},[252,37498,1840],{"class":258},[252,37500,34259],{"class":367},[252,37502,37503,37505,37507],{"class":254,"line":1917},[252,37504,31429],{"class":262},[252,37506,308],{"class":258},[252,37508,32429],{"class":262},[252,37510,37511],{"class":254,"line":1922},[252,37512,2539],{"emptyLinePlaceholder":181},[252,37514,37515],{"class":254,"line":2716},[252,37516,34276],{"class":321},[252,37518,37519,37521,37523],{"class":254,"line":2730},[252,37520,34281],{"class":262},[252,37522,308],{"class":258},[252,37524,32482],{"class":311},[252,37526,37527,37529,37531],{"class":254,"line":2738},[252,37528,34290],{"class":262},[252,37530,308],{"class":258},[252,37532,3224],{"class":311},[252,37534,37535],{"class":254,"line":2743},[252,37536,2539],{"emptyLinePlaceholder":181},[252,37538,37539],{"class":254,"line":2749},[252,37540,34303],{"class":321},[252,37542,37543],{"class":254,"line":2755},[252,37544,34308],{"class":321},[252,37546,37547],{"class":254,"line":2760},[252,37548,34313],{"class":321},[252,37550,37551,37553],{"class":254,"line":8088},[252,37552,34318],{"class":258},[252,37554,33024],{"class":262},[252,37556,37557],{"class":254,"line":8112},[252,37558,34325],{"class":321},[252,37560,37561,37563,37565,37567],{"class":254,"line":8117},[252,37562,3542],{"class":258},[252,37564,34332],{"class":262},[252,37566,26183],{"class":258},[252,37568,34337],{"class":262},[252,37570,37571,37573,37575],{"class":254,"line":8123},[252,37572,34342],{"class":262},[252,37574,308],{"class":258},[252,37576,34347],{"class":262},[252,37578,37579,37581,37583],{"class":254,"line":8150},[252,37580,34352],{"class":262},[252,37582,308],{"class":258},[252,37584,34357],{"class":262},[252,37586,37587],{"class":254,"line":8155},[252,37588,34362],{"class":321},[252,37590,37591],{"class":254,"line":8161},[252,37592,33015],{"class":262},[252,37594,37595],{"class":254,"line":8173},[252,37596,34371],{"class":321},[252,37598,37599,37601,37603],{"class":254,"line":8185},[252,37600,32800],{"class":262},[252,37602,308],{"class":258},[252,37604,34380],{"class":262},[252,37606,37607],{"class":254,"line":8197},[252,37608,34385],{"class":321},[252,37610,37611,37613,37615,37617,37619,37621,37623],{"class":254,"line":9856},[252,37612,32817],{"class":262},[252,37614,308],{"class":258},[252,37616,32822],{"class":262},[252,37618,32825],{"class":5356},[252,37620,308],{"class":258},[252,37622,480],{"class":311},[252,37624,269],{"class":262},[252,37626,37627],{"class":254,"line":9881},[252,37628,34406],{"class":321},[252,37630,37631],{"class":254,"line":9904},[252,37632,34411],{"class":321},[252,37634,37635],{"class":254,"line":9928},[252,37636,34416],{"class":321},[252,37638,37639,37641,37643,37645,37647],{"class":254,"line":9933},[252,37640,34421],{"class":262},[252,37642,9617],{"class":258},[252,37644,32927],{"class":262},[252,37646,3088],{"class":258},[252,37648,34430],{"class":262},[252,37650,37651],{"class":254,"line":9938},[252,37652,34435],{"class":321},[252,37654,37655,37657,37659,37661,37663],{"class":254,"line":9943},[252,37656,34440],{"class":262},[252,37658,9617],{"class":258},[252,37660,34445],{"class":262},[252,37662,454],{"class":311},[252,37664,269],{"class":262},[252,37666,37667],{"class":254,"line":9952},[252,37668,2539],{"emptyLinePlaceholder":181},[252,37670,37671],{"class":254,"line":9957},[252,37672,34458],{"class":321},[252,37674,37675,37677,37679,37681,37683],{"class":254,"line":9963},[252,37676,34463],{"class":262},[252,37678,308],{"class":258},[252,37680,34468],{"class":262},[252,37682,847],{"class":258},[252,37684,34473],{"class":262},[252,37686,37687],{"class":254,"line":9984},[252,37688,34478],{"class":321},[252,37690,37691,37693,37695,37697],{"class":254,"line":9990},[252,37692,32591],{"class":311},[252,37694,263],{"class":262},[252,37696,34487],{"class":367},[252,37698,34490],{"class":262},[252,37700,37701],{"class":254,"line":10004},[252,37702,2539],{"emptyLinePlaceholder":181},[252,37704,37705],{"class":254,"line":10010},[252,37706,34499],{"class":321},[252,37708,37709,37711,37713,37715,37717],{"class":254,"line":10037},[252,37710,1670],{"class":258},[252,37712,31360],{"class":311},[252,37714,3088],{"class":258},[252,37716,31365],{"class":367},[252,37718,3878],{"class":262},[252,37720,37721],{"class":254,"line":10046},[252,37722,34516],{"class":321},[252,37724,37725,37727,37729],{"class":254,"line":10052},[252,37726,31429],{"class":262},[252,37728,308],{"class":258},[252,37730,37229],{"class":262},[252,37732,37733],{"class":254,"line":10060},[252,37734,34529],{"class":321},[252,37736,37737],{"class":254,"line":10065},[252,37738,34534],{"class":321},[252,37740,37741,37743,37745],{"class":254,"line":16744},[252,37742,34539],{"class":262},[252,37744,34542],{"class":367},[252,37746,30637],{"class":262},[252,37748,37749],{"class":254,"line":16750},[252,37750,34549],{"class":321},[252,37752,37753,37755,37757],{"class":254,"line":16773},[252,37754,34162],{"class":262},[252,37756,308],{"class":258},[252,37758,34558],{"class":262},[252,37760,37761],{"class":254,"line":16779},[252,37762,34563],{"class":321},[252,37764,37765],{"class":254,"line":16802},[252,37766,34568],{"class":262},[252,37768,37769],{"class":254,"line":16816},[252,37770,2539],{"emptyLinePlaceholder":181},[252,37772,37773],{"class":254,"line":16836},[252,37774,34577],{"class":321},[252,37776,37777],{"class":254,"line":16842},[252,37778,34582],{"class":321},[252,37780,37781,37783,37785,37787,37789,37791,37793],{"class":254,"line":16853},[252,37782,31377],{"class":262},[252,37784,308],{"class":258},[252,37786,31384],{"class":367},[252,37788,1843],{"class":258},[252,37790,31389],{"class":262},[252,37792,1840],{"class":258},[252,37794,34259],{"class":367},[252,37796,37797,37799,37801],{"class":254,"line":16876},[252,37798,31429],{"class":262},[252,37800,308],{"class":258},[252,37802,32429],{"class":262},[252,37804,37805],{"class":254,"line":16898},[252,37806,34611],{"class":321},[252,37808,37809],{"class":254,"line":16903},[252,37810,34616],{"class":321},[252,37812,37813,37815,37817,37819,37821,37823,37825,37827,37829,37831,37833,37835,37837,37839,37841,37843,37845,37847,37849,37851,37853,37855,37857],{"class":254,"line":16909},[252,37814,34621],{"class":262},[252,37816,308],{"class":258},[252,37818,1153],{"class":262},[252,37820,34628],{"class":367},[252,37822,641],{"class":262},[252,37824,34633],{"class":367},[252,37826,641],{"class":262},[252,37828,34638],{"class":367},[252,37830,641],{"class":262},[252,37832,34643],{"class":367},[252,37834,641],{"class":262},[252,37836,34648],{"class":367},[252,37838,641],{"class":262},[252,37840,34653],{"class":367},[252,37842,641],{"class":262},[252,37844,34658],{"class":367},[252,37846,641],{"class":262},[252,37848,34663],{"class":367},[252,37850,641],{"class":262},[252,37852,34668],{"class":367},[252,37854,641],{"class":262},[252,37856,34673],{"class":367},[252,37858,33386],{"class":262},[252,37860,37861,37863],{"class":254,"line":16923},[252,37862,34318],{"class":258},[252,37864,33024],{"class":262},[252,37866,37867],{"class":254,"line":16936},[252,37868,34686],{"class":321},[252,37870,37871,37873,37875,37877],{"class":254,"line":16941},[252,37872,3542],{"class":258},[252,37874,34693],{"class":262},[252,37876,26183],{"class":258},[252,37878,34337],{"class":262},[252,37880,37881,37883,37885],{"class":254,"line":16955},[252,37882,32750],{"class":262},[252,37884,308],{"class":258},[252,37886,32755],{"class":262},[252,37888,37889,37891,37893],{"class":254,"line":16960},[252,37890,32765],{"class":262},[252,37892,308],{"class":258},[252,37894,32770],{"class":262},[252,37896,37897],{"class":254,"line":16966},[252,37898,2539],{"emptyLinePlaceholder":181},[252,37900,37901],{"class":254,"line":16971},[252,37902,34722],{"class":321},[252,37904,37905],{"class":254,"line":16985},[252,37906,33015],{"class":262},[252,37908,37909],{"class":254,"line":16990},[252,37910,34731],{"class":321},[252,37912,37913,37915,37917],{"class":254,"line":16995},[252,37914,32800],{"class":262},[252,37916,308],{"class":258},[252,37918,32805],{"class":262},[252,37920,37921],{"class":254,"line":17009},[252,37922,34744],{"class":321},[252,37924,37925,37927,37929,37931,37933,37935,37937],{"class":254,"line":17021},[252,37926,32817],{"class":262},[252,37928,308],{"class":258},[252,37930,32822],{"class":262},[252,37932,32825],{"class":5356},[252,37934,308],{"class":258},[252,37936,480],{"class":311},[252,37938,269],{"class":262},[252,37940,37941],{"class":254,"line":17026},[252,37942,34765],{"class":321},[252,37944,37945,37947,37949],{"class":254,"line":17039},[252,37946,34770],{"class":262},[252,37948,308],{"class":258},[252,37950,34775],{"class":262},[252,37952,37953,37955,37957],{"class":254,"line":17044},[252,37954,34780],{"class":262},[252,37956,308],{"class":258},[252,37958,34785],{"class":262},[252,37960,37961,37963,37965,37967,37969,37971,37973,37975],{"class":254,"line":17049},[252,37962,34790],{"class":311},[252,37964,263],{"class":262},[252,37966,34795],{"class":367},[252,37968,34798],{"class":262},[252,37970,34801],{"class":367},[252,37972,641],{"class":262},[252,37974,34806],{"class":367},[252,37976,34809],{"class":262},[224,37978,37980],{"id":37979},"_22vgg","2.2.VGG",[22137,37982,37984],{"id":37983},"_221原理","2.2.1.原理",[19,37986,37987],{},[1601,37988],{"alt":169,"src":37989},"\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",[19,37991,37992],{},[1601,37993],{"alt":169,"src":37994},"\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",[19,37996,37997],{},[1601,37998],{"alt":169,"src":37999},"\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",[19,38001,38002],{},"参数详细描述：",[19,38004,38005],{},[1601,38006],{"alt":169,"src":38007},"\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",[19,38009,38010],{},[1601,38011],{"alt":169,"src":38012},"\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",[19,38014,38015],{},[1601,38016],{"alt":169,"src":38017},"\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",[19,38019,38020],{},[1601,38021],{"alt":169,"src":38022},"\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",[19,38024,38025],{},[1601,38026],{"alt":169,"src":38027},"\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",[22137,38029,38031],{"id":38030},"_222代码实现","2.2.2.代码实现",[207,38033,38034],{},[210,38035,38036],{},"网络搭建",[244,38038,38040],{"className":30518,"code":38039,"language":30520,"meta":169,"style":169},"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",[22,38041,38042,38048,38060,38070,38080,38084,38101,38109,38128,38133,38138,38150,38188,38193,38229,38233,38262,38267,38272,38283,38319,38323,38359,38363,38391,38395,38400,38411,38447,38451,38487,38491,38527,38531,38559,38563,38568,38579,38616,38620,38656,38660,38696,38700,38728,38732,38737,38748,38784,38788,38824,38828,38864,38868,38896,38900,38905,38916,38921,38926,38931,38952,38956,38968,38972,38984,38988,38992,38997,39002,39017,39022,39032,39037,39052,39057,39076,39081,39090,39095,39105,39110,39115,39129,39134,39148,39156,39160,39164,39172,39183,39194,39205,39216,39227,39238,39244,39248,39253,39266,39286,39292,39301],{"__ignoreMap":169},[252,38043,38044,38046],{"class":254,"line":255},[252,38045,30532],{"class":258},[252,38047,30535],{"class":262},[252,38049,38050,38052,38055,38057],{"class":254,"line":170},[252,38051,30877],{"class":258},[252,38053,38054],{"class":262}," sympy.core.sympify ",[252,38056,30532],{"class":258},[252,38058,38059],{"class":262}," kernS\n",[252,38061,38062,38064,38066,38068],{"class":254,"line":1318},[252,38063,30877],{"class":258},[252,38065,30880],{"class":262},[252,38067,30532],{"class":258},[252,38069,30885],{"class":262},[252,38071,38072,38074,38076,38078],{"class":254,"line":1333},[252,38073,30877],{"class":258},[252,38075,30897],{"class":262},[252,38077,30532],{"class":258},[252,38079,30902],{"class":262},[252,38081,38082],{"class":254,"line":1339},[252,38083,2539],{"emptyLinePlaceholder":181},[252,38085,38086,38088,38091,38093,38095,38097,38099],{"class":254,"line":1353},[252,38087,14834],{"class":258},[252,38089,38090],{"class":2102}," VGG16",[252,38092,263],{"class":262},[252,38094,30918],{"class":2102},[252,38096,821],{"class":262},[252,38098,30923],{"class":2102},[252,38100,30926],{"class":262},[252,38102,38103,38105,38107],{"class":254,"line":1359},[252,38104,30941],{"class":258},[252,38106,30944],{"class":311},[252,38108,30947],{"class":262},[252,38110,38111,38113,38115,38118,38120,38122,38124,38126],{"class":254,"line":1450},[252,38112,30957],{"class":311},[252,38114,263],{"class":262},[252,38116,38117],{"class":311},"VGG16",[252,38119,12575],{"class":262},[252,38121,30963],{"class":311},[252,38123,30966],{"class":262},[252,38125,30969],{"class":311},[252,38127,2115],{"class":262},[252,38129,38130],{"class":254,"line":1456},[252,38131,38132],{"class":321},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[252,38134,38135],{"class":254,"line":1468},[252,38136,38137],{"class":321},"        # 这里用的是灰度图\n",[252,38139,38140,38142,38145,38147],{"class":254,"line":1751},[252,38141,30985],{"class":311},[252,38143,38144],{"class":262},".block1",[252,38146,308],{"class":258},[252,38148,38149],{"class":262},"nn.Sequential(\n",[252,38151,38152,38155,38157,38159,38161,38163,38165,38167,38169,38171,38173,38175,38177,38179,38181,38183,38185],{"class":254,"line":1756},[252,38153,38154],{"class":262},"            nn.Conv2d(",[252,38156,30996],{"class":5356},[252,38158,308],{"class":258},[252,38160,480],{"class":311},[252,38162,641],{"class":262},[252,38164,31005],{"class":5356},[252,38166,308],{"class":258},[252,38168,466],{"class":311},[252,38170,641],{"class":262},[252,38172,31014],{"class":5356},[252,38174,308],{"class":258},[252,38176,334],{"class":311},[252,38178,641],{"class":262},[252,38180,31023],{"class":5356},[252,38182,308],{"class":258},[252,38184,480],{"class":311},[252,38186,38187],{"class":262},"),\n",[252,38189,38190],{"class":254,"line":1762},[252,38191,38192],{"class":262},"            nn.ReLU(),\n",[252,38194,38195,38197,38199,38201,38203,38205,38207,38209,38211,38213,38215,38217,38219,38221,38223,38225,38227],{"class":254,"line":1767},[252,38196,38154],{"class":262},[252,38198,30996],{"class":5356},[252,38200,308],{"class":258},[252,38202,466],{"class":311},[252,38204,641],{"class":262},[252,38206,31005],{"class":5356},[252,38208,308],{"class":258},[252,38210,466],{"class":311},[252,38212,641],{"class":262},[252,38214,31014],{"class":5356},[252,38216,308],{"class":258},[252,38218,334],{"class":311},[252,38220,641],{"class":262},[252,38222,31023],{"class":5356},[252,38224,308],{"class":258},[252,38226,480],{"class":311},[252,38228,38187],{"class":262},[252,38230,38231],{"class":254,"line":1781},[252,38232,38192],{"class":262},[252,38234,38235,38238,38240,38242,38244,38246,38248,38250,38252,38254,38256,38258,38260],{"class":254,"line":1786},[252,38236,38237],{"class":262},"            nn.MaxPool2d(",[252,38239,31014],{"class":5356},[252,38241,308],{"class":258},[252,38243,340],{"class":311},[252,38245,641],{"class":262},[252,38247,31069],{"class":5356},[252,38249,308],{"class":258},[252,38251,340],{"class":311},[252,38253,641],{"class":262},[252,38255,31023],{"class":5356},[252,38257,308],{"class":258},[252,38259,454],{"class":311},[252,38261,269],{"class":262},[252,38263,38264],{"class":254,"line":1792},[252,38265,38266],{"class":262},"        )\n",[252,38268,38269],{"class":254,"line":1813},[252,38270,38271],{"class":321},"        # 第二层\n",[252,38273,38274,38276,38279,38281],{"class":254,"line":1818},[252,38275,30985],{"class":311},[252,38277,38278],{"class":262},".block2",[252,38280,308],{"class":258},[252,38282,38149],{"class":262},[252,38284,38285,38287,38289,38291,38293,38295,38297,38299,38301,38303,38305,38307,38309,38311,38313,38315,38317],{"class":254,"line":1832},[252,38286,38154],{"class":262},[252,38288,30996],{"class":5356},[252,38290,308],{"class":258},[252,38292,466],{"class":311},[252,38294,641],{"class":262},[252,38296,31005],{"class":5356},[252,38298,308],{"class":258},[252,38300,32210],{"class":311},[252,38302,641],{"class":262},[252,38304,31014],{"class":5356},[252,38306,308],{"class":258},[252,38308,334],{"class":311},[252,38310,641],{"class":262},[252,38312,31023],{"class":5356},[252,38314,308],{"class":258},[252,38316,480],{"class":311},[252,38318,38187],{"class":262},[252,38320,38321],{"class":254,"line":1837},[252,38322,38192],{"class":262},[252,38324,38325,38327,38329,38331,38333,38335,38337,38339,38341,38343,38345,38347,38349,38351,38353,38355,38357],{"class":254,"line":1866},[252,38326,38154],{"class":262},[252,38328,30996],{"class":5356},[252,38330,308],{"class":258},[252,38332,32210],{"class":311},[252,38334,641],{"class":262},[252,38336,31005],{"class":5356},[252,38338,308],{"class":258},[252,38340,32210],{"class":311},[252,38342,641],{"class":262},[252,38344,31014],{"class":5356},[252,38346,308],{"class":258},[252,38348,334],{"class":311},[252,38350,641],{"class":262},[252,38352,31023],{"class":5356},[252,38354,308],{"class":258},[252,38356,480],{"class":311},[252,38358,38187],{"class":262},[252,38360,38361],{"class":254,"line":1871},[252,38362,38192],{"class":262},[252,38364,38365,38367,38369,38371,38373,38375,38377,38379,38381,38383,38385,38387,38389],{"class":254,"line":1888},[252,38366,38237],{"class":262},[252,38368,31014],{"class":5356},[252,38370,308],{"class":258},[252,38372,340],{"class":311},[252,38374,641],{"class":262},[252,38376,31069],{"class":5356},[252,38378,308],{"class":258},[252,38380,340],{"class":311},[252,38382,641],{"class":262},[252,38384,31023],{"class":5356},[252,38386,308],{"class":258},[252,38388,454],{"class":311},[252,38390,269],{"class":262},[252,38392,38393],{"class":254,"line":1893},[252,38394,38266],{"class":262},[252,38396,38397],{"class":254,"line":1898},[252,38398,38399],{"class":321},"        # 第三层\n",[252,38401,38402,38404,38407,38409],{"class":254,"line":1903},[252,38403,30985],{"class":311},[252,38405,38406],{"class":262},".block3",[252,38408,308],{"class":258},[252,38410,38149],{"class":262},[252,38412,38413,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433,38435,38437,38439,38441,38443,38445],{"class":254,"line":1917},[252,38414,38154],{"class":262},[252,38416,30996],{"class":5356},[252,38418,308],{"class":258},[252,38420,32210],{"class":311},[252,38422,641],{"class":262},[252,38424,31005],{"class":5356},[252,38426,308],{"class":258},[252,38428,35010],{"class":311},[252,38430,641],{"class":262},[252,38432,31014],{"class":5356},[252,38434,308],{"class":258},[252,38436,334],{"class":311},[252,38438,641],{"class":262},[252,38440,31023],{"class":5356},[252,38442,308],{"class":258},[252,38444,480],{"class":311},[252,38446,38187],{"class":262},[252,38448,38449],{"class":254,"line":1922},[252,38450,38192],{"class":262},[252,38452,38453,38455,38457,38459,38461,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485],{"class":254,"line":2716},[252,38454,38154],{"class":262},[252,38456,30996],{"class":5356},[252,38458,308],{"class":258},[252,38460,35010],{"class":311},[252,38462,641],{"class":262},[252,38464,31005],{"class":5356},[252,38466,308],{"class":258},[252,38468,35010],{"class":311},[252,38470,641],{"class":262},[252,38472,31014],{"class":5356},[252,38474,308],{"class":258},[252,38476,334],{"class":311},[252,38478,641],{"class":262},[252,38480,31023],{"class":5356},[252,38482,308],{"class":258},[252,38484,480],{"class":311},[252,38486,38187],{"class":262},[252,38488,38489],{"class":254,"line":2730},[252,38490,38192],{"class":262},[252,38492,38493,38495,38497,38499,38501,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525],{"class":254,"line":2738},[252,38494,38154],{"class":262},[252,38496,30996],{"class":5356},[252,38498,308],{"class":258},[252,38500,35010],{"class":311},[252,38502,641],{"class":262},[252,38504,31005],{"class":5356},[252,38506,308],{"class":258},[252,38508,35010],{"class":311},[252,38510,641],{"class":262},[252,38512,31014],{"class":5356},[252,38514,308],{"class":258},[252,38516,334],{"class":311},[252,38518,641],{"class":262},[252,38520,31023],{"class":5356},[252,38522,308],{"class":258},[252,38524,480],{"class":311},[252,38526,38187],{"class":262},[252,38528,38529],{"class":254,"line":2743},[252,38530,38192],{"class":262},[252,38532,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555,38557],{"class":254,"line":2749},[252,38534,38237],{"class":262},[252,38536,31014],{"class":5356},[252,38538,308],{"class":258},[252,38540,340],{"class":311},[252,38542,641],{"class":262},[252,38544,31069],{"class":5356},[252,38546,308],{"class":258},[252,38548,340],{"class":311},[252,38550,641],{"class":262},[252,38552,31023],{"class":5356},[252,38554,308],{"class":258},[252,38556,454],{"class":311},[252,38558,269],{"class":262},[252,38560,38561],{"class":254,"line":2755},[252,38562,38266],{"class":262},[252,38564,38565],{"class":254,"line":2760},[252,38566,38567],{"class":321},"        # 第四层\n",[252,38569,38570,38572,38575,38577],{"class":254,"line":8088},[252,38571,30985],{"class":311},[252,38573,38574],{"class":262},".block4",[252,38576,308],{"class":258},[252,38578,38149],{"class":262},[252,38580,38581,38583,38585,38587,38589,38591,38593,38595,38598,38600,38602,38604,38606,38608,38610,38612,38614],{"class":254,"line":8112},[252,38582,38154],{"class":262},[252,38584,30996],{"class":5356},[252,38586,308],{"class":258},[252,38588,35010],{"class":311},[252,38590,641],{"class":262},[252,38592,31005],{"class":5356},[252,38594,308],{"class":258},[252,38596,38597],{"class":311},"512",[252,38599,641],{"class":262},[252,38601,31014],{"class":5356},[252,38603,308],{"class":258},[252,38605,334],{"class":311},[252,38607,641],{"class":262},[252,38609,31023],{"class":5356},[252,38611,308],{"class":258},[252,38613,480],{"class":311},[252,38615,38187],{"class":262},[252,38617,38618],{"class":254,"line":8117},[252,38619,38192],{"class":262},[252,38621,38622,38624,38626,38628,38630,38632,38634,38636,38638,38640,38642,38644,38646,38648,38650,38652,38654],{"class":254,"line":8123},[252,38623,38154],{"class":262},[252,38625,30996],{"class":5356},[252,38627,308],{"class":258},[252,38629,38597],{"class":311},[252,38631,641],{"class":262},[252,38633,31005],{"class":5356},[252,38635,308],{"class":258},[252,38637,38597],{"class":311},[252,38639,641],{"class":262},[252,38641,31014],{"class":5356},[252,38643,308],{"class":258},[252,38645,334],{"class":311},[252,38647,641],{"class":262},[252,38649,31023],{"class":5356},[252,38651,308],{"class":258},[252,38653,480],{"class":311},[252,38655,38187],{"class":262},[252,38657,38658],{"class":254,"line":8150},[252,38659,38192],{"class":262},[252,38661,38662,38664,38666,38668,38670,38672,38674,38676,38678,38680,38682,38684,38686,38688,38690,38692,38694],{"class":254,"line":8155},[252,38663,38154],{"class":262},[252,38665,30996],{"class":5356},[252,38667,308],{"class":258},[252,38669,38597],{"class":311},[252,38671,641],{"class":262},[252,38673,31005],{"class":5356},[252,38675,308],{"class":258},[252,38677,38597],{"class":311},[252,38679,641],{"class":262},[252,38681,31014],{"class":5356},[252,38683,308],{"class":258},[252,38685,334],{"class":311},[252,38687,641],{"class":262},[252,38689,31023],{"class":5356},[252,38691,308],{"class":258},[252,38693,480],{"class":311},[252,38695,38187],{"class":262},[252,38697,38698],{"class":254,"line":8161},[252,38699,38192],{"class":262},[252,38701,38702,38704,38706,38708,38710,38712,38714,38716,38718,38720,38722,38724,38726],{"class":254,"line":8173},[252,38703,38237],{"class":262},[252,38705,31014],{"class":5356},[252,38707,308],{"class":258},[252,38709,340],{"class":311},[252,38711,641],{"class":262},[252,38713,31069],{"class":5356},[252,38715,308],{"class":258},[252,38717,340],{"class":311},[252,38719,641],{"class":262},[252,38721,31023],{"class":5356},[252,38723,308],{"class":258},[252,38725,454],{"class":311},[252,38727,269],{"class":262},[252,38729,38730],{"class":254,"line":8185},[252,38731,38266],{"class":262},[252,38733,38734],{"class":254,"line":8197},[252,38735,38736],{"class":321},"        # 第五层\n",[252,38738,38739,38741,38744,38746],{"class":254,"line":9856},[252,38740,30985],{"class":311},[252,38742,38743],{"class":262},".block5",[252,38745,308],{"class":258},[252,38747,38149],{"class":262},[252,38749,38750,38752,38754,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776,38778,38780,38782],{"class":254,"line":9881},[252,38751,38154],{"class":262},[252,38753,30996],{"class":5356},[252,38755,308],{"class":258},[252,38757,38597],{"class":311},[252,38759,641],{"class":262},[252,38761,31005],{"class":5356},[252,38763,308],{"class":258},[252,38765,38597],{"class":311},[252,38767,641],{"class":262},[252,38769,31014],{"class":5356},[252,38771,308],{"class":258},[252,38773,334],{"class":311},[252,38775,641],{"class":262},[252,38777,31023],{"class":5356},[252,38779,308],{"class":258},[252,38781,480],{"class":311},[252,38783,38187],{"class":262},[252,38785,38786],{"class":254,"line":9904},[252,38787,38192],{"class":262},[252,38789,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808,38810,38812,38814,38816,38818,38820,38822],{"class":254,"line":9928},[252,38791,38154],{"class":262},[252,38793,30996],{"class":5356},[252,38795,308],{"class":258},[252,38797,38597],{"class":311},[252,38799,641],{"class":262},[252,38801,31005],{"class":5356},[252,38803,308],{"class":258},[252,38805,38597],{"class":311},[252,38807,641],{"class":262},[252,38809,31014],{"class":5356},[252,38811,308],{"class":258},[252,38813,334],{"class":311},[252,38815,641],{"class":262},[252,38817,31023],{"class":5356},[252,38819,308],{"class":258},[252,38821,480],{"class":311},[252,38823,38187],{"class":262},[252,38825,38826],{"class":254,"line":9933},[252,38827,38192],{"class":262},[252,38829,38830,38832,38834,38836,38838,38840,38842,38844,38846,38848,38850,38852,38854,38856,38858,38860,38862],{"class":254,"line":9938},[252,38831,38154],{"class":262},[252,38833,30996],{"class":5356},[252,38835,308],{"class":258},[252,38837,38597],{"class":311},[252,38839,641],{"class":262},[252,38841,31005],{"class":5356},[252,38843,308],{"class":258},[252,38845,38597],{"class":311},[252,38847,641],{"class":262},[252,38849,31014],{"class":5356},[252,38851,308],{"class":258},[252,38853,334],{"class":311},[252,38855,641],{"class":262},[252,38857,31023],{"class":5356},[252,38859,308],{"class":258},[252,38861,480],{"class":311},[252,38863,38187],{"class":262},[252,38865,38866],{"class":254,"line":9943},[252,38867,38192],{"class":262},[252,38869,38870,38872,38874,38876,38878,38880,38882,38884,38886,38888,38890,38892,38894],{"class":254,"line":9952},[252,38871,38237],{"class":262},[252,38873,31014],{"class":5356},[252,38875,308],{"class":258},[252,38877,340],{"class":311},[252,38879,641],{"class":262},[252,38881,31069],{"class":5356},[252,38883,308],{"class":258},[252,38885,340],{"class":311},[252,38887,641],{"class":262},[252,38889,31023],{"class":5356},[252,38891,308],{"class":258},[252,38893,454],{"class":311},[252,38895,269],{"class":262},[252,38897,38898],{"class":254,"line":9957},[252,38899,38266],{"class":262},[252,38901,38902],{"class":254,"line":9963},[252,38903,38904],{"class":321},"        # 全连接层\n",[252,38906,38907,38909,38912,38914],{"class":254,"line":9984},[252,38908,30985],{"class":311},[252,38910,38911],{"class":262},".block6",[252,38913,308],{"class":258},[252,38915,38149],{"class":262},[252,38917,38918],{"class":254,"line":9990},[252,38919,38920],{"class":321},"            # 平展操作\n",[252,38922,38923],{"class":254,"line":10004},[252,38924,38925],{"class":321},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[252,38927,38928],{"class":254,"line":10010},[252,38929,38930],{"class":262},"            nn.Flatten(),\n",[252,38932,38933,38936,38938,38940,38942,38944,38946,38948,38950],{"class":254,"line":10037},[252,38934,38935],{"class":262},"            nn.Linear(",[252,38937,632],{"class":311},[252,38939,718],{"class":258},[252,38941,632],{"class":311},[252,38943,718],{"class":258},[252,38945,38597],{"class":311},[252,38947,641],{"class":262},[252,38949,35010],{"class":311},[252,38951,38187],{"class":262},[252,38953,38954],{"class":254,"line":10046},[252,38955,38192],{"class":262},[252,38957,38958,38960,38962,38964,38966],{"class":254,"line":10052},[252,38959,38935],{"class":262},[252,38961,35010],{"class":311},[252,38963,641],{"class":262},[252,38965,32210],{"class":311},[252,38967,38187],{"class":262},[252,38969,38970],{"class":254,"line":10060},[252,38971,38192],{"class":262},[252,38973,38974,38976,38978,38980,38982],{"class":254,"line":10065},[252,38975,38935],{"class":262},[252,38977,32210],{"class":311},[252,38979,641],{"class":262},[252,38981,709],{"class":311},[252,38983,269],{"class":262},[252,38985,38986],{"class":254,"line":16744},[252,38987,38266],{"class":262},[252,38989,38990],{"class":254,"line":16750},[252,38991,2539],{"emptyLinePlaceholder":181},[252,38993,38994],{"class":254,"line":16773},[252,38995,38996],{"class":321},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[252,38998,38999],{"class":254,"line":16779},[252,39000,39001],{"class":321},"        # 循环遍历模型\n",[252,39003,39004,39006,39009,39011,39014],{"class":254,"line":16802},[252,39005,3542],{"class":258},[252,39007,39008],{"class":262}," m ",[252,39010,26183],{"class":258},[252,39012,39013],{"class":311}," self",[252,39015,39016],{"class":262},".modules():\n",[252,39018,39019],{"class":254,"line":16816},[252,39020,39021],{"class":321},"            # print(m)\n",[252,39023,39024,39026,39029],{"class":254,"line":16836},[252,39025,4781],{"class":258},[252,39027,39028],{"class":311}," isinstance",[252,39030,39031],{"class":262},"(m,nn.Conv2d):\n",[252,39033,39034],{"class":254,"line":16842},[252,39035,39036],{"class":321},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[252,39038,39039,39042,39045,39047,39050],{"class":254,"line":16853},[252,39040,39041],{"class":262},"                nn.init.kaiming_normal_(m.weight,",[252,39043,39044],{"class":5356},"nonlinearity",[252,39046,308],{"class":258},[252,39048,39049],{"class":367},"'relu'",[252,39051,269],{"class":262},[252,39053,39054],{"class":254,"line":16876},[252,39055,39056],{"class":321},"                # 判断b参数是否存在\n",[252,39058,39059,39062,39065,39068,39071,39074],{"class":254,"line":16898},[252,39060,39061],{"class":258},"                if",[252,39063,39064],{"class":262}," m.bias ",[252,39066,39067],{"class":258},"is",[252,39069,39070],{"class":258}," not",[252,39072,39073],{"class":311}," None",[252,39075,3878],{"class":262},[252,39077,39078],{"class":254,"line":16903},[252,39079,39080],{"class":321},"                    # 如果参数不存在的化初始化b=0\n",[252,39082,39083,39086,39088],{"class":254,"line":16909},[252,39084,39085],{"class":262},"                    nn.init.constant_(m.bias,",[252,39087,454],{"class":311},[252,39089,269],{"class":262},[252,39091,39092],{"class":254,"line":16923},[252,39093,39094],{"class":321},"            # 全连接层初始化\n",[252,39096,39097,39100,39102],{"class":254,"line":16936},[252,39098,39099],{"class":258},"            elif",[252,39101,39028],{"class":311},[252,39103,39104],{"class":262},"(m,nn.Linear):\n",[252,39106,39107],{"class":254,"line":16941},[252,39108,39109],{"class":321},"                # 这个初始化方法是利用的是正太分布的方式\n",[252,39111,39112],{"class":254,"line":16955},[252,39113,39114],{"class":321},"                # 均值为0，方差为0.01\n",[252,39116,39117,39120,39122,39124,39127],{"class":254,"line":16960},[252,39118,39119],{"class":262},"                nn.init.normal_(m.weight,",[252,39121,454],{"class":311},[252,39123,641],{"class":262},[252,39125,39126],{"class":311},"0.01",[252,39128,269],{"class":262},[252,39130,39131],{"class":254,"line":16966},[252,39132,39133],{"class":321},"                # 初始化b参数\n",[252,39135,39136,39138,39140,39142,39144,39146],{"class":254,"line":16971},[252,39137,39061],{"class":258},[252,39139,39064],{"class":262},[252,39141,39067],{"class":258},[252,39143,39070],{"class":258},[252,39145,39073],{"class":311},[252,39147,3878],{"class":262},[252,39149,39150,39152,39154],{"class":254,"line":16985},[252,39151,39085],{"class":262},[252,39153,454],{"class":311},[252,39155,269],{"class":262},[252,39157,39158],{"class":254,"line":16990},[252,39159,2539],{"emptyLinePlaceholder":181},[252,39161,39162],{"class":254,"line":16995},[252,39163,35305],{"class":321},[252,39165,39166,39168,39170],{"class":254,"line":17009},[252,39167,30941],{"class":258},[252,39169,31233],{"class":2102},[252,39171,31236],{"class":262},[252,39173,39174,39176,39178,39180],{"class":254,"line":17021},[252,39175,31241],{"class":262},[252,39177,308],{"class":258},[252,39179,30963],{"class":311},[252,39181,39182],{"class":262},".block1(x)\n",[252,39184,39185,39187,39189,39191],{"class":254,"line":17026},[252,39186,31241],{"class":262},[252,39188,308],{"class":258},[252,39190,30963],{"class":311},[252,39192,39193],{"class":262},".block2(x)\n",[252,39195,39196,39198,39200,39202],{"class":254,"line":17039},[252,39197,31241],{"class":262},[252,39199,308],{"class":258},[252,39201,30963],{"class":311},[252,39203,39204],{"class":262},".block3(x)\n",[252,39206,39207,39209,39211,39213],{"class":254,"line":17044},[252,39208,31241],{"class":262},[252,39210,308],{"class":258},[252,39212,30963],{"class":311},[252,39214,39215],{"class":262},".block4(x)\n",[252,39217,39218,39220,39222,39224],{"class":254,"line":17049},[252,39219,31241],{"class":262},[252,39221,308],{"class":258},[252,39223,30963],{"class":311},[252,39225,39226],{"class":262},".block5(x)\n",[252,39228,39229,39231,39233,39235],{"class":254,"line":17054},[252,39230,31241],{"class":262},[252,39232,308],{"class":258},[252,39234,30963],{"class":311},[252,39236,39237],{"class":262},".block6(x)\n",[252,39239,39240,39242],{"class":254,"line":17067},[252,39241,14892],{"class":258},[252,39243,31349],{"class":262},[252,39245,39246],{"class":254,"line":17072},[252,39247,2539],{"emptyLinePlaceholder":181},[252,39249,39250],{"class":254,"line":32773},[252,39251,39252],{"class":321},"# 验证模型\n",[252,39254,39255,39257,39259,39261,39264],{"class":254,"line":32779},[252,39256,1670],{"class":258},[252,39258,31360],{"class":311},[252,39260,3088],{"class":258},[252,39262,39263],{"class":367},"'__main__'",[252,39265,3878],{"class":262},[252,39267,39268,39270,39272,39274,39276,39278,39280,39282,39284],{"class":254,"line":32785},[252,39269,31377],{"class":262},[252,39271,308],{"class":258},[252,39273,30591],{"class":262},[252,39275,31384],{"class":367},[252,39277,1843],{"class":258},[252,39279,31389],{"class":262},[252,39281,1840],{"class":258},[252,39283,30616],{"class":367},[252,39285,269],{"class":262},[252,39287,39288,39290],{"class":254,"line":32791},[252,39289,31439],{"class":311},[252,39291,30625],{"class":262},[252,39293,39294,39296,39298],{"class":254,"line":32797},[252,39295,31429],{"class":262},[252,39297,308],{"class":258},[252,39299,39300],{"class":262},"VGG16().to(device)\n",[252,39302,39303,39305,39307,39309,39311,39313,39315,39317],{"class":254,"line":32808},[252,39304,31439],{"class":311},[252,39306,31442],{"class":262},[252,39308,480],{"class":311},[252,39310,641],{"class":262},[252,39312,31641],{"class":311},[252,39314,641],{"class":262},[252,39316,31641],{"class":311},[252,39318,31455],{"class":262},[207,39320,39321],{"start":170},[210,39322,39323],{},"训练代码",[19,39325,39326],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39328,39329],{},"解决方式:",[19,39331,39332],{},"①权重初始化",[244,39334,39336],{"className":30518,"code":39335,"language":30520,"meta":169,"style":169},"# 权重初始化,保证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",[22,39337,39338,39343,39348,39360,39365,39373,39378,39391,39396,39410,39415,39424,39429,39438,39443,39448,39461,39466,39480],{"__ignoreMap":169},[252,39339,39340],{"class":254,"line":255},[252,39341,39342],{"class":321},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[252,39344,39345],{"class":254,"line":170},[252,39346,39347],{"class":321},"# 循环遍历模型\n",[252,39349,39350,39352,39354,39356,39358],{"class":254,"line":1318},[252,39351,3164],{"class":258},[252,39353,39008],{"class":262},[252,39355,26183],{"class":258},[252,39357,39013],{"class":311},[252,39359,39016],{"class":262},[252,39361,39362],{"class":254,"line":1333},[252,39363,39364],{"class":321},"    # print(m)\n",[252,39366,39367,39369,39371],{"class":254,"line":1339},[252,39368,3240],{"class":258},[252,39370,39028],{"class":311},[252,39372,39031],{"class":262},[252,39374,39375],{"class":254,"line":1353},[252,39376,39377],{"class":321},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[252,39379,39380,39383,39385,39387,39389],{"class":254,"line":1359},[252,39381,39382],{"class":262},"        nn.init.kaiming_normal_(m.weight,",[252,39384,39044],{"class":5356},[252,39386,308],{"class":258},[252,39388,39049],{"class":367},[252,39390,269],{"class":262},[252,39392,39393],{"class":254,"line":1450},[252,39394,39395],{"class":321},"        # 判断b参数是否存在\n",[252,39397,39398,39400,39402,39404,39406,39408],{"class":254,"line":1456},[252,39399,2636],{"class":258},[252,39401,39064],{"class":262},[252,39403,39067],{"class":258},[252,39405,39070],{"class":258},[252,39407,39073],{"class":311},[252,39409,3878],{"class":262},[252,39411,39412],{"class":254,"line":1468},[252,39413,39414],{"class":321},"            # 如果参数不存在的化初始化b=0\n",[252,39416,39417,39420,39422],{"class":254,"line":1751},[252,39418,39419],{"class":262},"            nn.init.constant_(m.bias,",[252,39421,454],{"class":311},[252,39423,269],{"class":262},[252,39425,39426],{"class":254,"line":1756},[252,39427,39428],{"class":321},"    # 全连接层初始化\n",[252,39430,39431,39434,39436],{"class":254,"line":1762},[252,39432,39433],{"class":258},"    elif",[252,39435,39028],{"class":311},[252,39437,39104],{"class":262},[252,39439,39440],{"class":254,"line":1767},[252,39441,39442],{"class":321},"        # 这个初始化方法是利用的是正太分布的方式\n",[252,39444,39445],{"class":254,"line":1781},[252,39446,39447],{"class":321},"        # 均值为0，方差为0.01\n",[252,39449,39450,39453,39455,39457,39459],{"class":254,"line":1786},[252,39451,39452],{"class":262},"        nn.init.normal_(m.weight,",[252,39454,454],{"class":311},[252,39456,641],{"class":262},[252,39458,39126],{"class":311},[252,39460,269],{"class":262},[252,39462,39463],{"class":254,"line":1792},[252,39464,39465],{"class":321},"        # 初始化b参数\n",[252,39467,39468,39470,39472,39474,39476,39478],{"class":254,"line":1813},[252,39469,2636],{"class":258},[252,39471,39064],{"class":262},[252,39473,39067],{"class":258},[252,39475,39070],{"class":258},[252,39477,39073],{"class":311},[252,39479,3878],{"class":262},[252,39481,39482,39484,39486],{"class":254,"line":1818},[252,39483,39419],{"class":262},[252,39485,454],{"class":311},[252,39487,269],{"class":262},[19,39489,39490],{},"②尽可能地增加批次",[19,39492,39493],{},"训练完整代码：",[244,39495,39496],{"className":30518,"code":38039,"language":30520,"meta":169,"style":169},[22,39497,39498,39504,39514,39524,39534,39538,39554,39562,39580,39584,39588,39598,39634,39638,39674,39678,39706,39710,39714,39724,39760,39764,39800,39804,39832,39836,39840,39850,39886,39890,39926,39930,39966,39970,39998,40002,40006,40016,40052,40056,40092,40096,40132,40136,40164,40168,40172,40182,40218,40222,40258,40262,40298,40302,40330,40334,40338,40348,40352,40356,40360,40380,40384,40396,40400,40412,40416,40420,40424,40428,40440,40444,40452,40456,40468,40472,40486,40490,40498,40502,40510,40514,40518,40530,40534,40548,40556,40560,40564,40572,40582,40592,40602,40612,40622,40632,40638,40642,40646,40658,40678,40684,40692],{"__ignoreMap":169},[252,39499,39500,39502],{"class":254,"line":255},[252,39501,30532],{"class":258},[252,39503,30535],{"class":262},[252,39505,39506,39508,39510,39512],{"class":254,"line":170},[252,39507,30877],{"class":258},[252,39509,38054],{"class":262},[252,39511,30532],{"class":258},[252,39513,38059],{"class":262},[252,39515,39516,39518,39520,39522],{"class":254,"line":1318},[252,39517,30877],{"class":258},[252,39519,30880],{"class":262},[252,39521,30532],{"class":258},[252,39523,30885],{"class":262},[252,39525,39526,39528,39530,39532],{"class":254,"line":1333},[252,39527,30877],{"class":258},[252,39529,30897],{"class":262},[252,39531,30532],{"class":258},[252,39533,30902],{"class":262},[252,39535,39536],{"class":254,"line":1339},[252,39537,2539],{"emptyLinePlaceholder":181},[252,39539,39540,39542,39544,39546,39548,39550,39552],{"class":254,"line":1353},[252,39541,14834],{"class":258},[252,39543,38090],{"class":2102},[252,39545,263],{"class":262},[252,39547,30918],{"class":2102},[252,39549,821],{"class":262},[252,39551,30923],{"class":2102},[252,39553,30926],{"class":262},[252,39555,39556,39558,39560],{"class":254,"line":1359},[252,39557,30941],{"class":258},[252,39559,30944],{"class":311},[252,39561,30947],{"class":262},[252,39563,39564,39566,39568,39570,39572,39574,39576,39578],{"class":254,"line":1450},[252,39565,30957],{"class":311},[252,39567,263],{"class":262},[252,39569,38117],{"class":311},[252,39571,12575],{"class":262},[252,39573,30963],{"class":311},[252,39575,30966],{"class":262},[252,39577,30969],{"class":311},[252,39579,2115],{"class":262},[252,39581,39582],{"class":254,"line":1456},[252,39583,38132],{"class":321},[252,39585,39586],{"class":254,"line":1468},[252,39587,38137],{"class":321},[252,39589,39590,39592,39594,39596],{"class":254,"line":1751},[252,39591,30985],{"class":311},[252,39593,38144],{"class":262},[252,39595,308],{"class":258},[252,39597,38149],{"class":262},[252,39599,39600,39602,39604,39606,39608,39610,39612,39614,39616,39618,39620,39622,39624,39626,39628,39630,39632],{"class":254,"line":1756},[252,39601,38154],{"class":262},[252,39603,30996],{"class":5356},[252,39605,308],{"class":258},[252,39607,480],{"class":311},[252,39609,641],{"class":262},[252,39611,31005],{"class":5356},[252,39613,308],{"class":258},[252,39615,466],{"class":311},[252,39617,641],{"class":262},[252,39619,31014],{"class":5356},[252,39621,308],{"class":258},[252,39623,334],{"class":311},[252,39625,641],{"class":262},[252,39627,31023],{"class":5356},[252,39629,308],{"class":258},[252,39631,480],{"class":311},[252,39633,38187],{"class":262},[252,39635,39636],{"class":254,"line":1762},[252,39637,38192],{"class":262},[252,39639,39640,39642,39644,39646,39648,39650,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670,39672],{"class":254,"line":1767},[252,39641,38154],{"class":262},[252,39643,30996],{"class":5356},[252,39645,308],{"class":258},[252,39647,466],{"class":311},[252,39649,641],{"class":262},[252,39651,31005],{"class":5356},[252,39653,308],{"class":258},[252,39655,466],{"class":311},[252,39657,641],{"class":262},[252,39659,31014],{"class":5356},[252,39661,308],{"class":258},[252,39663,334],{"class":311},[252,39665,641],{"class":262},[252,39667,31023],{"class":5356},[252,39669,308],{"class":258},[252,39671,480],{"class":311},[252,39673,38187],{"class":262},[252,39675,39676],{"class":254,"line":1781},[252,39677,38192],{"class":262},[252,39679,39680,39682,39684,39686,39688,39690,39692,39694,39696,39698,39700,39702,39704],{"class":254,"line":1786},[252,39681,38237],{"class":262},[252,39683,31014],{"class":5356},[252,39685,308],{"class":258},[252,39687,340],{"class":311},[252,39689,641],{"class":262},[252,39691,31069],{"class":5356},[252,39693,308],{"class":258},[252,39695,340],{"class":311},[252,39697,641],{"class":262},[252,39699,31023],{"class":5356},[252,39701,308],{"class":258},[252,39703,454],{"class":311},[252,39705,269],{"class":262},[252,39707,39708],{"class":254,"line":1792},[252,39709,38266],{"class":262},[252,39711,39712],{"class":254,"line":1813},[252,39713,38271],{"class":321},[252,39715,39716,39718,39720,39722],{"class":254,"line":1818},[252,39717,30985],{"class":311},[252,39719,38278],{"class":262},[252,39721,308],{"class":258},[252,39723,38149],{"class":262},[252,39725,39726,39728,39730,39732,39734,39736,39738,39740,39742,39744,39746,39748,39750,39752,39754,39756,39758],{"class":254,"line":1832},[252,39727,38154],{"class":262},[252,39729,30996],{"class":5356},[252,39731,308],{"class":258},[252,39733,466],{"class":311},[252,39735,641],{"class":262},[252,39737,31005],{"class":5356},[252,39739,308],{"class":258},[252,39741,32210],{"class":311},[252,39743,641],{"class":262},[252,39745,31014],{"class":5356},[252,39747,308],{"class":258},[252,39749,334],{"class":311},[252,39751,641],{"class":262},[252,39753,31023],{"class":5356},[252,39755,308],{"class":258},[252,39757,480],{"class":311},[252,39759,38187],{"class":262},[252,39761,39762],{"class":254,"line":1837},[252,39763,38192],{"class":262},[252,39765,39766,39768,39770,39772,39774,39776,39778,39780,39782,39784,39786,39788,39790,39792,39794,39796,39798],{"class":254,"line":1866},[252,39767,38154],{"class":262},[252,39769,30996],{"class":5356},[252,39771,308],{"class":258},[252,39773,32210],{"class":311},[252,39775,641],{"class":262},[252,39777,31005],{"class":5356},[252,39779,308],{"class":258},[252,39781,32210],{"class":311},[252,39783,641],{"class":262},[252,39785,31014],{"class":5356},[252,39787,308],{"class":258},[252,39789,334],{"class":311},[252,39791,641],{"class":262},[252,39793,31023],{"class":5356},[252,39795,308],{"class":258},[252,39797,480],{"class":311},[252,39799,38187],{"class":262},[252,39801,39802],{"class":254,"line":1871},[252,39803,38192],{"class":262},[252,39805,39806,39808,39810,39812,39814,39816,39818,39820,39822,39824,39826,39828,39830],{"class":254,"line":1888},[252,39807,38237],{"class":262},[252,39809,31014],{"class":5356},[252,39811,308],{"class":258},[252,39813,340],{"class":311},[252,39815,641],{"class":262},[252,39817,31069],{"class":5356},[252,39819,308],{"class":258},[252,39821,340],{"class":311},[252,39823,641],{"class":262},[252,39825,31023],{"class":5356},[252,39827,308],{"class":258},[252,39829,454],{"class":311},[252,39831,269],{"class":262},[252,39833,39834],{"class":254,"line":1893},[252,39835,38266],{"class":262},[252,39837,39838],{"class":254,"line":1898},[252,39839,38399],{"class":321},[252,39841,39842,39844,39846,39848],{"class":254,"line":1903},[252,39843,30985],{"class":311},[252,39845,38406],{"class":262},[252,39847,308],{"class":258},[252,39849,38149],{"class":262},[252,39851,39852,39854,39856,39858,39860,39862,39864,39866,39868,39870,39872,39874,39876,39878,39880,39882,39884],{"class":254,"line":1917},[252,39853,38154],{"class":262},[252,39855,30996],{"class":5356},[252,39857,308],{"class":258},[252,39859,32210],{"class":311},[252,39861,641],{"class":262},[252,39863,31005],{"class":5356},[252,39865,308],{"class":258},[252,39867,35010],{"class":311},[252,39869,641],{"class":262},[252,39871,31014],{"class":5356},[252,39873,308],{"class":258},[252,39875,334],{"class":311},[252,39877,641],{"class":262},[252,39879,31023],{"class":5356},[252,39881,308],{"class":258},[252,39883,480],{"class":311},[252,39885,38187],{"class":262},[252,39887,39888],{"class":254,"line":1922},[252,39889,38192],{"class":262},[252,39891,39892,39894,39896,39898,39900,39902,39904,39906,39908,39910,39912,39914,39916,39918,39920,39922,39924],{"class":254,"line":2716},[252,39893,38154],{"class":262},[252,39895,30996],{"class":5356},[252,39897,308],{"class":258},[252,39899,35010],{"class":311},[252,39901,641],{"class":262},[252,39903,31005],{"class":5356},[252,39905,308],{"class":258},[252,39907,35010],{"class":311},[252,39909,641],{"class":262},[252,39911,31014],{"class":5356},[252,39913,308],{"class":258},[252,39915,334],{"class":311},[252,39917,641],{"class":262},[252,39919,31023],{"class":5356},[252,39921,308],{"class":258},[252,39923,480],{"class":311},[252,39925,38187],{"class":262},[252,39927,39928],{"class":254,"line":2730},[252,39929,38192],{"class":262},[252,39931,39932,39934,39936,39938,39940,39942,39944,39946,39948,39950,39952,39954,39956,39958,39960,39962,39964],{"class":254,"line":2738},[252,39933,38154],{"class":262},[252,39935,30996],{"class":5356},[252,39937,308],{"class":258},[252,39939,35010],{"class":311},[252,39941,641],{"class":262},[252,39943,31005],{"class":5356},[252,39945,308],{"class":258},[252,39947,35010],{"class":311},[252,39949,641],{"class":262},[252,39951,31014],{"class":5356},[252,39953,308],{"class":258},[252,39955,334],{"class":311},[252,39957,641],{"class":262},[252,39959,31023],{"class":5356},[252,39961,308],{"class":258},[252,39963,480],{"class":311},[252,39965,38187],{"class":262},[252,39967,39968],{"class":254,"line":2743},[252,39969,38192],{"class":262},[252,39971,39972,39974,39976,39978,39980,39982,39984,39986,39988,39990,39992,39994,39996],{"class":254,"line":2749},[252,39973,38237],{"class":262},[252,39975,31014],{"class":5356},[252,39977,308],{"class":258},[252,39979,340],{"class":311},[252,39981,641],{"class":262},[252,39983,31069],{"class":5356},[252,39985,308],{"class":258},[252,39987,340],{"class":311},[252,39989,641],{"class":262},[252,39991,31023],{"class":5356},[252,39993,308],{"class":258},[252,39995,454],{"class":311},[252,39997,269],{"class":262},[252,39999,40000],{"class":254,"line":2755},[252,40001,38266],{"class":262},[252,40003,40004],{"class":254,"line":2760},[252,40005,38567],{"class":321},[252,40007,40008,40010,40012,40014],{"class":254,"line":8088},[252,40009,30985],{"class":311},[252,40011,38574],{"class":262},[252,40013,308],{"class":258},[252,40015,38149],{"class":262},[252,40017,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038,40040,40042,40044,40046,40048,40050],{"class":254,"line":8112},[252,40019,38154],{"class":262},[252,40021,30996],{"class":5356},[252,40023,308],{"class":258},[252,40025,35010],{"class":311},[252,40027,641],{"class":262},[252,40029,31005],{"class":5356},[252,40031,308],{"class":258},[252,40033,38597],{"class":311},[252,40035,641],{"class":262},[252,40037,31014],{"class":5356},[252,40039,308],{"class":258},[252,40041,334],{"class":311},[252,40043,641],{"class":262},[252,40045,31023],{"class":5356},[252,40047,308],{"class":258},[252,40049,480],{"class":311},[252,40051,38187],{"class":262},[252,40053,40054],{"class":254,"line":8117},[252,40055,38192],{"class":262},[252,40057,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076,40078,40080,40082,40084,40086,40088,40090],{"class":254,"line":8123},[252,40059,38154],{"class":262},[252,40061,30996],{"class":5356},[252,40063,308],{"class":258},[252,40065,38597],{"class":311},[252,40067,641],{"class":262},[252,40069,31005],{"class":5356},[252,40071,308],{"class":258},[252,40073,38597],{"class":311},[252,40075,641],{"class":262},[252,40077,31014],{"class":5356},[252,40079,308],{"class":258},[252,40081,334],{"class":311},[252,40083,641],{"class":262},[252,40085,31023],{"class":5356},[252,40087,308],{"class":258},[252,40089,480],{"class":311},[252,40091,38187],{"class":262},[252,40093,40094],{"class":254,"line":8150},[252,40095,38192],{"class":262},[252,40097,40098,40100,40102,40104,40106,40108,40110,40112,40114,40116,40118,40120,40122,40124,40126,40128,40130],{"class":254,"line":8155},[252,40099,38154],{"class":262},[252,40101,30996],{"class":5356},[252,40103,308],{"class":258},[252,40105,38597],{"class":311},[252,40107,641],{"class":262},[252,40109,31005],{"class":5356},[252,40111,308],{"class":258},[252,40113,38597],{"class":311},[252,40115,641],{"class":262},[252,40117,31014],{"class":5356},[252,40119,308],{"class":258},[252,40121,334],{"class":311},[252,40123,641],{"class":262},[252,40125,31023],{"class":5356},[252,40127,308],{"class":258},[252,40129,480],{"class":311},[252,40131,38187],{"class":262},[252,40133,40134],{"class":254,"line":8161},[252,40135,38192],{"class":262},[252,40137,40138,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162],{"class":254,"line":8173},[252,40139,38237],{"class":262},[252,40141,31014],{"class":5356},[252,40143,308],{"class":258},[252,40145,340],{"class":311},[252,40147,641],{"class":262},[252,40149,31069],{"class":5356},[252,40151,308],{"class":258},[252,40153,340],{"class":311},[252,40155,641],{"class":262},[252,40157,31023],{"class":5356},[252,40159,308],{"class":258},[252,40161,454],{"class":311},[252,40163,269],{"class":262},[252,40165,40166],{"class":254,"line":8185},[252,40167,38266],{"class":262},[252,40169,40170],{"class":254,"line":8197},[252,40171,38736],{"class":321},[252,40173,40174,40176,40178,40180],{"class":254,"line":9856},[252,40175,30985],{"class":311},[252,40177,38743],{"class":262},[252,40179,308],{"class":258},[252,40181,38149],{"class":262},[252,40183,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212,40214,40216],{"class":254,"line":9881},[252,40185,38154],{"class":262},[252,40187,30996],{"class":5356},[252,40189,308],{"class":258},[252,40191,38597],{"class":311},[252,40193,641],{"class":262},[252,40195,31005],{"class":5356},[252,40197,308],{"class":258},[252,40199,38597],{"class":311},[252,40201,641],{"class":262},[252,40203,31014],{"class":5356},[252,40205,308],{"class":258},[252,40207,334],{"class":311},[252,40209,641],{"class":262},[252,40211,31023],{"class":5356},[252,40213,308],{"class":258},[252,40215,480],{"class":311},[252,40217,38187],{"class":262},[252,40219,40220],{"class":254,"line":9904},[252,40221,38192],{"class":262},[252,40223,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242,40244,40246,40248,40250,40252,40254,40256],{"class":254,"line":9928},[252,40225,38154],{"class":262},[252,40227,30996],{"class":5356},[252,40229,308],{"class":258},[252,40231,38597],{"class":311},[252,40233,641],{"class":262},[252,40235,31005],{"class":5356},[252,40237,308],{"class":258},[252,40239,38597],{"class":311},[252,40241,641],{"class":262},[252,40243,31014],{"class":5356},[252,40245,308],{"class":258},[252,40247,334],{"class":311},[252,40249,641],{"class":262},[252,40251,31023],{"class":5356},[252,40253,308],{"class":258},[252,40255,480],{"class":311},[252,40257,38187],{"class":262},[252,40259,40260],{"class":254,"line":9933},[252,40261,38192],{"class":262},[252,40263,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282,40284,40286,40288,40290,40292,40294,40296],{"class":254,"line":9938},[252,40265,38154],{"class":262},[252,40267,30996],{"class":5356},[252,40269,308],{"class":258},[252,40271,38597],{"class":311},[252,40273,641],{"class":262},[252,40275,31005],{"class":5356},[252,40277,308],{"class":258},[252,40279,38597],{"class":311},[252,40281,641],{"class":262},[252,40283,31014],{"class":5356},[252,40285,308],{"class":258},[252,40287,334],{"class":311},[252,40289,641],{"class":262},[252,40291,31023],{"class":5356},[252,40293,308],{"class":258},[252,40295,480],{"class":311},[252,40297,38187],{"class":262},[252,40299,40300],{"class":254,"line":9943},[252,40301,38192],{"class":262},[252,40303,40304,40306,40308,40310,40312,40314,40316,40318,40320,40322,40324,40326,40328],{"class":254,"line":9952},[252,40305,38237],{"class":262},[252,40307,31014],{"class":5356},[252,40309,308],{"class":258},[252,40311,340],{"class":311},[252,40313,641],{"class":262},[252,40315,31069],{"class":5356},[252,40317,308],{"class":258},[252,40319,340],{"class":311},[252,40321,641],{"class":262},[252,40323,31023],{"class":5356},[252,40325,308],{"class":258},[252,40327,454],{"class":311},[252,40329,269],{"class":262},[252,40331,40332],{"class":254,"line":9957},[252,40333,38266],{"class":262},[252,40335,40336],{"class":254,"line":9963},[252,40337,38904],{"class":321},[252,40339,40340,40342,40344,40346],{"class":254,"line":9984},[252,40341,30985],{"class":311},[252,40343,38911],{"class":262},[252,40345,308],{"class":258},[252,40347,38149],{"class":262},[252,40349,40350],{"class":254,"line":9990},[252,40351,38920],{"class":321},[252,40353,40354],{"class":254,"line":10004},[252,40355,38925],{"class":321},[252,40357,40358],{"class":254,"line":10010},[252,40359,38930],{"class":262},[252,40361,40362,40364,40366,40368,40370,40372,40374,40376,40378],{"class":254,"line":10037},[252,40363,38935],{"class":262},[252,40365,632],{"class":311},[252,40367,718],{"class":258},[252,40369,632],{"class":311},[252,40371,718],{"class":258},[252,40373,38597],{"class":311},[252,40375,641],{"class":262},[252,40377,35010],{"class":311},[252,40379,38187],{"class":262},[252,40381,40382],{"class":254,"line":10046},[252,40383,38192],{"class":262},[252,40385,40386,40388,40390,40392,40394],{"class":254,"line":10052},[252,40387,38935],{"class":262},[252,40389,35010],{"class":311},[252,40391,641],{"class":262},[252,40393,32210],{"class":311},[252,40395,38187],{"class":262},[252,40397,40398],{"class":254,"line":10060},[252,40399,38192],{"class":262},[252,40401,40402,40404,40406,40408,40410],{"class":254,"line":10065},[252,40403,38935],{"class":262},[252,40405,32210],{"class":311},[252,40407,641],{"class":262},[252,40409,709],{"class":311},[252,40411,269],{"class":262},[252,40413,40414],{"class":254,"line":16744},[252,40415,38266],{"class":262},[252,40417,40418],{"class":254,"line":16750},[252,40419,2539],{"emptyLinePlaceholder":181},[252,40421,40422],{"class":254,"line":16773},[252,40423,38996],{"class":321},[252,40425,40426],{"class":254,"line":16779},[252,40427,39001],{"class":321},[252,40429,40430,40432,40434,40436,40438],{"class":254,"line":16802},[252,40431,3542],{"class":258},[252,40433,39008],{"class":262},[252,40435,26183],{"class":258},[252,40437,39013],{"class":311},[252,40439,39016],{"class":262},[252,40441,40442],{"class":254,"line":16816},[252,40443,39021],{"class":321},[252,40445,40446,40448,40450],{"class":254,"line":16836},[252,40447,4781],{"class":258},[252,40449,39028],{"class":311},[252,40451,39031],{"class":262},[252,40453,40454],{"class":254,"line":16842},[252,40455,39036],{"class":321},[252,40457,40458,40460,40462,40464,40466],{"class":254,"line":16853},[252,40459,39041],{"class":262},[252,40461,39044],{"class":5356},[252,40463,308],{"class":258},[252,40465,39049],{"class":367},[252,40467,269],{"class":262},[252,40469,40470],{"class":254,"line":16876},[252,40471,39056],{"class":321},[252,40473,40474,40476,40478,40480,40482,40484],{"class":254,"line":16898},[252,40475,39061],{"class":258},[252,40477,39064],{"class":262},[252,40479,39067],{"class":258},[252,40481,39070],{"class":258},[252,40483,39073],{"class":311},[252,40485,3878],{"class":262},[252,40487,40488],{"class":254,"line":16903},[252,40489,39080],{"class":321},[252,40491,40492,40494,40496],{"class":254,"line":16909},[252,40493,39085],{"class":262},[252,40495,454],{"class":311},[252,40497,269],{"class":262},[252,40499,40500],{"class":254,"line":16923},[252,40501,39094],{"class":321},[252,40503,40504,40506,40508],{"class":254,"line":16936},[252,40505,39099],{"class":258},[252,40507,39028],{"class":311},[252,40509,39104],{"class":262},[252,40511,40512],{"class":254,"line":16941},[252,40513,39109],{"class":321},[252,40515,40516],{"class":254,"line":16955},[252,40517,39114],{"class":321},[252,40519,40520,40522,40524,40526,40528],{"class":254,"line":16960},[252,40521,39119],{"class":262},[252,40523,454],{"class":311},[252,40525,641],{"class":262},[252,40527,39126],{"class":311},[252,40529,269],{"class":262},[252,40531,40532],{"class":254,"line":16966},[252,40533,39133],{"class":321},[252,40535,40536,40538,40540,40542,40544,40546],{"class":254,"line":16971},[252,40537,39061],{"class":258},[252,40539,39064],{"class":262},[252,40541,39067],{"class":258},[252,40543,39070],{"class":258},[252,40545,39073],{"class":311},[252,40547,3878],{"class":262},[252,40549,40550,40552,40554],{"class":254,"line":16985},[252,40551,39085],{"class":262},[252,40553,454],{"class":311},[252,40555,269],{"class":262},[252,40557,40558],{"class":254,"line":16990},[252,40559,2539],{"emptyLinePlaceholder":181},[252,40561,40562],{"class":254,"line":16995},[252,40563,35305],{"class":321},[252,40565,40566,40568,40570],{"class":254,"line":17009},[252,40567,30941],{"class":258},[252,40569,31233],{"class":2102},[252,40571,31236],{"class":262},[252,40573,40574,40576,40578,40580],{"class":254,"line":17021},[252,40575,31241],{"class":262},[252,40577,308],{"class":258},[252,40579,30963],{"class":311},[252,40581,39182],{"class":262},[252,40583,40584,40586,40588,40590],{"class":254,"line":17026},[252,40585,31241],{"class":262},[252,40587,308],{"class":258},[252,40589,30963],{"class":311},[252,40591,39193],{"class":262},[252,40593,40594,40596,40598,40600],{"class":254,"line":17039},[252,40595,31241],{"class":262},[252,40597,308],{"class":258},[252,40599,30963],{"class":311},[252,40601,39204],{"class":262},[252,40603,40604,40606,40608,40610],{"class":254,"line":17044},[252,40605,31241],{"class":262},[252,40607,308],{"class":258},[252,40609,30963],{"class":311},[252,40611,39215],{"class":262},[252,40613,40614,40616,40618,40620],{"class":254,"line":17049},[252,40615,31241],{"class":262},[252,40617,308],{"class":258},[252,40619,30963],{"class":311},[252,40621,39226],{"class":262},[252,40623,40624,40626,40628,40630],{"class":254,"line":17054},[252,40625,31241],{"class":262},[252,40627,308],{"class":258},[252,40629,30963],{"class":311},[252,40631,39237],{"class":262},[252,40633,40634,40636],{"class":254,"line":17067},[252,40635,14892],{"class":258},[252,40637,31349],{"class":262},[252,40639,40640],{"class":254,"line":17072},[252,40641,2539],{"emptyLinePlaceholder":181},[252,40643,40644],{"class":254,"line":32773},[252,40645,39252],{"class":321},[252,40647,40648,40650,40652,40654,40656],{"class":254,"line":32779},[252,40649,1670],{"class":258},[252,40651,31360],{"class":311},[252,40653,3088],{"class":258},[252,40655,39263],{"class":367},[252,40657,3878],{"class":262},[252,40659,40660,40662,40664,40666,40668,40670,40672,40674,40676],{"class":254,"line":32785},[252,40661,31377],{"class":262},[252,40663,308],{"class":258},[252,40665,30591],{"class":262},[252,40667,31384],{"class":367},[252,40669,1843],{"class":258},[252,40671,31389],{"class":262},[252,40673,1840],{"class":258},[252,40675,30616],{"class":367},[252,40677,269],{"class":262},[252,40679,40680,40682],{"class":254,"line":32791},[252,40681,31439],{"class":311},[252,40683,30625],{"class":262},[252,40685,40686,40688,40690],{"class":254,"line":32797},[252,40687,31429],{"class":262},[252,40689,308],{"class":258},[252,40691,39300],{"class":262},[252,40693,40694,40696,40698,40700,40702,40704,40706,40708],{"class":254,"line":32808},[252,40695,31439],{"class":311},[252,40697,31442],{"class":262},[252,40699,480],{"class":311},[252,40701,641],{"class":262},[252,40703,31641],{"class":311},[252,40705,641],{"class":262},[252,40707,31641],{"class":311},[252,40709,31455],{"class":262},[207,40711,40712],{"start":1318},[210,40713,40714],{},"测试代码",[244,40716,40718],{"className":30518,"code":40717,"language":30520,"meta":169,"style":169},"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",[22,40719,40720,40726,40736,40746,40750,40760,40771,40775,40779,40783,40791,40807,40817,40833,40843,40857,40861,40871,40881,40891,40897,40901,40905,40913,40917,40933,40941,40945,40949,40957,40965,40969,40973,40977,40981,40987,40991,41001,41009,41017,41021,41025,41029,41037,41041,41057,41061,41065,41069,41081,41085,41097,41101,41105,41117,41121,41131,41135,41139,41151,41155,41164,41168,41172,41180,41184,41192,41196,41200,41204,41208,41212,41228,41236,41240,41244,41292,41298,41302,41312,41320,41328,41332,41336,41340,41344,41352,41356,41372,41376,41384,41392],{"__ignoreMap":169},[252,40721,40722,40724],{"class":254,"line":255},[252,40723,30532],{"class":258},[252,40725,30535],{"class":262},[252,40727,40728,40730,40732,40734],{"class":254,"line":170},[252,40729,30532],{"class":258},[252,40731,31555],{"class":262},[252,40733,31523],{"class":258},[252,40735,31560],{"class":262},[252,40737,40738,40740,40742,40744],{"class":254,"line":1318},[252,40739,30877],{"class":258},[252,40741,31538],{"class":262},[252,40743,30532],{"class":258},[252,40745,31543],{"class":262},[252,40747,40748],{"class":254,"line":1333},[252,40749,34062],{"class":321},[252,40751,40752,40754,40756,40758],{"class":254,"line":1339},[252,40753,30877],{"class":258},[252,40755,31508],{"class":262},[252,40757,30532],{"class":258},[252,40759,31513],{"class":262},[252,40761,40762,40764,40766,40768],{"class":254,"line":1353},[252,40763,30877],{"class":258},[252,40765,32054],{"class":262},[252,40767,30532],{"class":258},[252,40769,40770],{"class":311}," VGG16\n",[252,40772,40773],{"class":254,"line":1359},[252,40774,2539],{"emptyLinePlaceholder":181},[252,40776,40777],{"class":254,"line":1450},[252,40778,2539],{"emptyLinePlaceholder":181},[252,40780,40781],{"class":254,"line":1456},[252,40782,34091],{"class":321},[252,40784,40785,40787,40789],{"class":254,"line":1468},[252,40786,32087],{"class":258},[252,40788,34098],{"class":2102},[252,40790,32093],{"class":262},[252,40792,40793,40795,40797,40799,40801,40803,40805],{"class":254,"line":1751},[252,40794,34105],{"class":262},[252,40796,308],{"class":258},[252,40798,31595],{"class":262},[252,40800,31598],{"class":5356},[252,40802,308],{"class":258},[252,40804,31603],{"class":367},[252,40806,31606],{"class":262},[252,40808,40809,40811,40813,40815],{"class":254,"line":1756},[252,40810,34122],{"class":5356},[252,40812,308],{"class":258},[252,40814,34127],{"class":311},[252,40816,31606],{"class":262},[252,40818,40819,40821,40823,40825,40827,40829,40831],{"class":254,"line":1762},[252,40820,34134],{"class":5356},[252,40822,308],{"class":258},[252,40824,31633],{"class":262},[252,40826,31636],{"class":5356},[252,40828,308],{"class":258},[252,40830,31641],{"class":311},[252,40832,31644],{"class":262},[252,40834,40835,40837,40839,40841],{"class":254,"line":1767},[252,40836,34151],{"class":5356},[252,40838,308],{"class":258},[252,40840,31616],{"class":311},[252,40842,269],{"class":262},[252,40844,40845,40847,40849,40851,40853,40855],{"class":254,"line":1781},[252,40846,34162],{"class":262},[252,40848,308],{"class":258},[252,40850,31674],{"class":262},[252,40852,31677],{"class":5356},[252,40854,308],{"class":258},[252,40856,34173],{"class":262},[252,40858,40859],{"class":254,"line":1786},[252,40860,34178],{"class":321},[252,40862,40863,40865,40867,40869],{"class":254,"line":1792},[252,40864,34183],{"class":5356},[252,40866,308],{"class":258},[252,40868,480],{"class":311},[252,40870,31606],{"class":262},[252,40872,40873,40875,40877,40879],{"class":254,"line":1813},[252,40874,34194],{"class":5356},[252,40876,308],{"class":258},[252,40878,31616],{"class":311},[252,40880,31606],{"class":262},[252,40882,40883,40885,40887,40889],{"class":254,"line":1818},[252,40884,34205],{"class":5356},[252,40886,308],{"class":258},[252,40888,454],{"class":311},[252,40890,269],{"class":262},[252,40892,40893,40895],{"class":254,"line":1832},[252,40894,4229],{"class":258},[252,40896,34218],{"class":262},[252,40898,40899],{"class":254,"line":1837},[252,40900,2539],{"emptyLinePlaceholder":181},[252,40902,40903],{"class":254,"line":1866},[252,40904,34227],{"class":321},[252,40906,40907,40909,40911],{"class":254,"line":1871},[252,40908,32087],{"class":258},[252,40910,34234],{"class":2102},[252,40912,34237],{"class":262},[252,40914,40915],{"class":254,"line":1888},[252,40916,34242],{"class":321},[252,40918,40919,40921,40923,40925,40927,40929,40931],{"class":254,"line":1893},[252,40920,31377],{"class":262},[252,40922,308],{"class":258},[252,40924,31384],{"class":367},[252,40926,1843],{"class":258},[252,40928,31389],{"class":262},[252,40930,1840],{"class":258},[252,40932,34259],{"class":367},[252,40934,40935,40937,40939],{"class":254,"line":1898},[252,40936,31429],{"class":262},[252,40938,308],{"class":258},[252,40940,32429],{"class":262},[252,40942,40943],{"class":254,"line":1903},[252,40944,2539],{"emptyLinePlaceholder":181},[252,40946,40947],{"class":254,"line":1917},[252,40948,34276],{"class":321},[252,40950,40951,40953,40955],{"class":254,"line":1922},[252,40952,34281],{"class":262},[252,40954,308],{"class":258},[252,40956,32482],{"class":311},[252,40958,40959,40961,40963],{"class":254,"line":2716},[252,40960,34290],{"class":262},[252,40962,308],{"class":258},[252,40964,3224],{"class":311},[252,40966,40967],{"class":254,"line":2730},[252,40968,2539],{"emptyLinePlaceholder":181},[252,40970,40971],{"class":254,"line":2738},[252,40972,34303],{"class":321},[252,40974,40975],{"class":254,"line":2743},[252,40976,34308],{"class":321},[252,40978,40979],{"class":254,"line":2749},[252,40980,34313],{"class":321},[252,40982,40983,40985],{"class":254,"line":2755},[252,40984,34318],{"class":258},[252,40986,33024],{"class":262},[252,40988,40989],{"class":254,"line":2760},[252,40990,34325],{"class":321},[252,40992,40993,40995,40997,40999],{"class":254,"line":8088},[252,40994,3542],{"class":258},[252,40996,34332],{"class":262},[252,40998,26183],{"class":258},[252,41000,34337],{"class":262},[252,41002,41003,41005,41007],{"class":254,"line":8112},[252,41004,34342],{"class":262},[252,41006,308],{"class":258},[252,41008,34347],{"class":262},[252,41010,41011,41013,41015],{"class":254,"line":8117},[252,41012,34352],{"class":262},[252,41014,308],{"class":258},[252,41016,34357],{"class":262},[252,41018,41019],{"class":254,"line":8123},[252,41020,34362],{"class":321},[252,41022,41023],{"class":254,"line":8150},[252,41024,33015],{"class":262},[252,41026,41027],{"class":254,"line":8155},[252,41028,34371],{"class":321},[252,41030,41031,41033,41035],{"class":254,"line":8161},[252,41032,32800],{"class":262},[252,41034,308],{"class":258},[252,41036,34380],{"class":262},[252,41038,41039],{"class":254,"line":8173},[252,41040,34385],{"class":321},[252,41042,41043,41045,41047,41049,41051,41053,41055],{"class":254,"line":8185},[252,41044,32817],{"class":262},[252,41046,308],{"class":258},[252,41048,32822],{"class":262},[252,41050,32825],{"class":5356},[252,41052,308],{"class":258},[252,41054,480],{"class":311},[252,41056,269],{"class":262},[252,41058,41059],{"class":254,"line":8197},[252,41060,34406],{"class":321},[252,41062,41063],{"class":254,"line":9856},[252,41064,34411],{"class":321},[252,41066,41067],{"class":254,"line":9881},[252,41068,34416],{"class":321},[252,41070,41071,41073,41075,41077,41079],{"class":254,"line":9904},[252,41072,34421],{"class":262},[252,41074,9617],{"class":258},[252,41076,32927],{"class":262},[252,41078,3088],{"class":258},[252,41080,34430],{"class":262},[252,41082,41083],{"class":254,"line":9928},[252,41084,34435],{"class":321},[252,41086,41087,41089,41091,41093,41095],{"class":254,"line":9933},[252,41088,34440],{"class":262},[252,41090,9617],{"class":258},[252,41092,34445],{"class":262},[252,41094,454],{"class":311},[252,41096,269],{"class":262},[252,41098,41099],{"class":254,"line":9938},[252,41100,2539],{"emptyLinePlaceholder":181},[252,41102,41103],{"class":254,"line":9943},[252,41104,34458],{"class":321},[252,41106,41107,41109,41111,41113,41115],{"class":254,"line":9952},[252,41108,34463],{"class":262},[252,41110,308],{"class":258},[252,41112,34468],{"class":262},[252,41114,847],{"class":258},[252,41116,34473],{"class":262},[252,41118,41119],{"class":254,"line":9957},[252,41120,34478],{"class":321},[252,41122,41123,41125,41127,41129],{"class":254,"line":9963},[252,41124,32591],{"class":311},[252,41126,263],{"class":262},[252,41128,34487],{"class":367},[252,41130,34490],{"class":262},[252,41132,41133],{"class":254,"line":9984},[252,41134,2539],{"emptyLinePlaceholder":181},[252,41136,41137],{"class":254,"line":9990},[252,41138,34499],{"class":321},[252,41140,41141,41143,41145,41147,41149],{"class":254,"line":10004},[252,41142,1670],{"class":258},[252,41144,31360],{"class":311},[252,41146,3088],{"class":258},[252,41148,31365],{"class":367},[252,41150,3878],{"class":262},[252,41152,41153],{"class":254,"line":10010},[252,41154,34516],{"class":321},[252,41156,41157,41159,41161],{"class":254,"line":10037},[252,41158,31429],{"class":262},[252,41160,308],{"class":258},[252,41162,41163],{"class":262},"VGG16()\n",[252,41165,41166],{"class":254,"line":10046},[252,41167,34529],{"class":321},[252,41169,41170],{"class":254,"line":10052},[252,41171,34534],{"class":321},[252,41173,41174,41176,41178],{"class":254,"line":10060},[252,41175,34539],{"class":262},[252,41177,34542],{"class":367},[252,41179,30637],{"class":262},[252,41181,41182],{"class":254,"line":10065},[252,41183,34549],{"class":321},[252,41185,41186,41188,41190],{"class":254,"line":16744},[252,41187,34162],{"class":262},[252,41189,308],{"class":258},[252,41191,34558],{"class":262},[252,41193,41194],{"class":254,"line":16750},[252,41195,34563],{"class":321},[252,41197,41198],{"class":254,"line":16773},[252,41199,34568],{"class":262},[252,41201,41202],{"class":254,"line":16779},[252,41203,2539],{"emptyLinePlaceholder":181},[252,41205,41206],{"class":254,"line":16802},[252,41207,34577],{"class":321},[252,41209,41210],{"class":254,"line":16816},[252,41211,34582],{"class":321},[252,41213,41214,41216,41218,41220,41222,41224,41226],{"class":254,"line":16836},[252,41215,31377],{"class":262},[252,41217,308],{"class":258},[252,41219,31384],{"class":367},[252,41221,1843],{"class":258},[252,41223,31389],{"class":262},[252,41225,1840],{"class":258},[252,41227,34259],{"class":367},[252,41229,41230,41232,41234],{"class":254,"line":16842},[252,41231,31429],{"class":262},[252,41233,308],{"class":258},[252,41235,32429],{"class":262},[252,41237,41238],{"class":254,"line":16853},[252,41239,34611],{"class":321},[252,41241,41242],{"class":254,"line":16876},[252,41243,34616],{"class":321},[252,41245,41246,41248,41250,41252,41254,41256,41258,41260,41262,41264,41266,41268,41270,41272,41274,41276,41278,41280,41282,41284,41286,41288,41290],{"class":254,"line":16898},[252,41247,34621],{"class":262},[252,41249,308],{"class":258},[252,41251,1153],{"class":262},[252,41253,34628],{"class":367},[252,41255,641],{"class":262},[252,41257,34633],{"class":367},[252,41259,641],{"class":262},[252,41261,34638],{"class":367},[252,41263,641],{"class":262},[252,41265,34643],{"class":367},[252,41267,641],{"class":262},[252,41269,34648],{"class":367},[252,41271,641],{"class":262},[252,41273,34653],{"class":367},[252,41275,641],{"class":262},[252,41277,34658],{"class":367},[252,41279,641],{"class":262},[252,41281,34663],{"class":367},[252,41283,641],{"class":262},[252,41285,34668],{"class":367},[252,41287,641],{"class":262},[252,41289,34673],{"class":367},[252,41291,33386],{"class":262},[252,41293,41294,41296],{"class":254,"line":16903},[252,41295,34318],{"class":258},[252,41297,33024],{"class":262},[252,41299,41300],{"class":254,"line":16909},[252,41301,34686],{"class":321},[252,41303,41304,41306,41308,41310],{"class":254,"line":16923},[252,41305,3542],{"class":258},[252,41307,34693],{"class":262},[252,41309,26183],{"class":258},[252,41311,34337],{"class":262},[252,41313,41314,41316,41318],{"class":254,"line":16936},[252,41315,32750],{"class":262},[252,41317,308],{"class":258},[252,41319,32755],{"class":262},[252,41321,41322,41324,41326],{"class":254,"line":16941},[252,41323,32765],{"class":262},[252,41325,308],{"class":258},[252,41327,32770],{"class":262},[252,41329,41330],{"class":254,"line":16955},[252,41331,2539],{"emptyLinePlaceholder":181},[252,41333,41334],{"class":254,"line":16960},[252,41335,34722],{"class":321},[252,41337,41338],{"class":254,"line":16966},[252,41339,33015],{"class":262},[252,41341,41342],{"class":254,"line":16971},[252,41343,34731],{"class":321},[252,41345,41346,41348,41350],{"class":254,"line":16985},[252,41347,32800],{"class":262},[252,41349,308],{"class":258},[252,41351,32805],{"class":262},[252,41353,41354],{"class":254,"line":16990},[252,41355,34744],{"class":321},[252,41357,41358,41360,41362,41364,41366,41368,41370],{"class":254,"line":16995},[252,41359,32817],{"class":262},[252,41361,308],{"class":258},[252,41363,32822],{"class":262},[252,41365,32825],{"class":5356},[252,41367,308],{"class":258},[252,41369,480],{"class":311},[252,41371,269],{"class":262},[252,41373,41374],{"class":254,"line":17009},[252,41375,34765],{"class":321},[252,41377,41378,41380,41382],{"class":254,"line":17021},[252,41379,34770],{"class":262},[252,41381,308],{"class":258},[252,41383,34775],{"class":262},[252,41385,41386,41388,41390],{"class":254,"line":17026},[252,41387,34780],{"class":262},[252,41389,308],{"class":258},[252,41391,34785],{"class":262},[252,41393,41394,41396,41398,41400,41402,41404,41406,41408],{"class":254,"line":17039},[252,41395,34790],{"class":311},[252,41397,263],{"class":262},[252,41399,34795],{"class":367},[252,41401,34798],{"class":262},[252,41403,34801],{"class":367},[252,41405,641],{"class":262},[252,41407,34806],{"class":367},[252,41409,34809],{"class":262},[224,41411,41413],{"id":41412},"_23googlenet","2.3.GoogLeNet",[22137,41415,41417],{"id":41416},"_231原理","2.3.1.原理",[207,41419,41420],{},[210,41421,41422],{},"网络结构",[19,41424,41425],{},[1601,41426],{"alt":169,"src":41427},"\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",[19,41429,41430],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41432,41433],{},[1601,41434],{"alt":169,"src":41435},"\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",[19,41437,41438],{},[1601,41439],{"alt":169,"src":41440},"\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",[19,41442,41443],{},[1601,41444],{"alt":169,"src":41445},"\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",[207,41447,41448],{"start":170},[210,41449,41450],{},"1x1卷积的优点",[19,41452,41453],{},[1601,41454],{"alt":169,"src":41455},"\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",[207,41457,41458],{"start":1318},[210,41459,41460],{},"全局平均池化层优点",[19,41462,41463],{},[1601,41464],{"alt":169,"src":41465},"\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",[19,41467,41468],{},[1601,41469],{"alt":169,"src":41470},"\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",[207,41472,41473],{"start":1333},[210,41474,41475],{},"参数详细描述",[19,41477,41478],{},[1601,41479],{"alt":169,"src":41480},"\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",[19,41482,41483],{},[1601,41484],{"alt":169,"src":41485},"\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",[19,41487,41488],{},[1601,41489],{"alt":169,"src":41490},"\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",[19,41492,41493],{},[1601,41494],{"alt":169,"src":41495},"\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",[19,41497,41498],{},[1601,41499],{"alt":169,"src":41500},"\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",[19,41502,41503],{},[1601,41504],{"alt":169,"src":41505},"\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",[19,41507,41508],{},[1601,41509],{"alt":169,"src":41510},"\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",[19,41512,41513],{},[1601,41514],{"alt":169,"src":41515},"\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",[19,41517,41518],{},[1601,41519],{"alt":169,"src":41520},"\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",[19,41522,41523],{},[1601,41524],{"alt":169,"src":41525},"\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",[19,41527,41528],{},[1601,41529],{"alt":169,"src":41530},"\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",[19,41532,41533],{},[1601,41534],{"alt":169,"src":41535},"\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",[19,41537,41538],{},[1601,41539],{"alt":169,"src":41540},"\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",[19,41542,41543],{},[1601,41544],{"alt":169,"src":41545},"\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",[19,41547,41548],{},[1601,41549],{"alt":169,"src":41550},"\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",[19,41552,41553],{},[1601,41554],{"alt":169,"src":41555},"\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",[19,41557,41558],{},[1601,41559],{"alt":169,"src":41560},"\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",[19,41562,41563],{},[1601,41564],{"alt":169,"src":41565},"\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",[19,41567,41568],{},[1601,41569],{"alt":169,"src":41570},"\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",[19,41572,41573],{},[1601,41574],{"alt":169,"src":41575},"\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",[19,41577,41578],{},[1601,41579],{"alt":169,"src":41580},"\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",[22137,41582,41584],{"id":41583},"_232代码实现","2.3.2.代码实现",[207,41586,41587],{},[210,41588,30851],{},[19,41590,41591],{},"根据原理一步一步搭建即可",[244,41593,41595],{"className":30518,"code":41594,"language":30520,"meta":169,"style":169},"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",[22,41596,41597,41603,41613,41623,41627,41644,41653,41668,41678,41683,41716,41721,41758,41805,41810,41846,41893,41898,41903,41938,41970,41974,41982,41998,42022,42047,42068,42073,42088,42092,42096,42101,42118,42123,42132,42147,42158,42202,42206,42234,42238,42249,42277,42281,42318,42322,42350,42354,42365,42401,42433,42461,42465,42476,42510,42542,42574,42607,42641,42669,42673,42684,42717,42749,42763,42767,42780,42784,42789,42801,42809,42831,42836,42841,42846,42851,42856,42861,42875,42883,42892,42905,42920,42929,42933,42941,42952,42963,42974,42985,42996,43002,43006,43011,43023,43043,43052],{"__ignoreMap":169},[252,41598,41599,41601],{"class":254,"line":255},[252,41600,30532],{"class":258},[252,41602,30535],{"class":262},[252,41604,41605,41607,41609,41611],{"class":254,"line":170},[252,41606,30877],{"class":258},[252,41608,30880],{"class":262},[252,41610,30532],{"class":258},[252,41612,30885],{"class":262},[252,41614,41615,41617,41619,41621],{"class":254,"line":1318},[252,41616,30877],{"class":258},[252,41618,30897],{"class":262},[252,41620,30532],{"class":258},[252,41622,30902],{"class":262},[252,41624,41625],{"class":254,"line":1333},[252,41626,2539],{"emptyLinePlaceholder":181},[252,41628,41629,41631,41634,41636,41638,41640,41642],{"class":254,"line":1339},[252,41630,14834],{"class":258},[252,41632,41633],{"class":2102}," Inception",[252,41635,263],{"class":262},[252,41637,30918],{"class":2102},[252,41639,821],{"class":262},[252,41641,30923],{"class":2102},[252,41643,30926],{"class":262},[252,41645,41646,41648,41650],{"class":254,"line":1353},[252,41647,30941],{"class":258},[252,41649,30944],{"class":311},[252,41651,41652],{"class":262},"(self,in_channels,c1,c2,c3,c4):\n",[252,41654,41655,41657,41660,41662,41664,41666],{"class":254,"line":1359},[252,41656,30957],{"class":311},[252,41658,41659],{"class":262},"(Inception,",[252,41661,30963],{"class":311},[252,41663,30966],{"class":262},[252,41665,30969],{"class":311},[252,41667,2115],{"class":262},[252,41669,41670,41672,41674,41676],{"class":254,"line":1450},[252,41671,30985],{"class":311},[252,41673,34911],{"class":262},[252,41675,308],{"class":258},[252,41677,34916],{"class":262},[252,41679,41680],{"class":254,"line":1456},[252,41681,41682],{"class":321},"        # 路线1：定义1*1卷积\n",[252,41684,41685,41687,41690,41692,41694,41696,41698,41701,41703,41705,41708,41710,41712,41714],{"class":254,"line":1468},[252,41686,30985],{"class":311},[252,41688,41689],{"class":262},".p1_1",[252,41691,308],{"class":258},[252,41693,30993],{"class":262},[252,41695,30996],{"class":5356},[252,41697,308],{"class":258},[252,41699,41700],{"class":262},"in_channels,",[252,41702,31005],{"class":5356},[252,41704,308],{"class":258},[252,41706,41707],{"class":262},"c1,",[252,41709,31014],{"class":5356},[252,41711,308],{"class":258},[252,41713,480],{"class":311},[252,41715,269],{"class":262},[252,41717,41718],{"class":254,"line":1751},[252,41719,41720],{"class":321},"        # 路线2：定义1*1卷积和3*3\n",[252,41722,41723,41725,41728,41730,41732,41734,41736,41738,41740,41742,41745,41747,41750,41752,41754,41756],{"class":254,"line":1756},[252,41724,30985],{"class":311},[252,41726,41727],{"class":262},".p2_1",[252,41729,308],{"class":258},[252,41731,30993],{"class":262},[252,41733,30996],{"class":5356},[252,41735,308],{"class":258},[252,41737,41700],{"class":262},[252,41739,31005],{"class":5356},[252,41741,308],{"class":258},[252,41743,41744],{"class":262},"c2[",[252,41746,454],{"class":311},[252,41748,41749],{"class":262},"],",[252,41751,31014],{"class":5356},[252,41753,308],{"class":258},[252,41755,480],{"class":311},[252,41757,269],{"class":262},[252,41759,41760,41762,41765,41767,41769,41771,41773,41775,41777,41779,41781,41783,41785,41787,41789,41791,41793,41795,41797,41799,41801,41803],{"class":254,"line":1762},[252,41761,30985],{"class":311},[252,41763,41764],{"class":262},".p2_2",[252,41766,308],{"class":258},[252,41768,30993],{"class":262},[252,41770,30996],{"class":5356},[252,41772,308],{"class":258},[252,41774,41744],{"class":262},[252,41776,454],{"class":311},[252,41778,41749],{"class":262},[252,41780,31005],{"class":5356},[252,41782,308],{"class":258},[252,41784,41744],{"class":262},[252,41786,480],{"class":311},[252,41788,41749],{"class":262},[252,41790,31014],{"class":5356},[252,41792,308],{"class":258},[252,41794,334],{"class":311},[252,41796,641],{"class":262},[252,41798,31023],{"class":5356},[252,41800,308],{"class":258},[252,41802,480],{"class":311},[252,41804,269],{"class":262},[252,41806,41807],{"class":254,"line":1767},[252,41808,41809],{"class":321},"        # 路线3：定义1*1卷积和5*5\n",[252,41811,41812,41814,41817,41819,41821,41823,41825,41827,41829,41831,41834,41836,41838,41840,41842,41844],{"class":254,"line":1781},[252,41813,30985],{"class":311},[252,41815,41816],{"class":262},".p3_1",[252,41818,308],{"class":258},[252,41820,30993],{"class":262},[252,41822,30996],{"class":5356},[252,41824,308],{"class":258},[252,41826,41700],{"class":262},[252,41828,31005],{"class":5356},[252,41830,308],{"class":258},[252,41832,41833],{"class":262},"c3[",[252,41835,454],{"class":311},[252,41837,41749],{"class":262},[252,41839,31014],{"class":5356},[252,41841,308],{"class":258},[252,41843,480],{"class":311},[252,41845,269],{"class":262},[252,41847,41848,41850,41853,41855,41857,41859,41861,41863,41865,41867,41869,41871,41873,41875,41877,41879,41881,41883,41885,41887,41889,41891],{"class":254,"line":1786},[252,41849,30985],{"class":311},[252,41851,41852],{"class":262},".p3_2",[252,41854,308],{"class":258},[252,41856,30993],{"class":262},[252,41858,30996],{"class":5356},[252,41860,308],{"class":258},[252,41862,41833],{"class":262},[252,41864,454],{"class":311},[252,41866,41749],{"class":262},[252,41868,31005],{"class":5356},[252,41870,308],{"class":258},[252,41872,41833],{"class":262},[252,41874,480],{"class":311},[252,41876,41749],{"class":262},[252,41878,31014],{"class":5356},[252,41880,308],{"class":258},[252,41882,582],{"class":311},[252,41884,641],{"class":262},[252,41886,31023],{"class":5356},[252,41888,308],{"class":258},[252,41890,340],{"class":311},[252,41892,269],{"class":262},[252,41894,41895],{"class":254,"line":1792},[252,41896,41897],{"class":321},"        # 路线4：定义3*3最大池化和1*1卷积\n",[252,41899,41900],{"class":254,"line":1813},[252,41901,41902],{"class":321},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[252,41904,41905,41907,41910,41912,41914,41916,41918,41920,41922,41924,41926,41928,41930,41932,41934,41936],{"class":254,"line":1818},[252,41906,30985],{"class":311},[252,41908,41909],{"class":262},".p4_1",[252,41911,308],{"class":258},[252,41913,34969],{"class":262},[252,41915,31014],{"class":5356},[252,41917,308],{"class":258},[252,41919,334],{"class":311},[252,41921,641],{"class":262},[252,41923,31069],{"class":5356},[252,41925,308],{"class":258},[252,41927,480],{"class":311},[252,41929,641],{"class":262},[252,41931,31023],{"class":5356},[252,41933,308],{"class":258},[252,41935,480],{"class":311},[252,41937,269],{"class":262},[252,41939,41940,41942,41945,41947,41949,41951,41953,41955,41957,41959,41962,41964,41966,41968],{"class":254,"line":1832},[252,41941,30985],{"class":311},[252,41943,41944],{"class":262},".p4_2",[252,41946,308],{"class":258},[252,41948,30993],{"class":262},[252,41950,30996],{"class":5356},[252,41952,308],{"class":258},[252,41954,41700],{"class":262},[252,41956,31005],{"class":5356},[252,41958,308],{"class":258},[252,41960,41961],{"class":262},"c4,",[252,41963,31014],{"class":5356},[252,41965,308],{"class":258},[252,41967,480],{"class":311},[252,41969,269],{"class":262},[252,41971,41972],{"class":254,"line":1837},[252,41973,2539],{"emptyLinePlaceholder":181},[252,41975,41976,41978,41980],{"class":254,"line":1866},[252,41977,30941],{"class":258},[252,41979,31233],{"class":2102},[252,41981,31236],{"class":262},[252,41983,41984,41987,41989,41991,41993,41995],{"class":254,"line":1871},[252,41985,41986],{"class":262},"        p1",[252,41988,308],{"class":258},[252,41990,30963],{"class":311},[252,41992,35324],{"class":262},[252,41994,30963],{"class":311},[252,41996,41997],{"class":262},".p1_1(x))\n",[252,41999,42000,42002,42004,42006,42008,42010,42013,42015,42017,42019],{"class":254,"line":1888},[252,42001,7225],{"class":262},[252,42003,308],{"class":258},[252,42005,30963],{"class":311},[252,42007,35324],{"class":262},[252,42009,30963],{"class":311},[252,42011,42012],{"class":262},".p2_2(",[252,42014,30963],{"class":311},[252,42016,35324],{"class":262},[252,42018,30963],{"class":311},[252,42020,42021],{"class":262},".p2_1(x))))\n",[252,42023,42024,42027,42029,42031,42033,42035,42038,42040,42042,42044],{"class":254,"line":1893},[252,42025,42026],{"class":262},"        p3",[252,42028,308],{"class":258},[252,42030,30963],{"class":311},[252,42032,35324],{"class":262},[252,42034,30963],{"class":311},[252,42036,42037],{"class":262},".p3_2(",[252,42039,30963],{"class":311},[252,42041,35324],{"class":262},[252,42043,30963],{"class":311},[252,42045,42046],{"class":262},".p3_1(x))))\n",[252,42048,42049,42052,42054,42056,42058,42060,42063,42065],{"class":254,"line":1898},[252,42050,42051],{"class":262},"        p4",[252,42053,308],{"class":258},[252,42055,30963],{"class":311},[252,42057,35324],{"class":262},[252,42059,30963],{"class":311},[252,42061,42062],{"class":262},".p4_2(",[252,42064,30963],{"class":311},[252,42066,42067],{"class":262},".p4_1(x)))\n",[252,42069,42070],{"class":254,"line":1903},[252,42071,42072],{"class":321},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[252,42074,42075,42077,42080,42082,42084,42086],{"class":254,"line":1917},[252,42076,14892],{"class":258},[252,42078,42079],{"class":262}," torch.cat((p1,p2,p3,p4),",[252,42081,32825],{"class":5356},[252,42083,308],{"class":258},[252,42085,480],{"class":311},[252,42087,269],{"class":262},[252,42089,42090],{"class":254,"line":1922},[252,42091,2539],{"emptyLinePlaceholder":181},[252,42093,42094],{"class":254,"line":2716},[252,42095,2539],{"emptyLinePlaceholder":181},[252,42097,42098],{"class":254,"line":2730},[252,42099,42100],{"class":321},"# 搭建GoogLeNet网络\n",[252,42102,42103,42105,42108,42110,42112,42114,42116],{"class":254,"line":2738},[252,42104,14834],{"class":258},[252,42106,42107],{"class":2102}," GoogLeNet",[252,42109,263],{"class":262},[252,42111,30918],{"class":2102},[252,42113,821],{"class":262},[252,42115,30923],{"class":2102},[252,42117,30926],{"class":262},[252,42119,42120],{"class":254,"line":2743},[252,42121,42122],{"class":321},"    # 必须把Inception导入到里边\n",[252,42124,42125,42127,42129],{"class":254,"line":2749},[252,42126,30941],{"class":258},[252,42128,30944],{"class":311},[252,42130,42131],{"class":262},"(self,Inception):\n",[252,42133,42134,42136,42139,42141,42143,42145],{"class":254,"line":2755},[252,42135,30957],{"class":311},[252,42137,42138],{"class":262},"(GoogLeNet,",[252,42140,30963],{"class":311},[252,42142,30966],{"class":262},[252,42144,30969],{"class":311},[252,42146,2115],{"class":262},[252,42148,42149,42151,42154,42156],{"class":254,"line":2760},[252,42150,30985],{"class":311},[252,42152,42153],{"class":262},".b1",[252,42155,308],{"class":258},[252,42157,38149],{"class":262},[252,42159,42160,42162,42164,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188,42190,42192,42194,42196,42198,42200],{"class":254,"line":8088},[252,42161,38154],{"class":262},[252,42163,30996],{"class":5356},[252,42165,308],{"class":258},[252,42167,480],{"class":311},[252,42169,641],{"class":262},[252,42171,31005],{"class":5356},[252,42173,308],{"class":258},[252,42175,466],{"class":311},[252,42177,641],{"class":262},[252,42179,31014],{"class":5356},[252,42181,308],{"class":258},[252,42183,632],{"class":311},[252,42185,641],{"class":262},[252,42187,31069],{"class":5356},[252,42189,308],{"class":258},[252,42191,340],{"class":311},[252,42193,641],{"class":262},[252,42195,31023],{"class":5356},[252,42197,308],{"class":258},[252,42199,334],{"class":311},[252,42201,38187],{"class":262},[252,42203,42204],{"class":254,"line":8112},[252,42205,38192],{"class":262},[252,42207,42208,42210,42212,42214,42216,42218,42220,42222,42224,42226,42228,42230,42232],{"class":254,"line":8117},[252,42209,38237],{"class":262},[252,42211,31014],{"class":5356},[252,42213,308],{"class":258},[252,42215,334],{"class":311},[252,42217,641],{"class":262},[252,42219,31069],{"class":5356},[252,42221,308],{"class":258},[252,42223,340],{"class":311},[252,42225,641],{"class":262},[252,42227,31023],{"class":5356},[252,42229,308],{"class":258},[252,42231,480],{"class":311},[252,42233,269],{"class":262},[252,42235,42236],{"class":254,"line":8123},[252,42237,38266],{"class":262},[252,42239,42240,42242,42245,42247],{"class":254,"line":8150},[252,42241,30985],{"class":311},[252,42243,42244],{"class":262},".b2",[252,42246,308],{"class":258},[252,42248,38149],{"class":262},[252,42250,42251,42253,42255,42257,42259,42261,42263,42265,42267,42269,42271,42273,42275],{"class":254,"line":8155},[252,42252,38154],{"class":262},[252,42254,30996],{"class":5356},[252,42256,308],{"class":258},[252,42258,466],{"class":311},[252,42260,641],{"class":262},[252,42262,31005],{"class":5356},[252,42264,308],{"class":258},[252,42266,466],{"class":311},[252,42268,641],{"class":262},[252,42270,31014],{"class":5356},[252,42272,308],{"class":258},[252,42274,480],{"class":311},[252,42276,38187],{"class":262},[252,42278,42279],{"class":254,"line":8161},[252,42280,38192],{"class":262},[252,42282,42283,42285,42287,42289,42291,42293,42295,42297,42300,42302,42304,42306,42308,42310,42312,42314,42316],{"class":254,"line":8173},[252,42284,38154],{"class":262},[252,42286,30996],{"class":5356},[252,42288,308],{"class":258},[252,42290,466],{"class":311},[252,42292,641],{"class":262},[252,42294,31005],{"class":5356},[252,42296,308],{"class":258},[252,42298,42299],{"class":311},"192",[252,42301,641],{"class":262},[252,42303,31014],{"class":5356},[252,42305,308],{"class":258},[252,42307,334],{"class":311},[252,42309,641],{"class":262},[252,42311,31023],{"class":5356},[252,42313,308],{"class":258},[252,42315,480],{"class":311},[252,42317,38187],{"class":262},[252,42319,42320],{"class":254,"line":8185},[252,42321,38192],{"class":262},[252,42323,42324,42326,42328,42330,42332,42334,42336,42338,42340,42342,42344,42346,42348],{"class":254,"line":8197},[252,42325,38237],{"class":262},[252,42327,31014],{"class":5356},[252,42329,308],{"class":258},[252,42331,334],{"class":311},[252,42333,641],{"class":262},[252,42335,31069],{"class":5356},[252,42337,308],{"class":258},[252,42339,340],{"class":311},[252,42341,641],{"class":262},[252,42343,31023],{"class":5356},[252,42345,308],{"class":258},[252,42347,480],{"class":311},[252,42349,269],{"class":262},[252,42351,42352],{"class":254,"line":9856},[252,42353,38266],{"class":262},[252,42355,42356,42358,42361,42363],{"class":254,"line":9881},[252,42357,30985],{"class":311},[252,42359,42360],{"class":262},".b3",[252,42362,308],{"class":258},[252,42364,38149],{"class":262},[252,42366,42367,42370,42372,42374,42376,42379,42381,42383,42385,42388,42390,42392,42394,42397,42399],{"class":254,"line":9904},[252,42368,42369],{"class":262},"            Inception(",[252,42371,42299],{"class":311},[252,42373,641],{"class":262},[252,42375,466],{"class":311},[252,42377,42378],{"class":262},",(",[252,42380,472],{"class":311},[252,42382,641],{"class":262},[252,42384,32210],{"class":311},[252,42386,42387],{"class":262},"),(",[252,42389,864],{"class":311},[252,42391,641],{"class":262},[252,42393,460],{"class":311},[252,42395,42396],{"class":262},"),",[252,42398,460],{"class":311},[252,42400,38187],{"class":262},[252,42402,42403,42405,42407,42409,42411,42413,42415,42417,42419,42421,42423,42425,42427,42429,42431],{"class":254,"line":9928},[252,42404,42369],{"class":262},[252,42406,35010],{"class":311},[252,42408,641],{"class":262},[252,42410,32210],{"class":311},[252,42412,42378],{"class":262},[252,42414,32210],{"class":311},[252,42416,641],{"class":262},[252,42418,42299],{"class":311},[252,42420,42387],{"class":262},[252,42422,460],{"class":311},[252,42424,641],{"class":262},[252,42426,472],{"class":311},[252,42428,42396],{"class":262},[252,42430,466],{"class":311},[252,42432,38187],{"class":262},[252,42434,42435,42437,42439,42441,42443,42445,42447,42449,42451,42453,42455,42457,42459],{"class":254,"line":9933},[252,42436,38237],{"class":262},[252,42438,31014],{"class":5356},[252,42440,308],{"class":258},[252,42442,334],{"class":311},[252,42444,641],{"class":262},[252,42446,31069],{"class":5356},[252,42448,308],{"class":258},[252,42450,340],{"class":311},[252,42452,641],{"class":262},[252,42454,31023],{"class":5356},[252,42456,308],{"class":258},[252,42458,480],{"class":311},[252,42460,269],{"class":262},[252,42462,42463],{"class":254,"line":9938},[252,42464,38266],{"class":262},[252,42466,42467,42469,42472,42474],{"class":254,"line":9943},[252,42468,30985],{"class":311},[252,42470,42471],{"class":262},".b4",[252,42473,308],{"class":258},[252,42475,38149],{"class":262},[252,42477,42478,42480,42483,42485,42487,42489,42491,42493,42496,42498,42500,42502,42504,42506,42508],{"class":254,"line":9952},[252,42479,42369],{"class":262},[252,42481,42482],{"class":311},"480",[252,42484,641],{"class":262},[252,42486,42299],{"class":311},[252,42488,42378],{"class":262},[252,42490,472],{"class":311},[252,42492,641],{"class":262},[252,42494,42495],{"class":311},"208",[252,42497,42387],{"class":262},[252,42499,864],{"class":311},[252,42501,641],{"class":262},[252,42503,870],{"class":311},[252,42505,42396],{"class":262},[252,42507,466],{"class":311},[252,42509,38187],{"class":262},[252,42511,42512,42514,42516,42518,42520,42522,42524,42526,42528,42530,42532,42534,42536,42538,42540],{"class":254,"line":9957},[252,42513,42369],{"class":262},[252,42515,38597],{"class":311},[252,42517,641],{"class":262},[252,42519,21187],{"class":311},[252,42521,42378],{"class":262},[252,42523,881],{"class":311},[252,42525,641],{"class":262},[252,42527,31641],{"class":311},[252,42529,42387],{"class":262},[252,42531,1063],{"class":311},[252,42533,641],{"class":262},[252,42535,466],{"class":311},[252,42537,42396],{"class":262},[252,42539,466],{"class":311},[252,42541,38187],{"class":262},[252,42543,42544,42546,42548,42550,42552,42554,42556,42558,42560,42562,42564,42566,42568,42570,42572],{"class":254,"line":9963},[252,42545,42369],{"class":262},[252,42547,38597],{"class":311},[252,42549,641],{"class":262},[252,42551,32210],{"class":311},[252,42553,42378],{"class":262},[252,42555,32210],{"class":311},[252,42557,641],{"class":262},[252,42559,35010],{"class":311},[252,42561,42387],{"class":262},[252,42563,1063],{"class":311},[252,42565,641],{"class":262},[252,42567,466],{"class":311},[252,42569,42396],{"class":262},[252,42571,466],{"class":311},[252,42573,38187],{"class":262},[252,42575,42576,42578,42580,42582,42584,42586,42588,42590,42593,42595,42597,42599,42601,42603,42605],{"class":254,"line":9984},[252,42577,42369],{"class":262},[252,42579,38597],{"class":311},[252,42581,641],{"class":262},[252,42583,881],{"class":311},[252,42585,42378],{"class":262},[252,42587,32210],{"class":311},[252,42589,641],{"class":262},[252,42591,42592],{"class":311},"288",[252,42594,42387],{"class":262},[252,42596,460],{"class":311},[252,42598,641],{"class":262},[252,42600,466],{"class":311},[252,42602,42396],{"class":262},[252,42604,466],{"class":311},[252,42606,38187],{"class":262},[252,42608,42609,42611,42614,42616,42618,42620,42622,42624,42627,42629,42631,42633,42635,42637,42639],{"class":254,"line":9990},[252,42610,42369],{"class":262},[252,42612,42613],{"class":311},"528",[252,42615,641],{"class":262},[252,42617,35010],{"class":311},[252,42619,42378],{"class":262},[252,42621,21187],{"class":311},[252,42623,641],{"class":262},[252,42625,42626],{"class":311},"320",[252,42628,42387],{"class":262},[252,42630,460],{"class":311},[252,42632,641],{"class":262},[252,42634,32210],{"class":311},[252,42636,42396],{"class":262},[252,42638,32210],{"class":311},[252,42640,38187],{"class":262},[252,42642,42643,42645,42647,42649,42651,42653,42655,42657,42659,42661,42663,42665,42667],{"class":254,"line":10004},[252,42644,38237],{"class":262},[252,42646,31014],{"class":5356},[252,42648,308],{"class":258},[252,42650,334],{"class":311},[252,42652,641],{"class":262},[252,42654,31069],{"class":5356},[252,42656,308],{"class":258},[252,42658,340],{"class":311},[252,42660,641],{"class":262},[252,42662,31023],{"class":5356},[252,42664,308],{"class":258},[252,42666,480],{"class":311},[252,42668,269],{"class":262},[252,42670,42671],{"class":254,"line":10010},[252,42672,38266],{"class":262},[252,42674,42675,42677,42680,42682],{"class":254,"line":10037},[252,42676,30985],{"class":311},[252,42678,42679],{"class":262},".b5",[252,42681,308],{"class":258},[252,42683,38149],{"class":262},[252,42685,42686,42688,42691,42693,42695,42697,42699,42701,42703,42705,42707,42709,42711,42713,42715],{"class":254,"line":10046},[252,42687,42369],{"class":262},[252,42689,42690],{"class":311},"832",[252,42692,641],{"class":262},[252,42694,35010],{"class":311},[252,42696,42378],{"class":262},[252,42698,21187],{"class":311},[252,42700,641],{"class":262},[252,42702,42626],{"class":311},[252,42704,42387],{"class":262},[252,42706,460],{"class":311},[252,42708,641],{"class":262},[252,42710,32210],{"class":311},[252,42712,42396],{"class":262},[252,42714,32210],{"class":311},[252,42716,38187],{"class":262},[252,42718,42719,42721,42723,42725,42727,42729,42731,42733,42735,42737,42739,42741,42743,42745,42747],{"class":254,"line":10052},[252,42720,42369],{"class":262},[252,42722,42690],{"class":311},[252,42724,641],{"class":262},[252,42726,35080],{"class":311},[252,42728,42378],{"class":262},[252,42730,42299],{"class":311},[252,42732,641],{"class":262},[252,42734,35080],{"class":311},[252,42736,42387],{"class":262},[252,42738,870],{"class":311},[252,42740,641],{"class":262},[252,42742,32210],{"class":311},[252,42744,42396],{"class":262},[252,42746,32210],{"class":311},[252,42748,38187],{"class":262},[252,42750,42751,42754,42756,42758,42760],{"class":254,"line":10060},[252,42752,42753],{"class":262},"            nn.AdaptiveAvgPool2d((",[252,42755,480],{"class":311},[252,42757,641],{"class":262},[252,42759,480],{"class":311},[252,42761,42762],{"class":262},")),\n",[252,42764,42765],{"class":254,"line":10065},[252,42766,38930],{"class":262},[252,42768,42769,42771,42774,42776,42778],{"class":254,"line":16744},[252,42770,38935],{"class":262},[252,42772,42773],{"class":311},"1024",[252,42775,641],{"class":262},[252,42777,709],{"class":311},[252,42779,269],{"class":262},[252,42781,42782],{"class":254,"line":16750},[252,42783,38266],{"class":262},[252,42785,42786],{"class":254,"line":16773},[252,42787,42788],{"class":321},"        # 对模型参数初始化\n",[252,42790,42791,42793,42795,42797,42799],{"class":254,"line":16779},[252,42792,3542],{"class":258},[252,42794,39008],{"class":262},[252,42796,26183],{"class":258},[252,42798,39013],{"class":311},[252,42800,39016],{"class":262},[252,42802,42803,42805,42807],{"class":254,"line":16802},[252,42804,4781],{"class":258},[252,42806,39028],{"class":311},[252,42808,39031],{"class":262},[252,42810,42811,42813,42816,42818,42821,42823,42825,42827,42829],{"class":254,"line":16816},[252,42812,39041],{"class":262},[252,42814,42815],{"class":5356},"mode",[252,42817,308],{"class":258},[252,42819,42820],{"class":367},"'fan_out'",[252,42822,641],{"class":262},[252,42824,39044],{"class":5356},[252,42826,308],{"class":258},[252,42828,39049],{"class":367},[252,42830,269],{"class":262},[252,42832,42833],{"class":254,"line":16836},[252,42834,42835],{"class":321},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[252,42837,42838],{"class":254,"line":16842},[252,42839,42840],{"class":321},"                # ② mode = 'fan_out'决定使用的fan值：\n",[252,42842,42843],{"class":254,"line":16853},[252,42844,42845],{"class":321},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[252,42847,42848],{"class":254,"line":16876},[252,42849,42850],{"class":321},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[252,42852,42853],{"class":254,"line":16898},[252,42854,42855],{"class":321},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[252,42857,42858],{"class":254,"line":16903},[252,42859,42860],{"class":321},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[252,42862,42863,42865,42867,42869,42871,42873],{"class":254,"line":16909},[252,42864,39061],{"class":258},[252,42866,39064],{"class":262},[252,42868,39067],{"class":258},[252,42870,39070],{"class":258},[252,42872,39073],{"class":311},[252,42874,3878],{"class":262},[252,42876,42877,42879,42881],{"class":254,"line":16923},[252,42878,39085],{"class":262},[252,42880,454],{"class":311},[252,42882,269],{"class":262},[252,42884,42885,42888,42890],{"class":254,"line":16936},[252,42886,42887],{"class":258},"                elif",[252,42889,39028],{"class":311},[252,42891,39104],{"class":262},[252,42893,42894,42897,42899,42901,42903],{"class":254,"line":16941},[252,42895,42896],{"class":262},"                    nn.init.normal_(m.weight,",[252,42898,454],{"class":311},[252,42900,641],{"class":262},[252,42902,39126],{"class":311},[252,42904,269],{"class":262},[252,42906,42907,42910,42912,42914,42916,42918],{"class":254,"line":16955},[252,42908,42909],{"class":258},"                    if",[252,42911,39064],{"class":262},[252,42913,39067],{"class":258},[252,42915,39070],{"class":258},[252,42917,39073],{"class":311},[252,42919,3878],{"class":262},[252,42921,42922,42925,42927],{"class":254,"line":16960},[252,42923,42924],{"class":262},"                        nn.init.constant_(m.bias,",[252,42926,454],{"class":311},[252,42928,269],{"class":262},[252,42930,42931],{"class":254,"line":16966},[252,42932,35305],{"class":321},[252,42934,42935,42937,42939],{"class":254,"line":16971},[252,42936,30941],{"class":258},[252,42938,31233],{"class":2102},[252,42940,31236],{"class":262},[252,42942,42943,42945,42947,42949],{"class":254,"line":16985},[252,42944,31241],{"class":262},[252,42946,308],{"class":258},[252,42948,30963],{"class":311},[252,42950,42951],{"class":262},".b1(x)\n",[252,42953,42954,42956,42958,42960],{"class":254,"line":16990},[252,42955,31241],{"class":262},[252,42957,308],{"class":258},[252,42959,30963],{"class":311},[252,42961,42962],{"class":262},".b2(x)\n",[252,42964,42965,42967,42969,42971],{"class":254,"line":16995},[252,42966,31241],{"class":262},[252,42968,308],{"class":258},[252,42970,30963],{"class":311},[252,42972,42973],{"class":262},".b3(x)\n",[252,42975,42976,42978,42980,42982],{"class":254,"line":17009},[252,42977,31241],{"class":262},[252,42979,308],{"class":258},[252,42981,30963],{"class":311},[252,42983,42984],{"class":262},".b4(x)\n",[252,42986,42987,42989,42991,42993],{"class":254,"line":17021},[252,42988,31241],{"class":262},[252,42990,308],{"class":258},[252,42992,30963],{"class":311},[252,42994,42995],{"class":262},".b5(x)\n",[252,42997,42998,43000],{"class":254,"line":17026},[252,42999,14892],{"class":258},[252,43001,31349],{"class":262},[252,43003,43004],{"class":254,"line":17039},[252,43005,2539],{"emptyLinePlaceholder":181},[252,43007,43008],{"class":254,"line":17044},[252,43009,43010],{"class":321},"# 模型展示\n",[252,43012,43013,43015,43017,43019,43021],{"class":254,"line":17049},[252,43014,1670],{"class":258},[252,43016,31360],{"class":311},[252,43018,3088],{"class":258},[252,43020,31365],{"class":367},[252,43022,3878],{"class":262},[252,43024,43025,43027,43029,43031,43033,43035,43037,43039,43041],{"class":254,"line":17054},[252,43026,31377],{"class":262},[252,43028,308],{"class":258},[252,43030,30591],{"class":262},[252,43032,31384],{"class":367},[252,43034,1843],{"class":258},[252,43036,31389],{"class":262},[252,43038,1840],{"class":258},[252,43040,30616],{"class":367},[252,43042,269],{"class":262},[252,43044,43045,43047,43049],{"class":254,"line":17067},[252,43046,31429],{"class":262},[252,43048,308],{"class":258},[252,43050,43051],{"class":262},"GoogLeNet(Inception).to(device)\n",[252,43053,43054,43056,43058,43060,43062,43064,43066,43068],{"class":254,"line":17072},[252,43055,31439],{"class":311},[252,43057,31442],{"class":262},[252,43059,480],{"class":311},[252,43061,641],{"class":262},[252,43063,31641],{"class":311},[252,43065,641],{"class":262},[252,43067,31641],{"class":311},[252,43069,31455],{"class":262},[207,43071,43072],{"start":170},[210,43073,39323],{},[244,43075,43077],{"className":30518,"code":43076,"language":30520,"meta":169,"style":169},"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",[22,43078,43079,43085,43091,43101,43107,43117,43127,43137,43147,43157,43161,43172,43182,43186,43190,43194,43202,43214,43224,43240,43250,43282,43296,43306,43316,43320,43330,43344,43354,43364,43374,43380,43384,43388,43392,43396,43400,43408,43428,43432,43436,43440,43444,43448,43464,43468,43472,43480,43484,43488,43496,43500,43504,43508,43516,43520,43524,43528,43532,43540,43544,43552,43556,43564,43568,43576,43580,43588,43592,43596,43604,43608,43612,43616,43628,43652,43666,43670,43674,43678,43686,43690,43698,43702,43710,43714,43722,43726,43734,43738,43746,43750,43762,43766,43774,43778,43786,43790,43794,43798,43802,43810,43814,43830,43834,43842,43846,43850,43854,43858,43862,43866,43870,43886,43890,43902,43906,43918,43922,43934,43938,43946,43950,43958,43962,43966,43970,43976,43980,43988,43992,44008,44012,44020,44024,44040,44052,44056,44068,44072,44076,44084,44088,44092,44100,44104,44112,44116,44124,44128,44132,44174,44216,44220,44224,44240,44244,44260,44264,44268,44276,44280,44284,44296,44334,44338,44342,44350,44354,44368,44378,44384,44390,44396,44402,44406,44410,44416,44420,44424,44432,44436,44454,44458,44462,44466,44482,44486,44490,44494,44498,44502,44522,44542,44546,44550,44554,44562,44570,44574,44590,44610,44630,44634,44638,44646,44654,44658,44662,44666,44678,44682,44692,44700,44717],{"__ignoreMap":169},[252,43080,43081,43083],{"class":254,"line":255},[252,43082,30532],{"class":258},[252,43084,31962],{"class":262},[252,43086,43087,43089],{"class":254,"line":170},[252,43088,30532],{"class":258},[252,43090,31969],{"class":262},[252,43092,43093,43095,43097,43099],{"class":254,"line":1318},[252,43094,30532],{"class":258},[252,43096,31980],{"class":262},[252,43098,31523],{"class":258},[252,43100,31985],{"class":262},[252,43102,43103,43105],{"class":254,"line":1333},[252,43104,30532],{"class":258},[252,43106,30535],{"class":262},[252,43108,43109,43111,43113,43115],{"class":254,"line":1339},[252,43110,30877],{"class":258},[252,43112,31555],{"class":262},[252,43114,30532],{"class":258},[252,43116,32002],{"class":262},[252,43118,43119,43121,43123,43125],{"class":254,"line":1353},[252,43120,30877],{"class":258},[252,43122,31508],{"class":262},[252,43124,30532],{"class":258},[252,43126,31513],{"class":262},[252,43128,43129,43131,43133,43135],{"class":254,"line":1359},[252,43130,30877],{"class":258},[252,43132,31538],{"class":262},[252,43134,30532],{"class":258},[252,43136,31543],{"class":262},[252,43138,43139,43141,43143,43145],{"class":254,"line":1450},[252,43140,30532],{"class":258},[252,43142,31555],{"class":262},[252,43144,31523],{"class":258},[252,43146,31560],{"class":262},[252,43148,43149,43151,43153,43155],{"class":254,"line":1456},[252,43150,30532],{"class":258},[252,43152,31572],{"class":262},[252,43154,31523],{"class":258},[252,43156,31577],{"class":262},[252,43158,43159],{"class":254,"line":1468},[252,43160,32047],{"class":321},[252,43162,43163,43165,43167,43169],{"class":254,"line":1751},[252,43164,30877],{"class":258},[252,43166,32054],{"class":262},[252,43168,30532],{"class":258},[252,43170,43171],{"class":262}," GoogLeNet, Inception\n",[252,43173,43174,43176,43178,43180],{"class":254,"line":1756},[252,43175,30877],{"class":258},[252,43177,30880],{"class":262},[252,43179,30532],{"class":258},[252,43181,30885],{"class":262},[252,43183,43184],{"class":254,"line":1762},[252,43185,2539],{"emptyLinePlaceholder":181},[252,43187,43188],{"class":254,"line":1767},[252,43189,2539],{"emptyLinePlaceholder":181},[252,43191,43192],{"class":254,"line":1781},[252,43193,32082],{"class":321},[252,43195,43196,43198,43200],{"class":254,"line":1786},[252,43197,32087],{"class":258},[252,43199,32090],{"class":2102},[252,43201,32093],{"class":262},[252,43203,43204,43206,43208,43210,43212],{"class":254,"line":1792},[252,43205,32098],{"class":262},[252,43207,308],{"class":258},[252,43209,31595],{"class":262},[252,43211,31603],{"class":367},[252,43213,31606],{"class":262},[252,43215,43216,43218,43220,43222],{"class":254,"line":1813},[252,43217,32111],{"class":5356},[252,43219,308],{"class":258},[252,43221,31616],{"class":311},[252,43223,31606],{"class":262},[252,43225,43226,43228,43230,43232,43234,43236,43238],{"class":254,"line":1818},[252,43227,32122],{"class":5356},[252,43229,308],{"class":258},[252,43231,31633],{"class":262},[252,43233,31636],{"class":5356},[252,43235,308],{"class":258},[252,43237,35589],{"class":311},[252,43239,31644],{"class":262},[252,43241,43242,43244,43246,43248],{"class":254,"line":1832},[252,43243,32139],{"class":5356},[252,43245,308],{"class":258},[252,43247,31616],{"class":311},[252,43249,269],{"class":262},[252,43251,43252,43254,43256,43258,43260,43262,43264,43266,43268,43270,43272,43274,43276,43278,43280],{"class":254,"line":1837},[252,43253,32150],{"class":262},[252,43255,308],{"class":258},[252,43257,32155],{"class":262},[252,43259,32158],{"class":311},[252,43261,263],{"class":262},[252,43263,32163],{"class":311},[252,43265,718],{"class":258},[252,43267,7498],{"class":311},[252,43269,32170],{"class":262},[252,43271,32158],{"class":311},[252,43273,263],{"class":262},[252,43275,32177],{"class":311},[252,43277,718],{"class":258},[252,43279,7498],{"class":311},[252,43281,32184],{"class":262},[252,43283,43284,43286,43288,43290,43292,43294],{"class":254,"line":1866},[252,43285,32189],{"class":262},[252,43287,308],{"class":258},[252,43289,32194],{"class":262},[252,43291,31677],{"class":5356},[252,43293,308],{"class":258},[252,43295,31682],{"class":262},[252,43297,43298,43300,43302,43304],{"class":254,"line":1871},[252,43299,32205],{"class":5356},[252,43301,308],{"class":258},[252,43303,460],{"class":311},[252,43305,31606],{"class":262},[252,43307,43308,43310,43312,43314],{"class":254,"line":1888},[252,43309,32217],{"class":5356},[252,43311,308],{"class":258},[252,43313,31616],{"class":311},[252,43315,31606],{"class":262},[252,43317,43318],{"class":254,"line":1893},[252,43319,32228],{"class":321},[252,43321,43322,43324,43326,43328],{"class":254,"line":1898},[252,43323,32233],{"class":5356},[252,43325,308],{"class":258},[252,43327,658],{"class":311},[252,43329,269],{"class":262},[252,43331,43332,43334,43336,43338,43340,43342],{"class":254,"line":1903},[252,43333,32244],{"class":262},[252,43335,308],{"class":258},[252,43337,31674],{"class":262},[252,43339,31677],{"class":5356},[252,43341,308],{"class":258},[252,43343,32255],{"class":262},[252,43345,43346,43348,43350,43352],{"class":254,"line":1917},[252,43347,32260],{"class":5356},[252,43349,308],{"class":258},[252,43351,460],{"class":311},[252,43353,31606],{"class":262},[252,43355,43356,43358,43360,43362],{"class":254,"line":1922},[252,43357,32271],{"class":5356},[252,43359,308],{"class":258},[252,43361,31616],{"class":311},[252,43363,31606],{"class":262},[252,43365,43366,43368,43370,43372],{"class":254,"line":2716},[252,43367,32282],{"class":5356},[252,43369,308],{"class":258},[252,43371,658],{"class":311},[252,43373,269],{"class":262},[252,43375,43376,43378],{"class":254,"line":2730},[252,43377,4229],{"class":258},[252,43379,32295],{"class":262},[252,43381,43382],{"class":254,"line":2738},[252,43383,2539],{"emptyLinePlaceholder":181},[252,43385,43386],{"class":254,"line":2743},[252,43387,32304],{"class":321},[252,43389,43390],{"class":254,"line":2749},[252,43391,32309],{"class":321},[252,43393,43394],{"class":254,"line":2755},[252,43395,2539],{"emptyLinePlaceholder":181},[252,43397,43398],{"class":254,"line":2760},[252,43399,32318],{"class":321},[252,43401,43402,43404,43406],{"class":254,"line":8088},[252,43403,32087],{"class":258},[252,43405,32325],{"class":2102},[252,43407,32328],{"class":262},[252,43409,43410,43412,43414,43416,43418,43420,43422,43424,43426],{"class":254,"line":8112},[252,43411,31377],{"class":262},[252,43413,308],{"class":258},[252,43415,30591],{"class":262},[252,43417,31384],{"class":367},[252,43419,1843],{"class":258},[252,43421,31389],{"class":262},[252,43423,1840],{"class":258},[252,43425,32347],{"class":367},[252,43427,269],{"class":262},[252,43429,43430],{"class":254,"line":8117},[252,43431,2539],{"emptyLinePlaceholder":181},[252,43433,43434],{"class":254,"line":8123},[252,43435,2539],{"emptyLinePlaceholder":181},[252,43437,43438],{"class":254,"line":8150},[252,43439,32362],{"class":321},[252,43441,43442],{"class":254,"line":8155},[252,43443,32367],{"class":321},[252,43445,43446],{"class":254,"line":8161},[252,43447,32372],{"class":321},[252,43449,43450,43452,43454,43456,43458,43460,43462],{"class":254,"line":8173},[252,43451,32377],{"class":262},[252,43453,308],{"class":258},[252,43455,32382],{"class":262},[252,43457,32385],{"class":5356},[252,43459,308],{"class":258},[252,43461,32390],{"class":311},[252,43463,269],{"class":262},[252,43465,43466],{"class":254,"line":8185},[252,43467,2539],{"emptyLinePlaceholder":181},[252,43469,43470],{"class":254,"line":8197},[252,43471,32401],{"class":321},[252,43473,43474,43476,43478],{"class":254,"line":9856},[252,43475,32406],{"class":262},[252,43477,308],{"class":258},[252,43479,32411],{"class":262},[252,43481,43482],{"class":254,"line":9881},[252,43483,2539],{"emptyLinePlaceholder":181},[252,43485,43486],{"class":254,"line":9904},[252,43487,32420],{"class":321},[252,43489,43490,43492,43494],{"class":254,"line":9928},[252,43491,31429],{"class":262},[252,43493,308],{"class":258},[252,43495,32429],{"class":262},[252,43497,43498],{"class":254,"line":9933},[252,43499,32434],{"class":321},[252,43501,43502],{"class":254,"line":9938},[252,43503,32439],{"class":321},[252,43505,43506],{"class":254,"line":9943},[252,43507,32444],{"class":321},[252,43509,43510,43512,43514],{"class":254,"line":9952},[252,43511,32449],{"class":262},[252,43513,308],{"class":258},[252,43515,32454],{"class":262},[252,43517,43518],{"class":254,"line":9957},[252,43519,2539],{"emptyLinePlaceholder":181},[252,43521,43522],{"class":254,"line":9963},[252,43523,2539],{"emptyLinePlaceholder":181},[252,43525,43526],{"class":254,"line":9984},[252,43527,32467],{"class":321},[252,43529,43530],{"class":254,"line":9990},[252,43531,32472],{"class":321},[252,43533,43534,43536,43538],{"class":254,"line":10004},[252,43535,32477],{"class":262},[252,43537,308],{"class":258},[252,43539,32482],{"class":311},[252,43541,43542],{"class":254,"line":10010},[252,43543,32487],{"class":321},[252,43545,43546,43548,43550],{"class":254,"line":10037},[252,43547,32492],{"class":262},[252,43549,308],{"class":258},[252,43551,32497],{"class":262},[252,43553,43554],{"class":254,"line":10046},[252,43555,32502],{"class":321},[252,43557,43558,43560,43562],{"class":254,"line":10052},[252,43559,32507],{"class":262},[252,43561,308],{"class":258},[252,43563,32497],{"class":262},[252,43565,43566],{"class":254,"line":10060},[252,43567,32516],{"class":321},[252,43569,43570,43572,43574],{"class":254,"line":10065},[252,43571,32521],{"class":262},[252,43573,308],{"class":258},[252,43575,32497],{"class":262},[252,43577,43578],{"class":254,"line":16744},[252,43579,32530],{"class":321},[252,43581,43582,43584,43586],{"class":254,"line":16750},[252,43583,32535],{"class":262},[252,43585,308],{"class":258},[252,43587,32497],{"class":262},[252,43589,43590],{"class":254,"line":16773},[252,43591,2539],{"emptyLinePlaceholder":181},[252,43593,43594],{"class":254,"line":16779},[252,43595,32548],{"class":321},[252,43597,43598,43600,43602],{"class":254,"line":16802},[252,43599,32553],{"class":262},[252,43601,308],{"class":258},[252,43603,32558],{"class":262},[252,43605,43606],{"class":254,"line":16816},[252,43607,2539],{"emptyLinePlaceholder":181},[252,43609,43610],{"class":254,"line":16836},[252,43611,2539],{"emptyLinePlaceholder":181},[252,43613,43614],{"class":254,"line":16842},[252,43615,32571],{"class":321},[252,43617,43618,43620,43622,43624,43626],{"class":254,"line":16853},[252,43619,3340],{"class":258},[252,43621,32578],{"class":262},[252,43623,26183],{"class":258},[252,43625,32583],{"class":311},[252,43627,32586],{"class":262},[252,43629,43630,43632,43634,43636,43638,43640,43642,43644,43646,43648,43650],{"class":254,"line":16876},[252,43631,32591],{"class":311},[252,43633,263],{"class":262},[252,43635,32596],{"class":367},[252,43637,32599],{"class":311},[252,43639,847],{"class":367},[252,43641,32599],{"class":311},[252,43643,514],{"class":367},[252,43645,32608],{"class":262},[252,43647,795],{"class":258},[252,43649,480],{"class":311},[252,43651,30637],{"class":262},[252,43653,43654,43656,43658,43660,43662,43664],{"class":254,"line":16898},[252,43655,32591],{"class":311},[252,43657,263],{"class":262},[252,43659,32623],{"class":367},[252,43661,718],{"class":258},[252,43663,709],{"class":311},[252,43665,269],{"class":262},[252,43667,43668],{"class":254,"line":16903},[252,43669,2539],{"emptyLinePlaceholder":181},[252,43671,43672],{"class":254,"line":16909},[252,43673,32638],{"class":321},[252,43675,43676],{"class":254,"line":16923},[252,43677,32643],{"class":321},[252,43679,43680,43682,43684],{"class":254,"line":16936},[252,43681,32648],{"class":262},[252,43683,308],{"class":258},[252,43685,32482],{"class":311},[252,43687,43688],{"class":254,"line":16941},[252,43689,32657],{"class":321},[252,43691,43692,43694,43696],{"class":254,"line":16955},[252,43693,32662],{"class":262},[252,43695,308],{"class":258},[252,43697,3224],{"class":311},[252,43699,43700],{"class":254,"line":16960},[252,43701,32671],{"class":321},[252,43703,43704,43706,43708],{"class":254,"line":16966},[252,43705,32676],{"class":262},[252,43707,308],{"class":258},[252,43709,32482],{"class":311},[252,43711,43712],{"class":254,"line":16971},[252,43713,32685],{"class":321},[252,43715,43716,43718,43720],{"class":254,"line":16985},[252,43717,32690],{"class":262},[252,43719,308],{"class":258},[252,43721,3224],{"class":311},[252,43723,43724],{"class":254,"line":16990},[252,43725,32699],{"class":321},[252,43727,43728,43730,43732],{"class":254,"line":16995},[252,43729,32704],{"class":262},[252,43731,308],{"class":258},[252,43733,3224],{"class":311},[252,43735,43736],{"class":254,"line":17009},[252,43737,32713],{"class":321},[252,43739,43740,43742,43744],{"class":254,"line":17021},[252,43741,32718],{"class":262},[252,43743,308],{"class":258},[252,43745,3224],{"class":311},[252,43747,43748],{"class":254,"line":17026},[252,43749,32727],{"class":321},[252,43751,43752,43754,43756,43758,43760],{"class":254,"line":17039},[252,43753,3542],{"class":258},[252,43755,31741],{"class":262},[252,43757,26183],{"class":258},[252,43759,31746],{"class":311},[252,43761,32740],{"class":262},[252,43763,43764],{"class":254,"line":17044},[252,43765,32745],{"class":321},[252,43767,43768,43770,43772],{"class":254,"line":17049},[252,43769,32750],{"class":262},[252,43771,308],{"class":258},[252,43773,32755],{"class":262},[252,43775,43776],{"class":254,"line":17054},[252,43777,32760],{"class":321},[252,43779,43780,43782,43784],{"class":254,"line":17067},[252,43781,32765],{"class":262},[252,43783,308],{"class":258},[252,43785,32770],{"class":262},[252,43787,43788],{"class":254,"line":17072},[252,43789,32776],{"class":321},[252,43791,43792],{"class":254,"line":32773},[252,43793,32782],{"class":262},[252,43795,43796],{"class":254,"line":32779},[252,43797,32788],{"class":321},[252,43799,43800],{"class":254,"line":32785},[252,43801,32794],{"class":321},[252,43803,43804,43806,43808],{"class":254,"line":32791},[252,43805,32800],{"class":262},[252,43807,308],{"class":258},[252,43809,32805],{"class":262},[252,43811,43812],{"class":254,"line":32797},[252,43813,32811],{"class":321},[252,43815,43816,43818,43820,43822,43824,43826,43828],{"class":254,"line":32808},[252,43817,32817],{"class":262},[252,43819,308],{"class":258},[252,43821,32822],{"class":262},[252,43823,32825],{"class":5356},[252,43825,308],{"class":258},[252,43827,480],{"class":311},[252,43829,269],{"class":262},[252,43831,43832],{"class":254,"line":32814},[252,43833,32837],{"class":321},[252,43835,43836,43838,43840],{"class":254,"line":32834},[252,43837,32843],{"class":262},[252,43839,308],{"class":258},[252,43841,32848],{"class":262},[252,43843,43844],{"class":254,"line":32840},[252,43845,32854],{"class":321},[252,43847,43848],{"class":254,"line":32851},[252,43849,32860],{"class":262},[252,43851,43852],{"class":254,"line":32857},[252,43853,32866],{"class":321},[252,43855,43856],{"class":254,"line":32863},[252,43857,32872],{"class":262},[252,43859,43860],{"class":254,"line":32869},[252,43861,32878],{"class":321},[252,43863,43864],{"class":254,"line":32875},[252,43865,32884],{"class":262},[252,43867,43868],{"class":254,"line":32881},[252,43869,32890],{"class":321},[252,43871,43872,43874,43876,43878,43880,43882,43884],{"class":254,"line":32887},[252,43873,32896],{"class":262},[252,43875,9617],{"class":258},[252,43877,32901],{"class":262},[252,43879,718],{"class":258},[252,43881,32906],{"class":262},[252,43883,454],{"class":311},[252,43885,269],{"class":262},[252,43887,43888],{"class":254,"line":32893},[252,43889,32916],{"class":321},[252,43891,43892,43894,43896,43898,43900],{"class":254,"line":32913},[252,43893,32922],{"class":262},[252,43895,9617],{"class":258},[252,43897,32927],{"class":262},[252,43899,3088],{"class":258},[252,43901,32932],{"class":262},[252,43903,43904],{"class":254,"line":32919},[252,43905,32938],{"class":321},[252,43907,43908,43910,43912,43914,43916],{"class":254,"line":32935},[252,43909,32944],{"class":262},[252,43911,9617],{"class":258},[252,43913,32906],{"class":262},[252,43915,454],{"class":311},[252,43917,269],{"class":262},[252,43919,43920],{"class":254,"line":32941},[252,43921,32958],{"class":321},[252,43923,43924,43926,43928,43930,43932],{"class":254,"line":32955},[252,43925,3542],{"class":258},[252,43927,32966],{"class":262},[252,43929,26183],{"class":258},[252,43931,31746],{"class":311},[252,43933,32973],{"class":262},[252,43935,43936],{"class":254,"line":32961},[252,43937,32979],{"class":321},[252,43939,43940,43942,43944],{"class":254,"line":32976},[252,43941,32750],{"class":262},[252,43943,308],{"class":258},[252,43945,32755],{"class":262},[252,43947,43948],{"class":254,"line":32982},[252,43949,32994],{"class":321},[252,43951,43952,43954,43956],{"class":254,"line":32991},[252,43953,32765],{"class":262},[252,43955,308],{"class":258},[252,43957,32770],{"class":262},[252,43959,43960],{"class":254,"line":32997},[252,43961,33009],{"class":321},[252,43963,43964],{"class":254,"line":33006},[252,43965,33015],{"class":262},[252,43967,43968],{"class":254,"line":33012},[252,43969,36496],{"class":321},[252,43971,43972,43974],{"class":254,"line":33018},[252,43973,33021],{"class":258},[252,43975,33024],{"class":262},[252,43977,43978],{"class":254,"line":33027},[252,43979,33030],{"class":321},[252,43981,43982,43984,43986],{"class":254,"line":33033},[252,43983,36511],{"class":262},[252,43985,308],{"class":258},[252,43987,32805],{"class":262},[252,43989,43990],{"class":254,"line":33044},[252,43991,33047],{"class":321},[252,43993,43994,43996,43998,44000,44002,44004,44006],{"class":254,"line":33050},[252,43995,36524],{"class":262},[252,43997,308],{"class":258},[252,43999,32822],{"class":262},[252,44001,32825],{"class":5356},[252,44003,308],{"class":258},[252,44005,480],{"class":311},[252,44007,269],{"class":262},[252,44009,44010],{"class":254,"line":33069},[252,44011,33072],{"class":321},[252,44013,44014,44016,44018],{"class":254,"line":33075},[252,44015,36545],{"class":262},[252,44017,308],{"class":258},[252,44019,32848],{"class":262},[252,44021,44022],{"class":254,"line":33086},[252,44023,33089],{"class":321},[252,44025,44026,44028,44030,44032,44034,44036,44038],{"class":254,"line":33092},[252,44027,36558],{"class":262},[252,44029,9617],{"class":258},[252,44031,36563],{"class":262},[252,44033,718],{"class":258},[252,44035,32906],{"class":262},[252,44037,454],{"class":311},[252,44039,269],{"class":262},[252,44041,44042,44044,44046,44048,44050],{"class":254,"line":33112},[252,44043,36576],{"class":262},[252,44045,9617],{"class":258},[252,44047,32927],{"class":262},[252,44049,3088],{"class":258},[252,44051,32932],{"class":262},[252,44053,44054],{"class":254,"line":33128},[252,44055,36589],{"class":321},[252,44057,44058,44060,44062,44064,44066],{"class":254,"line":33134},[252,44059,36594],{"class":262},[252,44061,9617],{"class":258},[252,44063,32906],{"class":262},[252,44065,454],{"class":311},[252,44067,269],{"class":262},[252,44069,44070],{"class":254,"line":33148},[252,44071,33151],{"class":321},[252,44073,44074],{"class":254,"line":33154},[252,44075,33157],{"class":321},[252,44077,44078,44080,44082],{"class":254,"line":33160},[252,44079,33163],{"class":262},[252,44081,847],{"class":258},[252,44083,33168],{"class":262},[252,44085,44086],{"class":254,"line":33171},[252,44087,33174],{"class":321},[252,44089,44090],{"class":254,"line":33177},[252,44091,33180],{"class":321},[252,44093,44094,44096,44098],{"class":254,"line":33183},[252,44095,33186],{"class":262},[252,44097,847],{"class":258},[252,44099,33168],{"class":262},[252,44101,44102],{"class":254,"line":33193},[252,44103,33196],{"class":321},[252,44105,44106,44108,44110],{"class":254,"line":33199},[252,44107,33202],{"class":262},[252,44109,847],{"class":258},[252,44111,33207],{"class":262},[252,44113,44114],{"class":254,"line":33210},[252,44115,33213],{"class":321},[252,44117,44118,44120,44122],{"class":254,"line":33216},[252,44119,33219],{"class":262},[252,44121,847],{"class":258},[252,44123,33207],{"class":262},[252,44125,44126],{"class":254,"line":33226},[252,44127,2539],{"emptyLinePlaceholder":181},[252,44129,44130],{"class":254,"line":33231},[252,44131,33234],{"class":321},[252,44133,44134,44136,44138,44140,44142,44144,44146,44148,44150,44152,44154,44156,44158,44160,44162,44164,44166,44168,44170,44172],{"class":254,"line":33237},[252,44135,32591],{"class":311},[252,44137,263],{"class":262},[252,44139,3731],{"class":367},[252,44141,32599],{"class":311},[252,44143,33248],{"class":367},[252,44145,1159],{"class":311},[252,44147,33253],{"class":258},[252,44149,1209],{"class":311},[252,44151,33258],{"class":367},[252,44153,1159],{"class":311},[252,44155,33253],{"class":258},[252,44157,1209],{"class":311},[252,44159,3731],{"class":367},[252,44161,33269],{"class":262},[252,44163,795],{"class":258},[252,44165,480],{"class":311},[252,44167,33276],{"class":262},[252,44169,795],{"class":258},[252,44171,480],{"class":311},[252,44173,33283],{"class":262},[252,44175,44176,44178,44180,44182,44184,44186,44188,44190,44192,44194,44196,44198,44200,44202,44204,44206,44208,44210,44212,44214],{"class":254,"line":33286},[252,44177,32591],{"class":311},[252,44179,263],{"class":262},[252,44181,3731],{"class":367},[252,44183,32599],{"class":311},[252,44185,33297],{"class":367},[252,44187,1159],{"class":311},[252,44189,33253],{"class":258},[252,44191,1209],{"class":311},[252,44193,33306],{"class":367},[252,44195,1159],{"class":311},[252,44197,33253],{"class":258},[252,44199,1209],{"class":311},[252,44201,3731],{"class":367},[252,44203,33317],{"class":262},[252,44205,795],{"class":258},[252,44207,480],{"class":311},[252,44209,33324],{"class":262},[252,44211,795],{"class":258},[252,44213,480],{"class":311},[252,44215,33283],{"class":262},[252,44217,44218],{"class":254,"line":33333},[252,44219,2539],{"emptyLinePlaceholder":181},[252,44221,44222],{"class":254,"line":33338},[252,44223,33341],{"class":321},[252,44225,44226,44228,44230,44232,44234,44236,44238],{"class":254,"line":33344},[252,44227,2636],{"class":258},[252,44229,33349],{"class":262},[252,44231,795],{"class":258},[252,44233,480],{"class":311},[252,44235,1203],{"class":262},[252,44237,1223],{"class":258},[252,44239,33360],{"class":262},[252,44241,44242],{"class":254,"line":33363},[252,44243,33366],{"class":321},[252,44245,44246,44248,44250,44252,44254,44256,44258],{"class":254,"line":33369},[252,44247,33372],{"class":262},[252,44249,302],{"class":311},[252,44251,308],{"class":258},[252,44253,33379],{"class":262},[252,44255,795],{"class":258},[252,44257,480],{"class":311},[252,44259,33386],{"class":262},[252,44261,44262],{"class":254,"line":33389},[252,44263,33392],{"class":321},[252,44265,44266],{"class":254,"line":33395},[252,44267,33398],{"class":321},[252,44269,44270,44272,44274],{"class":254,"line":33401},[252,44271,33404],{"class":262},[252,44273,308],{"class":258},[252,44275,32454],{"class":262},[252,44277,44278],{"class":254,"line":33411},[252,44279,2539],{"emptyLinePlaceholder":181},[252,44281,44282],{"class":254,"line":33416},[252,44283,33419],{"class":321},[252,44285,44286,44288,44290,44292,44294],{"class":254,"line":33422},[252,44287,33425],{"class":262},[252,44289,308],{"class":258},[252,44291,33430],{"class":262},[252,44293,795],{"class":258},[252,44295,33435],{"class":262},[252,44297,44298,44300,44302,44304,44306,44308,44310,44312,44314,44316,44318,44320,44322,44324,44326,44328,44330,44332],{"class":254,"line":33438},[252,44299,32591],{"class":311},[252,44301,263],{"class":262},[252,44303,33445],{"class":367},[252,44305,1159],{"class":311},[252,44307,33450],{"class":258},[252,44309,1209],{"class":311},[252,44311,807],{"class":367},[252,44313,1159],{"class":311},[252,44315,33450],{"class":258},[252,44317,1209],{"class":311},[252,44319,33463],{"class":367},[252,44321,33466],{"class":262},[252,44323,33469],{"class":258},[252,44325,1170],{"class":311},[252,44327,33474],{"class":262},[252,44329,591],{"class":258},[252,44331,1170],{"class":311},[252,44333,30637],{"class":262},[252,44335,44336],{"class":254,"line":33483},[252,44337,36873],{"class":321},[252,44339,44340],{"class":254,"line":33489},[252,44341,36878],{"class":321},[252,44343,44344,44346,44348],{"class":254,"line":33495},[252,44345,36883],{"class":262},[252,44347,33507],{"class":367},[252,44349,269],{"class":262},[252,44351,44352],{"class":254,"line":33501},[252,44353,33527],{"class":321},[252,44355,44356,44358,44360,44362,44364,44366],{"class":254,"line":33512},[252,44357,33533],{"class":262},[252,44359,308],{"class":258},[252,44361,33538],{"class":262},[252,44363,33541],{"class":5356},[252,44365,308],{"class":258},[252,44367,1685],{"class":262},[252,44369,44370,44372,44374,44376],{"class":254,"line":33518},[252,44371,33551],{"class":367},[252,44373,1122],{"class":262},[252,44375,33556],{"class":311},[252,44377,33559],{"class":262},[252,44379,44380,44382],{"class":254,"line":33524},[252,44381,33565],{"class":367},[252,44383,33568],{"class":262},[252,44385,44386,44388],{"class":254,"line":33530},[252,44387,33574],{"class":367},[252,44389,33577],{"class":262},[252,44391,44392,44394],{"class":254,"line":33548},[252,44393,33583],{"class":367},[252,44395,33586],{"class":262},[252,44397,44398,44400],{"class":254,"line":33562},[252,44399,33592],{"class":367},[252,44401,33595],{"class":262},[252,44403,44404],{"class":254,"line":33571},[252,44405,33601],{"class":262},[252,44407,44408],{"class":254,"line":33580},[252,44409,33607],{"class":321},[252,44411,44412,44414],{"class":254,"line":33589},[252,44413,4229],{"class":258},[252,44415,33615],{"class":262},[252,44417,44418],{"class":254,"line":33598},[252,44419,2539],{"emptyLinePlaceholder":181},[252,44421,44422],{"class":254,"line":33604},[252,44423,33626],{"class":321},[252,44425,44426,44428,44430],{"class":254,"line":33610},[252,44427,32087],{"class":258},[252,44429,33634],{"class":2102},[252,44431,33637],{"class":262},[252,44433,44434],{"class":254,"line":33618},[252,44435,33643],{"class":321},[252,44437,44438,44440,44442,44444,44446,44448,44450,44452],{"class":254,"line":33623},[252,44439,33649],{"class":262},[252,44441,31833],{"class":5356},[252,44443,308],{"class":258},[252,44445,263],{"class":262},[252,44447,761],{"class":311},[252,44449,641],{"class":262},[252,44451,556],{"class":311},[252,44453,30637],{"class":262},[252,44455,44456],{"class":254,"line":33629},[252,44457,33669],{"class":321},[252,44459,44460],{"class":254,"line":33640},[252,44461,33675],{"class":321},[252,44463,44464],{"class":254,"line":33646},[252,44465,33681],{"class":321},[252,44467,44468,44470,44472,44474,44476,44478,44480],{"class":254,"line":33666},[252,44469,31867],{"class":262},[252,44471,480],{"class":311},[252,44473,641],{"class":262},[252,44475,340],{"class":311},[252,44477,641],{"class":262},[252,44479,480],{"class":311},[252,44481,269],{"class":262},[252,44483,44484],{"class":254,"line":33672},[252,44485,33704],{"class":321},[252,44487,44488],{"class":254,"line":33678},[252,44489,33710],{"class":321},[252,44491,44492],{"class":254,"line":33684},[252,44493,33716],{"class":321},[252,44495,44496],{"class":254,"line":33701},[252,44497,33722],{"class":321},[252,44499,44500],{"class":254,"line":33707},[252,44501,33728],{"class":321},[252,44503,44504,44506,44508,44510,44512,44514,44516,44518,44520],{"class":254,"line":33713},[252,44505,33734],{"class":262},[252,44507,33737],{"class":367},[252,44509,33740],{"class":262},[252,44511,33743],{"class":367},[252,44513,641],{"class":262},[252,44515,33748],{"class":5356},[252,44517,308],{"class":258},[252,44519,33753],{"class":367},[252,44521,269],{"class":262},[252,44523,44524,44526,44528,44530,44532,44534,44536,44538,44540],{"class":254,"line":33719},[252,44525,33734],{"class":262},[252,44527,33737],{"class":367},[252,44529,33765],{"class":262},[252,44531,33768],{"class":367},[252,44533,641],{"class":262},[252,44535,33748],{"class":5356},[252,44537,308],{"class":258},[252,44539,33777],{"class":367},[252,44541,269],{"class":262},[252,44543,44544],{"class":254,"line":33725},[252,44545,33785],{"class":321},[252,44547,44548],{"class":254,"line":33731},[252,44549,33791],{"class":262},[252,44551,44552],{"class":254,"line":33758},[252,44553,33797],{"class":321},[252,44555,44556,44558,44560],{"class":254,"line":33782},[252,44557,33803],{"class":262},[252,44559,33806],{"class":367},[252,44561,269],{"class":262},[252,44563,44564,44566,44568],{"class":254,"line":33788},[252,44565,33814],{"class":262},[252,44567,33817],{"class":367},[252,44569,269],{"class":262},[252,44571,44572],{"class":254,"line":33794},[252,44573,33825],{"class":321},[252,44575,44576,44578,44580,44582,44584,44586,44588],{"class":254,"line":33800},[252,44577,31867],{"class":262},[252,44579,480],{"class":311},[252,44581,641],{"class":262},[252,44583,340],{"class":311},[252,44585,641],{"class":262},[252,44587,340],{"class":311},[252,44589,269],{"class":262},[252,44591,44592,44594,44596,44598,44600,44602,44604,44606,44608],{"class":254,"line":33811},[252,44593,33734],{"class":262},[252,44595,33737],{"class":367},[252,44597,33852],{"class":262},[252,44599,33743],{"class":367},[252,44601,641],{"class":262},[252,44603,33748],{"class":5356},[252,44605,308],{"class":258},[252,44607,33863],{"class":367},[252,44609,269],{"class":262},[252,44611,44612,44614,44616,44618,44620,44622,44624,44626,44628],{"class":254,"line":33822},[252,44613,33734],{"class":262},[252,44615,33737],{"class":367},[252,44617,33875],{"class":262},[252,44619,33768],{"class":367},[252,44621,641],{"class":262},[252,44623,33748],{"class":5356},[252,44625,308],{"class":258},[252,44627,33886],{"class":367},[252,44629,269],{"class":262},[252,44631,44632],{"class":254,"line":33828},[252,44633,33894],{"class":321},[252,44635,44636],{"class":254,"line":33845},[252,44637,33791],{"class":262},[252,44639,44640,44642,44644],{"class":254,"line":33868},[252,44641,33803],{"class":262},[252,44643,33737],{"class":367},[252,44645,269],{"class":262},[252,44647,44648,44650,44652],{"class":254,"line":33891},[252,44649,33814],{"class":262},[252,44651,33916],{"class":367},[252,44653,269],{"class":262},[252,44655,44656],{"class":254,"line":33897},[252,44657,33924],{"class":262},[252,44659,44660],{"class":254,"line":33902},[252,44661,2539],{"emptyLinePlaceholder":181},[252,44663,44664],{"class":254,"line":33911},[252,44665,33935],{"class":321},[252,44667,44668,44670,44672,44674,44676],{"class":254,"line":33921},[252,44669,1670],{"class":258},[252,44671,31360],{"class":311},[252,44673,3088],{"class":258},[252,44675,31365],{"class":367},[252,44677,3878],{"class":262},[252,44679,44680],{"class":254,"line":33927},[252,44681,33954],{"class":321},[252,44683,44684,44687,44689],{"class":254,"line":33932},[252,44685,44686],{"class":262},"    GoogLeNet",[252,44688,308],{"class":258},[252,44690,44691],{"class":262},"GoogLeNet(Inception)\n",[252,44693,44694,44696,44698],{"class":254,"line":33938},[252,44695,33971],{"class":262},[252,44697,308],{"class":258},[252,44699,33976],{"class":262},[252,44701,44702,44704,44706,44709,44711,44713,44715],{"class":254,"line":33951},[252,44703,33533],{"class":262},[252,44705,308],{"class":258},[252,44707,44708],{"class":262},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[252,44710,33989],{"class":5356},[252,44712,308],{"class":258},[252,44714,1214],{"class":311},[252,44716,269],{"class":262},[252,44718,44719],{"class":254,"line":33957},[252,44720,34001],{"class":262},[207,44722,44723],{"start":1318},[210,44724,40714],{},[244,44726,44728],{"className":30518,"code":44727,"language":30520,"meta":169,"style":169},"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",[22,44729,44730,44736,44746,44756,44760,44770,44781,44785,44789,44793,44801,44817,44827,44843,44853,44867,44871,44881,44891,44901,44907,44911,44915,44923,44927,44943,44951,44955,44959,44967,44975,44979,44983,44987,44991,44997,45001,45011,45019,45027,45031,45035,45039,45047,45051,45067,45071,45075,45079,45091,45095,45107,45111,45115,45127,45131,45141,45145,45149,45161,45165,45173,45177,45181,45189,45193,45201,45205,45209,45213,45217,45221,45237,45245,45249,45253,45301,45307,45311,45321,45329,45337,45341,45345,45349,45353,45361,45365,45381,45385,45393,45401],{"__ignoreMap":169},[252,44731,44732,44734],{"class":254,"line":255},[252,44733,30532],{"class":258},[252,44735,30535],{"class":262},[252,44737,44738,44740,44742,44744],{"class":254,"line":170},[252,44739,30532],{"class":258},[252,44741,31555],{"class":262},[252,44743,31523],{"class":258},[252,44745,31560],{"class":262},[252,44747,44748,44750,44752,44754],{"class":254,"line":1318},[252,44749,30877],{"class":258},[252,44751,31538],{"class":262},[252,44753,30532],{"class":258},[252,44755,31543],{"class":262},[252,44757,44758],{"class":254,"line":1333},[252,44759,34062],{"class":321},[252,44761,44762,44764,44766,44768],{"class":254,"line":1339},[252,44763,30877],{"class":258},[252,44765,31508],{"class":262},[252,44767,30532],{"class":258},[252,44769,31513],{"class":262},[252,44771,44772,44774,44776,44778],{"class":254,"line":1353},[252,44773,30877],{"class":258},[252,44775,32054],{"class":262},[252,44777,30532],{"class":258},[252,44779,44780],{"class":262}," GoogLeNet,Inception\n",[252,44782,44783],{"class":254,"line":1359},[252,44784,2539],{"emptyLinePlaceholder":181},[252,44786,44787],{"class":254,"line":1450},[252,44788,2539],{"emptyLinePlaceholder":181},[252,44790,44791],{"class":254,"line":1456},[252,44792,34091],{"class":321},[252,44794,44795,44797,44799],{"class":254,"line":1468},[252,44796,32087],{"class":258},[252,44798,34098],{"class":2102},[252,44800,32093],{"class":262},[252,44802,44803,44805,44807,44809,44811,44813,44815],{"class":254,"line":1751},[252,44804,34105],{"class":262},[252,44806,308],{"class":258},[252,44808,31595],{"class":262},[252,44810,31598],{"class":5356},[252,44812,308],{"class":258},[252,44814,31603],{"class":367},[252,44816,31606],{"class":262},[252,44818,44819,44821,44823,44825],{"class":254,"line":1756},[252,44820,34122],{"class":5356},[252,44822,308],{"class":258},[252,44824,34127],{"class":311},[252,44826,31606],{"class":262},[252,44828,44829,44831,44833,44835,44837,44839,44841],{"class":254,"line":1762},[252,44830,34134],{"class":5356},[252,44832,308],{"class":258},[252,44834,31633],{"class":262},[252,44836,31636],{"class":5356},[252,44838,308],{"class":258},[252,44840,35589],{"class":311},[252,44842,31644],{"class":262},[252,44844,44845,44847,44849,44851],{"class":254,"line":1767},[252,44846,34151],{"class":5356},[252,44848,308],{"class":258},[252,44850,31616],{"class":311},[252,44852,269],{"class":262},[252,44854,44855,44857,44859,44861,44863,44865],{"class":254,"line":1781},[252,44856,34162],{"class":262},[252,44858,308],{"class":258},[252,44860,31674],{"class":262},[252,44862,31677],{"class":5356},[252,44864,308],{"class":258},[252,44866,34173],{"class":262},[252,44868,44869],{"class":254,"line":1786},[252,44870,34178],{"class":321},[252,44872,44873,44875,44877,44879],{"class":254,"line":1792},[252,44874,34183],{"class":5356},[252,44876,308],{"class":258},[252,44878,480],{"class":311},[252,44880,31606],{"class":262},[252,44882,44883,44885,44887,44889],{"class":254,"line":1813},[252,44884,34194],{"class":5356},[252,44886,308],{"class":258},[252,44888,31616],{"class":311},[252,44890,31606],{"class":262},[252,44892,44893,44895,44897,44899],{"class":254,"line":1818},[252,44894,34205],{"class":5356},[252,44896,308],{"class":258},[252,44898,454],{"class":311},[252,44900,269],{"class":262},[252,44902,44903,44905],{"class":254,"line":1832},[252,44904,4229],{"class":258},[252,44906,34218],{"class":262},[252,44908,44909],{"class":254,"line":1837},[252,44910,2539],{"emptyLinePlaceholder":181},[252,44912,44913],{"class":254,"line":1866},[252,44914,34227],{"class":321},[252,44916,44917,44919,44921],{"class":254,"line":1871},[252,44918,32087],{"class":258},[252,44920,34234],{"class":2102},[252,44922,34237],{"class":262},[252,44924,44925],{"class":254,"line":1888},[252,44926,34242],{"class":321},[252,44928,44929,44931,44933,44935,44937,44939,44941],{"class":254,"line":1893},[252,44930,31377],{"class":262},[252,44932,308],{"class":258},[252,44934,31384],{"class":367},[252,44936,1843],{"class":258},[252,44938,31389],{"class":262},[252,44940,1840],{"class":258},[252,44942,34259],{"class":367},[252,44944,44945,44947,44949],{"class":254,"line":1898},[252,44946,31429],{"class":262},[252,44948,308],{"class":258},[252,44950,32429],{"class":262},[252,44952,44953],{"class":254,"line":1903},[252,44954,2539],{"emptyLinePlaceholder":181},[252,44956,44957],{"class":254,"line":1917},[252,44958,34276],{"class":321},[252,44960,44961,44963,44965],{"class":254,"line":1922},[252,44962,34281],{"class":262},[252,44964,308],{"class":258},[252,44966,32482],{"class":311},[252,44968,44969,44971,44973],{"class":254,"line":2716},[252,44970,34290],{"class":262},[252,44972,308],{"class":258},[252,44974,3224],{"class":311},[252,44976,44977],{"class":254,"line":2730},[252,44978,2539],{"emptyLinePlaceholder":181},[252,44980,44981],{"class":254,"line":2738},[252,44982,34303],{"class":321},[252,44984,44985],{"class":254,"line":2743},[252,44986,34308],{"class":321},[252,44988,44989],{"class":254,"line":2749},[252,44990,34313],{"class":321},[252,44992,44993,44995],{"class":254,"line":2755},[252,44994,34318],{"class":258},[252,44996,33024],{"class":262},[252,44998,44999],{"class":254,"line":2760},[252,45000,34325],{"class":321},[252,45002,45003,45005,45007,45009],{"class":254,"line":8088},[252,45004,3542],{"class":258},[252,45006,34332],{"class":262},[252,45008,26183],{"class":258},[252,45010,34337],{"class":262},[252,45012,45013,45015,45017],{"class":254,"line":8112},[252,45014,34342],{"class":262},[252,45016,308],{"class":258},[252,45018,34347],{"class":262},[252,45020,45021,45023,45025],{"class":254,"line":8117},[252,45022,34352],{"class":262},[252,45024,308],{"class":258},[252,45026,34357],{"class":262},[252,45028,45029],{"class":254,"line":8123},[252,45030,34362],{"class":321},[252,45032,45033],{"class":254,"line":8150},[252,45034,33015],{"class":262},[252,45036,45037],{"class":254,"line":8155},[252,45038,34371],{"class":321},[252,45040,45041,45043,45045],{"class":254,"line":8161},[252,45042,32800],{"class":262},[252,45044,308],{"class":258},[252,45046,34380],{"class":262},[252,45048,45049],{"class":254,"line":8173},[252,45050,34385],{"class":321},[252,45052,45053,45055,45057,45059,45061,45063,45065],{"class":254,"line":8185},[252,45054,32817],{"class":262},[252,45056,308],{"class":258},[252,45058,32822],{"class":262},[252,45060,32825],{"class":5356},[252,45062,308],{"class":258},[252,45064,480],{"class":311},[252,45066,269],{"class":262},[252,45068,45069],{"class":254,"line":8197},[252,45070,34406],{"class":321},[252,45072,45073],{"class":254,"line":9856},[252,45074,34411],{"class":321},[252,45076,45077],{"class":254,"line":9881},[252,45078,34416],{"class":321},[252,45080,45081,45083,45085,45087,45089],{"class":254,"line":9904},[252,45082,34421],{"class":262},[252,45084,9617],{"class":258},[252,45086,32927],{"class":262},[252,45088,3088],{"class":258},[252,45090,34430],{"class":262},[252,45092,45093],{"class":254,"line":9928},[252,45094,34435],{"class":321},[252,45096,45097,45099,45101,45103,45105],{"class":254,"line":9933},[252,45098,34440],{"class":262},[252,45100,9617],{"class":258},[252,45102,34445],{"class":262},[252,45104,454],{"class":311},[252,45106,269],{"class":262},[252,45108,45109],{"class":254,"line":9938},[252,45110,2539],{"emptyLinePlaceholder":181},[252,45112,45113],{"class":254,"line":9943},[252,45114,34458],{"class":321},[252,45116,45117,45119,45121,45123,45125],{"class":254,"line":9952},[252,45118,34463],{"class":262},[252,45120,308],{"class":258},[252,45122,34468],{"class":262},[252,45124,847],{"class":258},[252,45126,34473],{"class":262},[252,45128,45129],{"class":254,"line":9957},[252,45130,34478],{"class":321},[252,45132,45133,45135,45137,45139],{"class":254,"line":9963},[252,45134,32591],{"class":311},[252,45136,263],{"class":262},[252,45138,34487],{"class":367},[252,45140,34490],{"class":262},[252,45142,45143],{"class":254,"line":9984},[252,45144,2539],{"emptyLinePlaceholder":181},[252,45146,45147],{"class":254,"line":9990},[252,45148,34499],{"class":321},[252,45150,45151,45153,45155,45157,45159],{"class":254,"line":10004},[252,45152,1670],{"class":258},[252,45154,31360],{"class":311},[252,45156,3088],{"class":258},[252,45158,31365],{"class":367},[252,45160,3878],{"class":262},[252,45162,45163],{"class":254,"line":10010},[252,45164,34516],{"class":321},[252,45166,45167,45169,45171],{"class":254,"line":10037},[252,45168,31429],{"class":262},[252,45170,308],{"class":258},[252,45172,44691],{"class":262},[252,45174,45175],{"class":254,"line":10046},[252,45176,34529],{"class":321},[252,45178,45179],{"class":254,"line":10052},[252,45180,34534],{"class":321},[252,45182,45183,45185,45187],{"class":254,"line":10060},[252,45184,34539],{"class":262},[252,45186,34542],{"class":367},[252,45188,30637],{"class":262},[252,45190,45191],{"class":254,"line":10065},[252,45192,34549],{"class":321},[252,45194,45195,45197,45199],{"class":254,"line":16744},[252,45196,34162],{"class":262},[252,45198,308],{"class":258},[252,45200,34558],{"class":262},[252,45202,45203],{"class":254,"line":16750},[252,45204,34563],{"class":321},[252,45206,45207],{"class":254,"line":16773},[252,45208,34568],{"class":262},[252,45210,45211],{"class":254,"line":16779},[252,45212,2539],{"emptyLinePlaceholder":181},[252,45214,45215],{"class":254,"line":16802},[252,45216,34577],{"class":321},[252,45218,45219],{"class":254,"line":16816},[252,45220,34582],{"class":321},[252,45222,45223,45225,45227,45229,45231,45233,45235],{"class":254,"line":16836},[252,45224,31377],{"class":262},[252,45226,308],{"class":258},[252,45228,31384],{"class":367},[252,45230,1843],{"class":258},[252,45232,31389],{"class":262},[252,45234,1840],{"class":258},[252,45236,34259],{"class":367},[252,45238,45239,45241,45243],{"class":254,"line":16842},[252,45240,31429],{"class":262},[252,45242,308],{"class":258},[252,45244,32429],{"class":262},[252,45246,45247],{"class":254,"line":16853},[252,45248,34611],{"class":321},[252,45250,45251],{"class":254,"line":16876},[252,45252,34616],{"class":321},[252,45254,45255,45257,45259,45261,45263,45265,45267,45269,45271,45273,45275,45277,45279,45281,45283,45285,45287,45289,45291,45293,45295,45297,45299],{"class":254,"line":16898},[252,45256,34621],{"class":262},[252,45258,308],{"class":258},[252,45260,1153],{"class":262},[252,45262,34628],{"class":367},[252,45264,641],{"class":262},[252,45266,34633],{"class":367},[252,45268,641],{"class":262},[252,45270,34638],{"class":367},[252,45272,641],{"class":262},[252,45274,34643],{"class":367},[252,45276,641],{"class":262},[252,45278,34648],{"class":367},[252,45280,641],{"class":262},[252,45282,34653],{"class":367},[252,45284,641],{"class":262},[252,45286,34658],{"class":367},[252,45288,641],{"class":262},[252,45290,34663],{"class":367},[252,45292,641],{"class":262},[252,45294,34668],{"class":367},[252,45296,641],{"class":262},[252,45298,34673],{"class":367},[252,45300,33386],{"class":262},[252,45302,45303,45305],{"class":254,"line":16903},[252,45304,34318],{"class":258},[252,45306,33024],{"class":262},[252,45308,45309],{"class":254,"line":16909},[252,45310,34686],{"class":321},[252,45312,45313,45315,45317,45319],{"class":254,"line":16923},[252,45314,3542],{"class":258},[252,45316,34693],{"class":262},[252,45318,26183],{"class":258},[252,45320,34337],{"class":262},[252,45322,45323,45325,45327],{"class":254,"line":16936},[252,45324,32750],{"class":262},[252,45326,308],{"class":258},[252,45328,32755],{"class":262},[252,45330,45331,45333,45335],{"class":254,"line":16941},[252,45332,32765],{"class":262},[252,45334,308],{"class":258},[252,45336,32770],{"class":262},[252,45338,45339],{"class":254,"line":16955},[252,45340,2539],{"emptyLinePlaceholder":181},[252,45342,45343],{"class":254,"line":16960},[252,45344,34722],{"class":321},[252,45346,45347],{"class":254,"line":16966},[252,45348,33015],{"class":262},[252,45350,45351],{"class":254,"line":16971},[252,45352,34731],{"class":321},[252,45354,45355,45357,45359],{"class":254,"line":16985},[252,45356,32800],{"class":262},[252,45358,308],{"class":258},[252,45360,32805],{"class":262},[252,45362,45363],{"class":254,"line":16990},[252,45364,34744],{"class":321},[252,45366,45367,45369,45371,45373,45375,45377,45379],{"class":254,"line":16995},[252,45368,32817],{"class":262},[252,45370,308],{"class":258},[252,45372,32822],{"class":262},[252,45374,32825],{"class":5356},[252,45376,308],{"class":258},[252,45378,480],{"class":311},[252,45380,269],{"class":262},[252,45382,45383],{"class":254,"line":17009},[252,45384,34765],{"class":321},[252,45386,45387,45389,45391],{"class":254,"line":17021},[252,45388,34770],{"class":262},[252,45390,308],{"class":258},[252,45392,34775],{"class":262},[252,45394,45395,45397,45399],{"class":254,"line":17026},[252,45396,34780],{"class":262},[252,45398,308],{"class":258},[252,45400,34785],{"class":262},[252,45402,45403,45405,45407,45409,45411,45413,45415,45417],{"class":254,"line":17039},[252,45404,34790],{"class":311},[252,45406,263],{"class":262},[252,45408,34795],{"class":367},[252,45410,34798],{"class":262},[252,45412,34801],{"class":367},[252,45414,641],{"class":262},[252,45416,34806],{"class":367},[252,45418,34809],{"class":262},[224,45420,45422],{"id":45421},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45424,45425],{},"猫狗分类任务",[19,45427,45428],{},"划分数据集和验证集",[244,45430,45432],{"className":30518,"code":45431,"language":30520,"meta":169,"style":169},"# 创建脚本，用于划分数据集和验证集\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",[22,45433,45434,45439,45446,45451,45462,45469,45473,45483,45497,45506,45510,45515,45525,45545,45549,45554,45564,45575,45588,45592,45597,45606,45616,45627,45631,45636,45646,45650,45655,45660,45665,45670,45675,45679,45689,45716,45729,45741,45768,45773,45778,45792,45797,45809,45824,45839,45847,45851,45856,45862,45874,45887,45892,45897,45902,45952,45958,45962],{"__ignoreMap":169},[252,45435,45436],{"class":254,"line":255},[252,45437,45438],{"class":321},"# 创建脚本，用于划分数据集和验证集\n",[252,45440,45441,45443],{"class":254,"line":170},[252,45442,30532],{"class":258},[252,45444,45445],{"class":262}," os\n",[252,45447,45448],{"class":254,"line":1318},[252,45449,45450],{"class":321},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[252,45452,45453,45455,45458,45460],{"class":254,"line":1333},[252,45454,30877],{"class":258},[252,45456,45457],{"class":262}," shutil ",[252,45459,30532],{"class":258},[252,45461,31962],{"class":262},[252,45463,45464,45466],{"class":254,"line":1339},[252,45465,30532],{"class":258},[252,45467,45468],{"class":262}," random\n",[252,45470,45471],{"class":254,"line":1353},[252,45472,2539],{"emptyLinePlaceholder":181},[252,45474,45475,45477,45480],{"class":254,"line":1359},[252,45476,32087],{"class":258},[252,45478,45479],{"class":2102}," mkfile",[252,45481,45482],{"class":262},"(file):\n",[252,45484,45485,45487,45489,45492,45495],{"class":254,"line":1450},[252,45486,3240],{"class":258},[252,45488,39070],{"class":258},[252,45490,45491],{"class":262}," os.path.exists(",[252,45493,45494],{"class":5356},"file",[252,45496,30926],{"class":262},[252,45498,45499,45502,45504],{"class":254,"line":1456},[252,45500,45501],{"class":262},"        os.makedirs(",[252,45503,45494],{"class":5356},[252,45505,269],{"class":262},[252,45507,45508],{"class":254,"line":1468},[252,45509,2539],{"emptyLinePlaceholder":181},[252,45511,45512],{"class":254,"line":1751},[252,45513,45514],{"class":321},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[252,45516,45517,45520,45522],{"class":254,"line":1756},[252,45518,45519],{"class":262},"file_path",[252,45521,308],{"class":258},[252,45523,45524],{"class":367},"'data_cat_dog'\n",[252,45526,45527,45530,45532,45535,45537,45540,45542],{"class":254,"line":1762},[252,45528,45529],{"class":262},"flower_class",[252,45531,308],{"class":258},[252,45533,45534],{"class":262},"[cla ",[252,45536,3164],{"class":258},[252,45538,45539],{"class":262}," cla ",[252,45541,26183],{"class":258},[252,45543,45544],{"class":262}," os.listdir(file_path)]\n",[252,45546,45547],{"class":254,"line":1767},[252,45548,2539],{"emptyLinePlaceholder":181},[252,45550,45551],{"class":254,"line":1781},[252,45552,45553],{"class":321},"# 创建训练集train文件夹\n",[252,45555,45556,45559,45562],{"class":254,"line":1786},[252,45557,45558],{"class":262},"mkfile(",[252,45560,45561],{"class":367},"'data\u002Ftrain'",[252,45563,269],{"class":262},[252,45565,45566,45568,45570,45572],{"class":254,"line":1792},[252,45567,3164],{"class":258},[252,45569,45539],{"class":262},[252,45571,26183],{"class":258},[252,45573,45574],{"class":262}," flower_class:\n",[252,45576,45577,45580,45583,45585],{"class":254,"line":1813},[252,45578,45579],{"class":262},"    mkfile(",[252,45581,45582],{"class":367},"'data\u002Ftrain\u002F'",[252,45584,744],{"class":258},[252,45586,45587],{"class":262},"cla)\n",[252,45589,45590],{"class":254,"line":1818},[252,45591,2539],{"emptyLinePlaceholder":181},[252,45593,45594],{"class":254,"line":1832},[252,45595,45596],{"class":321},"# 创建验证集val文件夹\n",[252,45598,45599,45601,45604],{"class":254,"line":1837},[252,45600,45558],{"class":262},[252,45602,45603],{"class":367},"'data\u002Ftest'",[252,45605,269],{"class":262},[252,45607,45608,45610,45612,45614],{"class":254,"line":1866},[252,45609,3164],{"class":258},[252,45611,45539],{"class":262},[252,45613,26183],{"class":258},[252,45615,45574],{"class":262},[252,45617,45618,45620,45623,45625],{"class":254,"line":1871},[252,45619,45579],{"class":262},[252,45621,45622],{"class":367},"'data\u002Ftest\u002F'",[252,45624,744],{"class":258},[252,45626,45587],{"class":262},[252,45628,45629],{"class":254,"line":1888},[252,45630,2539],{"emptyLinePlaceholder":181},[252,45632,45633],{"class":254,"line":1893},[252,45634,45635],{"class":321},"# 划分比例，训练集：测试集=9：1\n",[252,45637,45638,45641,45643],{"class":254,"line":1898},[252,45639,45640],{"class":262},"split_rate",[252,45642,308],{"class":258},[252,45644,45645],{"class":311},"0.1\n",[252,45647,45648],{"class":254,"line":1903},[252,45649,2539],{"emptyLinePlaceholder":181},[252,45651,45652],{"class":254,"line":1917},[252,45653,45654],{"class":321},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[252,45656,45657],{"class":254,"line":1922},[252,45658,45659],{"class":321},"# cla_path：当前类别的原始图片路径\n",[252,45661,45662],{"class":254,"line":2716},[252,45663,45664],{"class":321},"# images：当前类别下所有图片的文件名列表\n",[252,45666,45667],{"class":254,"line":2730},[252,45668,45669],{"class":321},"# num：该类别图片总数\n",[252,45671,45672],{"class":254,"line":2738},[252,45673,45674],{"class":321},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[252,45676,45677],{"class":254,"line":2743},[252,45678,2539],{"emptyLinePlaceholder":181},[252,45680,45681,45683,45685,45687],{"class":254,"line":2749},[252,45682,3164],{"class":258},[252,45684,45539],{"class":262},[252,45686,26183],{"class":258},[252,45688,45574],{"class":262},[252,45690,45691,45694,45696,45699,45701,45704,45707,45709,45711,45713],{"class":254,"line":2755},[252,45692,45693],{"class":262},"    cla_path ",[252,45695,308],{"class":258},[252,45697,45698],{"class":262}," file_path ",[252,45700,744],{"class":258},[252,45702,45703],{"class":367}," '\u002F'",[252,45705,45706],{"class":258}," +",[252,45708,45539],{"class":262},[252,45710,744],{"class":258},[252,45712,45703],{"class":367},[252,45714,45715],{"class":321},"  # 某一类别的子目录\n",[252,45717,45718,45721,45723,45726],{"class":254,"line":2760},[252,45719,45720],{"class":262},"    images ",[252,45722,308],{"class":258},[252,45724,45725],{"class":262}," os.listdir(cla_path)  ",[252,45727,45728],{"class":321},"# iamges 列表存储了该目录下所有图像的名称\n",[252,45730,45731,45734,45736,45738],{"class":254,"line":8088},[252,45732,45733],{"class":262},"    num ",[252,45735,308],{"class":258},[252,45737,7471],{"class":311},[252,45739,45740],{"class":262},"(images)\n",[252,45742,45743,45746,45748,45751,45753,45755,45757,45760,45762,45765],{"class":254,"line":8112},[252,45744,45745],{"class":262},"    eval_index ",[252,45747,308],{"class":258},[252,45749,45750],{"class":262}," random.sample(images, ",[252,45752,756],{"class":5356},[252,45754,308],{"class":258},[252,45756,266],{"class":311},[252,45758,45759],{"class":262},"(num ",[252,45761,718],{"class":258},[252,45763,45764],{"class":262}," split_rate))  ",[252,45766,45767],{"class":321},"# 从images列表中随机抽取 k 个图像名称\n",[252,45769,45770],{"class":254,"line":8117},[252,45771,45772],{"class":321},"    # 遍历该类别下的所有图片\n",[252,45774,45775],{"class":254,"line":8123},[252,45776,45777],{"class":321},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[252,45779,45780,45782,45785,45787,45789],{"class":254,"line":8150},[252,45781,3340],{"class":258},[252,45783,45784],{"class":262}," index, image ",[252,45786,26183],{"class":258},[252,45788,31746],{"class":311},[252,45790,45791],{"class":262},"(images):\n",[252,45793,45794],{"class":254,"line":8155},[252,45795,45796],{"class":321},"        # eval_index 中保存验证集val的图像名称\n",[252,45798,45799,45801,45804,45806],{"class":254,"line":8161},[252,45800,2636],{"class":258},[252,45802,45803],{"class":262}," image ",[252,45805,26183],{"class":258},[252,45807,45808],{"class":262}," eval_index:\n",[252,45810,45811,45814,45816,45819,45821],{"class":254,"line":8173},[252,45812,45813],{"class":262},"            image_path ",[252,45815,308],{"class":258},[252,45817,45818],{"class":262}," cla_path ",[252,45820,744],{"class":258},[252,45822,45823],{"class":262}," image\n",[252,45825,45826,45829,45831,45834,45836],{"class":254,"line":8185},[252,45827,45828],{"class":262},"            new_path ",[252,45830,308],{"class":258},[252,45832,45833],{"class":367}," 'data\u002Ftest\u002F'",[252,45835,45706],{"class":258},[252,45837,45838],{"class":262}," cla\n",[252,45840,45841,45844],{"class":254,"line":8197},[252,45842,45843],{"class":262},"            copy(image_path, new_path)  ",[252,45845,45846],{"class":321},"# 将选中的图像复制到新路径\n",[252,45848,45849],{"class":254,"line":9856},[252,45850,2539],{"emptyLinePlaceholder":181},[252,45852,45853],{"class":254,"line":9881},[252,45854,45855],{"class":321},"        # 其余的图像保存在训练集train中\n",[252,45857,45858,45860],{"class":254,"line":9904},[252,45859,2673],{"class":258},[252,45861,3878],{"class":262},[252,45863,45864,45866,45868,45870,45872],{"class":254,"line":9928},[252,45865,45813],{"class":262},[252,45867,308],{"class":258},[252,45869,45818],{"class":262},[252,45871,744],{"class":258},[252,45873,45823],{"class":262},[252,45875,45876,45878,45880,45883,45885],{"class":254,"line":9933},[252,45877,45828],{"class":262},[252,45879,308],{"class":258},[252,45881,45882],{"class":367}," 'data\u002Ftrain\u002F'",[252,45884,45706],{"class":258},[252,45886,45838],{"class":262},[252,45888,45889],{"class":254,"line":9938},[252,45890,45891],{"class":262},"            copy(image_path, new_path)\n",[252,45893,45894],{"class":254,"line":9943},[252,45895,45896],{"class":321},"            # 打印进度条信息\n",[252,45898,45899],{"class":254,"line":9952},[252,45900,45901],{"class":321},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[252,45903,45904,45906,45908,45910,45913,45915,45917,45920,45922,45924,45926,45929,45932,45934,45936,45939,45942,45944,45946,45949],{"class":254,"line":9957},[252,45905,32591],{"class":311},[252,45907,263],{"class":262},[252,45909,514],{"class":367},[252,45911,45912],{"class":311},"\\r",[252,45914,1153],{"class":367},[252,45916,32599],{"class":311},[252,45918,45919],{"class":367},"] processing [",[252,45921,32599],{"class":311},[252,45923,847],{"class":367},[252,45925,32599],{"class":311},[252,45927,45928],{"class":367},"]\"",[252,45930,45931],{"class":262},".format(cla, index ",[252,45933,744],{"class":258},[252,45935,25258],{"class":311},[252,45937,45938],{"class":262},", num), ",[252,45940,45941],{"class":5356},"end",[252,45943,308],{"class":258},[252,45945,7792],{"class":367},[252,45947,45948],{"class":262},")  ",[252,45950,45951],{"class":321},"# processing bar\n",[252,45953,45954,45956],{"class":254,"line":9963},[252,45955,31439],{"class":311},[252,45957,2115],{"class":262},[252,45959,45960],{"class":254,"line":9984},[252,45961,2539],{"emptyLinePlaceholder":181},[252,45963,45964,45966,45968,45971],{"class":254,"line":9990},[252,45965,30555],{"class":311},[252,45967,263],{"class":262},[252,45969,45970],{"class":367},"\"processing done!\"",[252,45972,269],{"class":262},[19,45974,45975],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22137,45977,45979],{"id":45978},"_242模型代码","2.4.2.模型代码",[19,45981,45982],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[244,45984,45986],{"className":30518,"code":45985,"language":30520,"meta":169,"style":169},"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",[22,45987,45988,45994,46004,46014,46018,46034,46042,46056,46066,46070,46100,46104,46138,46184,46188,46222,46268,46272,46276,46310,46340,46344,46352,46366,46388,46410,46428,46432,46446,46450,46454,46470,46474,46482,46496,46506,46550,46554,46582,46586,46596,46624,46628,46664,46668,46696,46700,46710,46742,46774,46802,46806,46816,46848,46880,46912,46944,46976,47004,47008,47018,47050,47082,47094,47098,47110,47114,47118,47130,47138,47158,47162,47166,47170,47174,47178,47182,47196,47204,47212,47224,47238,47246,47250,47258,47268,47278,47288,47298,47308,47314,47318,47322,47334,47354,47362],{"__ignoreMap":169},[252,45989,45990,45992],{"class":254,"line":255},[252,45991,30532],{"class":258},[252,45993,30535],{"class":262},[252,45995,45996,45998,46000,46002],{"class":254,"line":170},[252,45997,30877],{"class":258},[252,45999,30880],{"class":262},[252,46001,30532],{"class":258},[252,46003,30885],{"class":262},[252,46005,46006,46008,46010,46012],{"class":254,"line":1318},[252,46007,30877],{"class":258},[252,46009,30897],{"class":262},[252,46011,30532],{"class":258},[252,46013,30902],{"class":262},[252,46015,46016],{"class":254,"line":1333},[252,46017,2539],{"emptyLinePlaceholder":181},[252,46019,46020,46022,46024,46026,46028,46030,46032],{"class":254,"line":1339},[252,46021,14834],{"class":258},[252,46023,41633],{"class":2102},[252,46025,263],{"class":262},[252,46027,30918],{"class":2102},[252,46029,821],{"class":262},[252,46031,30923],{"class":2102},[252,46033,30926],{"class":262},[252,46035,46036,46038,46040],{"class":254,"line":1353},[252,46037,30941],{"class":258},[252,46039,30944],{"class":311},[252,46041,41652],{"class":262},[252,46043,46044,46046,46048,46050,46052,46054],{"class":254,"line":1359},[252,46045,30957],{"class":311},[252,46047,41659],{"class":262},[252,46049,30963],{"class":311},[252,46051,30966],{"class":262},[252,46053,30969],{"class":311},[252,46055,2115],{"class":262},[252,46057,46058,46060,46062,46064],{"class":254,"line":1450},[252,46059,30985],{"class":311},[252,46061,34911],{"class":262},[252,46063,308],{"class":258},[252,46065,34916],{"class":262},[252,46067,46068],{"class":254,"line":1456},[252,46069,41682],{"class":321},[252,46071,46072,46074,46076,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096,46098],{"class":254,"line":1468},[252,46073,30985],{"class":311},[252,46075,41689],{"class":262},[252,46077,308],{"class":258},[252,46079,30993],{"class":262},[252,46081,30996],{"class":5356},[252,46083,308],{"class":258},[252,46085,41700],{"class":262},[252,46087,31005],{"class":5356},[252,46089,308],{"class":258},[252,46091,41707],{"class":262},[252,46093,31014],{"class":5356},[252,46095,308],{"class":258},[252,46097,480],{"class":311},[252,46099,269],{"class":262},[252,46101,46102],{"class":254,"line":1751},[252,46103,41720],{"class":321},[252,46105,46106,46108,46110,46112,46114,46116,46118,46120,46122,46124,46126,46128,46130,46132,46134,46136],{"class":254,"line":1756},[252,46107,30985],{"class":311},[252,46109,41727],{"class":262},[252,46111,308],{"class":258},[252,46113,30993],{"class":262},[252,46115,30996],{"class":5356},[252,46117,308],{"class":258},[252,46119,41700],{"class":262},[252,46121,31005],{"class":5356},[252,46123,308],{"class":258},[252,46125,41744],{"class":262},[252,46127,454],{"class":311},[252,46129,41749],{"class":262},[252,46131,31014],{"class":5356},[252,46133,308],{"class":258},[252,46135,480],{"class":311},[252,46137,269],{"class":262},[252,46139,46140,46142,46144,46146,46148,46150,46152,46154,46156,46158,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180,46182],{"class":254,"line":1762},[252,46141,30985],{"class":311},[252,46143,41764],{"class":262},[252,46145,308],{"class":258},[252,46147,30993],{"class":262},[252,46149,30996],{"class":5356},[252,46151,308],{"class":258},[252,46153,41744],{"class":262},[252,46155,454],{"class":311},[252,46157,41749],{"class":262},[252,46159,31005],{"class":5356},[252,46161,308],{"class":258},[252,46163,41744],{"class":262},[252,46165,480],{"class":311},[252,46167,41749],{"class":262},[252,46169,31014],{"class":5356},[252,46171,308],{"class":258},[252,46173,334],{"class":311},[252,46175,641],{"class":262},[252,46177,31023],{"class":5356},[252,46179,308],{"class":258},[252,46181,480],{"class":311},[252,46183,269],{"class":262},[252,46185,46186],{"class":254,"line":1767},[252,46187,41809],{"class":321},[252,46189,46190,46192,46194,46196,46198,46200,46202,46204,46206,46208,46210,46212,46214,46216,46218,46220],{"class":254,"line":1781},[252,46191,30985],{"class":311},[252,46193,41816],{"class":262},[252,46195,308],{"class":258},[252,46197,30993],{"class":262},[252,46199,30996],{"class":5356},[252,46201,308],{"class":258},[252,46203,41700],{"class":262},[252,46205,31005],{"class":5356},[252,46207,308],{"class":258},[252,46209,41833],{"class":262},[252,46211,454],{"class":311},[252,46213,41749],{"class":262},[252,46215,31014],{"class":5356},[252,46217,308],{"class":258},[252,46219,480],{"class":311},[252,46221,269],{"class":262},[252,46223,46224,46226,46228,46230,46232,46234,46236,46238,46240,46242,46244,46246,46248,46250,46252,46254,46256,46258,46260,46262,46264,46266],{"class":254,"line":1786},[252,46225,30985],{"class":311},[252,46227,41852],{"class":262},[252,46229,308],{"class":258},[252,46231,30993],{"class":262},[252,46233,30996],{"class":5356},[252,46235,308],{"class":258},[252,46237,41833],{"class":262},[252,46239,454],{"class":311},[252,46241,41749],{"class":262},[252,46243,31005],{"class":5356},[252,46245,308],{"class":258},[252,46247,41833],{"class":262},[252,46249,480],{"class":311},[252,46251,41749],{"class":262},[252,46253,31014],{"class":5356},[252,46255,308],{"class":258},[252,46257,582],{"class":311},[252,46259,641],{"class":262},[252,46261,31023],{"class":5356},[252,46263,308],{"class":258},[252,46265,340],{"class":311},[252,46267,269],{"class":262},[252,46269,46270],{"class":254,"line":1792},[252,46271,41897],{"class":321},[252,46273,46274],{"class":254,"line":1813},[252,46275,41902],{"class":321},[252,46277,46278,46280,46282,46284,46286,46288,46290,46292,46294,46296,46298,46300,46302,46304,46306,46308],{"class":254,"line":1818},[252,46279,30985],{"class":311},[252,46281,41909],{"class":262},[252,46283,308],{"class":258},[252,46285,34969],{"class":262},[252,46287,31014],{"class":5356},[252,46289,308],{"class":258},[252,46291,334],{"class":311},[252,46293,641],{"class":262},[252,46295,31069],{"class":5356},[252,46297,308],{"class":258},[252,46299,480],{"class":311},[252,46301,641],{"class":262},[252,46303,31023],{"class":5356},[252,46305,308],{"class":258},[252,46307,480],{"class":311},[252,46309,269],{"class":262},[252,46311,46312,46314,46316,46318,46320,46322,46324,46326,46328,46330,46332,46334,46336,46338],{"class":254,"line":1832},[252,46313,30985],{"class":311},[252,46315,41944],{"class":262},[252,46317,308],{"class":258},[252,46319,30993],{"class":262},[252,46321,30996],{"class":5356},[252,46323,308],{"class":258},[252,46325,41700],{"class":262},[252,46327,31005],{"class":5356},[252,46329,308],{"class":258},[252,46331,41961],{"class":262},[252,46333,31014],{"class":5356},[252,46335,308],{"class":258},[252,46337,480],{"class":311},[252,46339,269],{"class":262},[252,46341,46342],{"class":254,"line":1837},[252,46343,2539],{"emptyLinePlaceholder":181},[252,46345,46346,46348,46350],{"class":254,"line":1866},[252,46347,30941],{"class":258},[252,46349,31233],{"class":2102},[252,46351,31236],{"class":262},[252,46353,46354,46356,46358,46360,46362,46364],{"class":254,"line":1871},[252,46355,41986],{"class":262},[252,46357,308],{"class":258},[252,46359,30963],{"class":311},[252,46361,35324],{"class":262},[252,46363,30963],{"class":311},[252,46365,41997],{"class":262},[252,46367,46368,46370,46372,46374,46376,46378,46380,46382,46384,46386],{"class":254,"line":1888},[252,46369,7225],{"class":262},[252,46371,308],{"class":258},[252,46373,30963],{"class":311},[252,46375,35324],{"class":262},[252,46377,30963],{"class":311},[252,46379,42012],{"class":262},[252,46381,30963],{"class":311},[252,46383,35324],{"class":262},[252,46385,30963],{"class":311},[252,46387,42021],{"class":262},[252,46389,46390,46392,46394,46396,46398,46400,46402,46404,46406,46408],{"class":254,"line":1893},[252,46391,42026],{"class":262},[252,46393,308],{"class":258},[252,46395,30963],{"class":311},[252,46397,35324],{"class":262},[252,46399,30963],{"class":311},[252,46401,42037],{"class":262},[252,46403,30963],{"class":311},[252,46405,35324],{"class":262},[252,46407,30963],{"class":311},[252,46409,42046],{"class":262},[252,46411,46412,46414,46416,46418,46420,46422,46424,46426],{"class":254,"line":1898},[252,46413,42051],{"class":262},[252,46415,308],{"class":258},[252,46417,30963],{"class":311},[252,46419,35324],{"class":262},[252,46421,30963],{"class":311},[252,46423,42062],{"class":262},[252,46425,30963],{"class":311},[252,46427,42067],{"class":262},[252,46429,46430],{"class":254,"line":1903},[252,46431,42072],{"class":321},[252,46433,46434,46436,46438,46440,46442,46444],{"class":254,"line":1917},[252,46435,14892],{"class":258},[252,46437,42079],{"class":262},[252,46439,32825],{"class":5356},[252,46441,308],{"class":258},[252,46443,480],{"class":311},[252,46445,269],{"class":262},[252,46447,46448],{"class":254,"line":1922},[252,46449,2539],{"emptyLinePlaceholder":181},[252,46451,46452],{"class":254,"line":2716},[252,46453,42100],{"class":321},[252,46455,46456,46458,46460,46462,46464,46466,46468],{"class":254,"line":2730},[252,46457,14834],{"class":258},[252,46459,42107],{"class":2102},[252,46461,263],{"class":262},[252,46463,30918],{"class":2102},[252,46465,821],{"class":262},[252,46467,30923],{"class":2102},[252,46469,30926],{"class":262},[252,46471,46472],{"class":254,"line":2738},[252,46473,42122],{"class":321},[252,46475,46476,46478,46480],{"class":254,"line":2743},[252,46477,30941],{"class":258},[252,46479,30944],{"class":311},[252,46481,42131],{"class":262},[252,46483,46484,46486,46488,46490,46492,46494],{"class":254,"line":2749},[252,46485,30957],{"class":311},[252,46487,42138],{"class":262},[252,46489,30963],{"class":311},[252,46491,30966],{"class":262},[252,46493,30969],{"class":311},[252,46495,2115],{"class":262},[252,46497,46498,46500,46502,46504],{"class":254,"line":2755},[252,46499,30985],{"class":311},[252,46501,42153],{"class":262},[252,46503,308],{"class":258},[252,46505,38149],{"class":262},[252,46507,46508,46510,46512,46514,46516,46518,46520,46522,46524,46526,46528,46530,46532,46534,46536,46538,46540,46542,46544,46546,46548],{"class":254,"line":2760},[252,46509,38154],{"class":262},[252,46511,30996],{"class":5356},[252,46513,308],{"class":258},[252,46515,334],{"class":311},[252,46517,641],{"class":262},[252,46519,31005],{"class":5356},[252,46521,308],{"class":258},[252,46523,466],{"class":311},[252,46525,641],{"class":262},[252,46527,31014],{"class":5356},[252,46529,308],{"class":258},[252,46531,632],{"class":311},[252,46533,641],{"class":262},[252,46535,31069],{"class":5356},[252,46537,308],{"class":258},[252,46539,340],{"class":311},[252,46541,641],{"class":262},[252,46543,31023],{"class":5356},[252,46545,308],{"class":258},[252,46547,334],{"class":311},[252,46549,38187],{"class":262},[252,46551,46552],{"class":254,"line":8088},[252,46553,38192],{"class":262},[252,46555,46556,46558,46560,46562,46564,46566,46568,46570,46572,46574,46576,46578,46580],{"class":254,"line":8112},[252,46557,38237],{"class":262},[252,46559,31014],{"class":5356},[252,46561,308],{"class":258},[252,46563,334],{"class":311},[252,46565,641],{"class":262},[252,46567,31069],{"class":5356},[252,46569,308],{"class":258},[252,46571,340],{"class":311},[252,46573,641],{"class":262},[252,46575,31023],{"class":5356},[252,46577,308],{"class":258},[252,46579,480],{"class":311},[252,46581,269],{"class":262},[252,46583,46584],{"class":254,"line":8117},[252,46585,38266],{"class":262},[252,46587,46588,46590,46592,46594],{"class":254,"line":8123},[252,46589,30985],{"class":311},[252,46591,42244],{"class":262},[252,46593,308],{"class":258},[252,46595,38149],{"class":262},[252,46597,46598,46600,46602,46604,46606,46608,46610,46612,46614,46616,46618,46620,46622],{"class":254,"line":8150},[252,46599,38154],{"class":262},[252,46601,30996],{"class":5356},[252,46603,308],{"class":258},[252,46605,466],{"class":311},[252,46607,641],{"class":262},[252,46609,31005],{"class":5356},[252,46611,308],{"class":258},[252,46613,466],{"class":311},[252,46615,641],{"class":262},[252,46617,31014],{"class":5356},[252,46619,308],{"class":258},[252,46621,480],{"class":311},[252,46623,38187],{"class":262},[252,46625,46626],{"class":254,"line":8155},[252,46627,38192],{"class":262},[252,46629,46630,46632,46634,46636,46638,46640,46642,46644,46646,46648,46650,46652,46654,46656,46658,46660,46662],{"class":254,"line":8161},[252,46631,38154],{"class":262},[252,46633,30996],{"class":5356},[252,46635,308],{"class":258},[252,46637,466],{"class":311},[252,46639,641],{"class":262},[252,46641,31005],{"class":5356},[252,46643,308],{"class":258},[252,46645,42299],{"class":311},[252,46647,641],{"class":262},[252,46649,31014],{"class":5356},[252,46651,308],{"class":258},[252,46653,334],{"class":311},[252,46655,641],{"class":262},[252,46657,31023],{"class":5356},[252,46659,308],{"class":258},[252,46661,480],{"class":311},[252,46663,38187],{"class":262},[252,46665,46666],{"class":254,"line":8173},[252,46667,38192],{"class":262},[252,46669,46670,46672,46674,46676,46678,46680,46682,46684,46686,46688,46690,46692,46694],{"class":254,"line":8185},[252,46671,38237],{"class":262},[252,46673,31014],{"class":5356},[252,46675,308],{"class":258},[252,46677,334],{"class":311},[252,46679,641],{"class":262},[252,46681,31069],{"class":5356},[252,46683,308],{"class":258},[252,46685,340],{"class":311},[252,46687,641],{"class":262},[252,46689,31023],{"class":5356},[252,46691,308],{"class":258},[252,46693,480],{"class":311},[252,46695,269],{"class":262},[252,46697,46698],{"class":254,"line":8197},[252,46699,38266],{"class":262},[252,46701,46702,46704,46706,46708],{"class":254,"line":9856},[252,46703,30985],{"class":311},[252,46705,42360],{"class":262},[252,46707,308],{"class":258},[252,46709,38149],{"class":262},[252,46711,46712,46714,46716,46718,46720,46722,46724,46726,46728,46730,46732,46734,46736,46738,46740],{"class":254,"line":9881},[252,46713,42369],{"class":262},[252,46715,42299],{"class":311},[252,46717,641],{"class":262},[252,46719,466],{"class":311},[252,46721,42378],{"class":262},[252,46723,472],{"class":311},[252,46725,641],{"class":262},[252,46727,32210],{"class":311},[252,46729,42387],{"class":262},[252,46731,864],{"class":311},[252,46733,641],{"class":262},[252,46735,460],{"class":311},[252,46737,42396],{"class":262},[252,46739,460],{"class":311},[252,46741,38187],{"class":262},[252,46743,46744,46746,46748,46750,46752,46754,46756,46758,46760,46762,46764,46766,46768,46770,46772],{"class":254,"line":9904},[252,46745,42369],{"class":262},[252,46747,35010],{"class":311},[252,46749,641],{"class":262},[252,46751,32210],{"class":311},[252,46753,42378],{"class":262},[252,46755,32210],{"class":311},[252,46757,641],{"class":262},[252,46759,42299],{"class":311},[252,46761,42387],{"class":262},[252,46763,460],{"class":311},[252,46765,641],{"class":262},[252,46767,472],{"class":311},[252,46769,42396],{"class":262},[252,46771,466],{"class":311},[252,46773,38187],{"class":262},[252,46775,46776,46778,46780,46782,46784,46786,46788,46790,46792,46794,46796,46798,46800],{"class":254,"line":9928},[252,46777,38237],{"class":262},[252,46779,31014],{"class":5356},[252,46781,308],{"class":258},[252,46783,334],{"class":311},[252,46785,641],{"class":262},[252,46787,31069],{"class":5356},[252,46789,308],{"class":258},[252,46791,340],{"class":311},[252,46793,641],{"class":262},[252,46795,31023],{"class":5356},[252,46797,308],{"class":258},[252,46799,480],{"class":311},[252,46801,269],{"class":262},[252,46803,46804],{"class":254,"line":9933},[252,46805,38266],{"class":262},[252,46807,46808,46810,46812,46814],{"class":254,"line":9938},[252,46809,30985],{"class":311},[252,46811,42471],{"class":262},[252,46813,308],{"class":258},[252,46815,38149],{"class":262},[252,46817,46818,46820,46822,46824,46826,46828,46830,46832,46834,46836,46838,46840,46842,46844,46846],{"class":254,"line":9943},[252,46819,42369],{"class":262},[252,46821,42482],{"class":311},[252,46823,641],{"class":262},[252,46825,42299],{"class":311},[252,46827,42378],{"class":262},[252,46829,472],{"class":311},[252,46831,641],{"class":262},[252,46833,42495],{"class":311},[252,46835,42387],{"class":262},[252,46837,864],{"class":311},[252,46839,641],{"class":262},[252,46841,870],{"class":311},[252,46843,42396],{"class":262},[252,46845,466],{"class":311},[252,46847,38187],{"class":262},[252,46849,46850,46852,46854,46856,46858,46860,46862,46864,46866,46868,46870,46872,46874,46876,46878],{"class":254,"line":9952},[252,46851,42369],{"class":262},[252,46853,38597],{"class":311},[252,46855,641],{"class":262},[252,46857,21187],{"class":311},[252,46859,42378],{"class":262},[252,46861,881],{"class":311},[252,46863,641],{"class":262},[252,46865,31641],{"class":311},[252,46867,42387],{"class":262},[252,46869,1063],{"class":311},[252,46871,641],{"class":262},[252,46873,466],{"class":311},[252,46875,42396],{"class":262},[252,46877,466],{"class":311},[252,46879,38187],{"class":262},[252,46881,46882,46884,46886,46888,46890,46892,46894,46896,46898,46900,46902,46904,46906,46908,46910],{"class":254,"line":9957},[252,46883,42369],{"class":262},[252,46885,38597],{"class":311},[252,46887,641],{"class":262},[252,46889,32210],{"class":311},[252,46891,42378],{"class":262},[252,46893,32210],{"class":311},[252,46895,641],{"class":262},[252,46897,35010],{"class":311},[252,46899,42387],{"class":262},[252,46901,1063],{"class":311},[252,46903,641],{"class":262},[252,46905,466],{"class":311},[252,46907,42396],{"class":262},[252,46909,466],{"class":311},[252,46911,38187],{"class":262},[252,46913,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934,46936,46938,46940,46942],{"class":254,"line":9963},[252,46915,42369],{"class":262},[252,46917,38597],{"class":311},[252,46919,641],{"class":262},[252,46921,881],{"class":311},[252,46923,42378],{"class":262},[252,46925,32210],{"class":311},[252,46927,641],{"class":262},[252,46929,42592],{"class":311},[252,46931,42387],{"class":262},[252,46933,460],{"class":311},[252,46935,641],{"class":262},[252,46937,466],{"class":311},[252,46939,42396],{"class":262},[252,46941,466],{"class":311},[252,46943,38187],{"class":262},[252,46945,46946,46948,46950,46952,46954,46956,46958,46960,46962,46964,46966,46968,46970,46972,46974],{"class":254,"line":9984},[252,46947,42369],{"class":262},[252,46949,42613],{"class":311},[252,46951,641],{"class":262},[252,46953,35010],{"class":311},[252,46955,42378],{"class":262},[252,46957,21187],{"class":311},[252,46959,641],{"class":262},[252,46961,42626],{"class":311},[252,46963,42387],{"class":262},[252,46965,460],{"class":311},[252,46967,641],{"class":262},[252,46969,32210],{"class":311},[252,46971,42396],{"class":262},[252,46973,32210],{"class":311},[252,46975,38187],{"class":262},[252,46977,46978,46980,46982,46984,46986,46988,46990,46992,46994,46996,46998,47000,47002],{"class":254,"line":9990},[252,46979,38237],{"class":262},[252,46981,31014],{"class":5356},[252,46983,308],{"class":258},[252,46985,334],{"class":311},[252,46987,641],{"class":262},[252,46989,31069],{"class":5356},[252,46991,308],{"class":258},[252,46993,340],{"class":311},[252,46995,641],{"class":262},[252,46997,31023],{"class":5356},[252,46999,308],{"class":258},[252,47001,480],{"class":311},[252,47003,269],{"class":262},[252,47005,47006],{"class":254,"line":10004},[252,47007,38266],{"class":262},[252,47009,47010,47012,47014,47016],{"class":254,"line":10010},[252,47011,30985],{"class":311},[252,47013,42679],{"class":262},[252,47015,308],{"class":258},[252,47017,38149],{"class":262},[252,47019,47020,47022,47024,47026,47028,47030,47032,47034,47036,47038,47040,47042,47044,47046,47048],{"class":254,"line":10037},[252,47021,42369],{"class":262},[252,47023,42690],{"class":311},[252,47025,641],{"class":262},[252,47027,35010],{"class":311},[252,47029,42378],{"class":262},[252,47031,21187],{"class":311},[252,47033,641],{"class":262},[252,47035,42626],{"class":311},[252,47037,42387],{"class":262},[252,47039,460],{"class":311},[252,47041,641],{"class":262},[252,47043,32210],{"class":311},[252,47045,42396],{"class":262},[252,47047,32210],{"class":311},[252,47049,38187],{"class":262},[252,47051,47052,47054,47056,47058,47060,47062,47064,47066,47068,47070,47072,47074,47076,47078,47080],{"class":254,"line":10046},[252,47053,42369],{"class":262},[252,47055,42690],{"class":311},[252,47057,641],{"class":262},[252,47059,35080],{"class":311},[252,47061,42378],{"class":262},[252,47063,42299],{"class":311},[252,47065,641],{"class":262},[252,47067,35080],{"class":311},[252,47069,42387],{"class":262},[252,47071,870],{"class":311},[252,47073,641],{"class":262},[252,47075,32210],{"class":311},[252,47077,42396],{"class":262},[252,47079,32210],{"class":311},[252,47081,38187],{"class":262},[252,47083,47084,47086,47088,47090,47092],{"class":254,"line":10052},[252,47085,42753],{"class":262},[252,47087,480],{"class":311},[252,47089,641],{"class":262},[252,47091,480],{"class":311},[252,47093,42762],{"class":262},[252,47095,47096],{"class":254,"line":10060},[252,47097,38930],{"class":262},[252,47099,47100,47102,47104,47106,47108],{"class":254,"line":10065},[252,47101,38935],{"class":262},[252,47103,42773],{"class":311},[252,47105,641],{"class":262},[252,47107,340],{"class":311},[252,47109,269],{"class":262},[252,47111,47112],{"class":254,"line":16744},[252,47113,38266],{"class":262},[252,47115,47116],{"class":254,"line":16750},[252,47117,42788],{"class":321},[252,47119,47120,47122,47124,47126,47128],{"class":254,"line":16773},[252,47121,3542],{"class":258},[252,47123,39008],{"class":262},[252,47125,26183],{"class":258},[252,47127,39013],{"class":311},[252,47129,39016],{"class":262},[252,47131,47132,47134,47136],{"class":254,"line":16779},[252,47133,4781],{"class":258},[252,47135,39028],{"class":311},[252,47137,39031],{"class":262},[252,47139,47140,47142,47144,47146,47148,47150,47152,47154,47156],{"class":254,"line":16802},[252,47141,39041],{"class":262},[252,47143,42815],{"class":5356},[252,47145,308],{"class":258},[252,47147,42820],{"class":367},[252,47149,641],{"class":262},[252,47151,39044],{"class":5356},[252,47153,308],{"class":258},[252,47155,39049],{"class":367},[252,47157,269],{"class":262},[252,47159,47160],{"class":254,"line":16816},[252,47161,42835],{"class":321},[252,47163,47164],{"class":254,"line":16836},[252,47165,42840],{"class":321},[252,47167,47168],{"class":254,"line":16842},[252,47169,42845],{"class":321},[252,47171,47172],{"class":254,"line":16853},[252,47173,42850],{"class":321},[252,47175,47176],{"class":254,"line":16876},[252,47177,42855],{"class":321},[252,47179,47180],{"class":254,"line":16898},[252,47181,42860],{"class":321},[252,47183,47184,47186,47188,47190,47192,47194],{"class":254,"line":16903},[252,47185,39061],{"class":258},[252,47187,39064],{"class":262},[252,47189,39067],{"class":258},[252,47191,39070],{"class":258},[252,47193,39073],{"class":311},[252,47195,3878],{"class":262},[252,47197,47198,47200,47202],{"class":254,"line":16909},[252,47199,39085],{"class":262},[252,47201,454],{"class":311},[252,47203,269],{"class":262},[252,47205,47206,47208,47210],{"class":254,"line":16923},[252,47207,42887],{"class":258},[252,47209,39028],{"class":311},[252,47211,39104],{"class":262},[252,47213,47214,47216,47218,47220,47222],{"class":254,"line":16936},[252,47215,42896],{"class":262},[252,47217,454],{"class":311},[252,47219,641],{"class":262},[252,47221,39126],{"class":311},[252,47223,269],{"class":262},[252,47225,47226,47228,47230,47232,47234,47236],{"class":254,"line":16941},[252,47227,42909],{"class":258},[252,47229,39064],{"class":262},[252,47231,39067],{"class":258},[252,47233,39070],{"class":258},[252,47235,39073],{"class":311},[252,47237,3878],{"class":262},[252,47239,47240,47242,47244],{"class":254,"line":16955},[252,47241,42924],{"class":262},[252,47243,454],{"class":311},[252,47245,269],{"class":262},[252,47247,47248],{"class":254,"line":16960},[252,47249,35305],{"class":321},[252,47251,47252,47254,47256],{"class":254,"line":16966},[252,47253,30941],{"class":258},[252,47255,31233],{"class":2102},[252,47257,31236],{"class":262},[252,47259,47260,47262,47264,47266],{"class":254,"line":16971},[252,47261,31241],{"class":262},[252,47263,308],{"class":258},[252,47265,30963],{"class":311},[252,47267,42951],{"class":262},[252,47269,47270,47272,47274,47276],{"class":254,"line":16985},[252,47271,31241],{"class":262},[252,47273,308],{"class":258},[252,47275,30963],{"class":311},[252,47277,42962],{"class":262},[252,47279,47280,47282,47284,47286],{"class":254,"line":16990},[252,47281,31241],{"class":262},[252,47283,308],{"class":258},[252,47285,30963],{"class":311},[252,47287,42973],{"class":262},[252,47289,47290,47292,47294,47296],{"class":254,"line":16995},[252,47291,31241],{"class":262},[252,47293,308],{"class":258},[252,47295,30963],{"class":311},[252,47297,42984],{"class":262},[252,47299,47300,47302,47304,47306],{"class":254,"line":17009},[252,47301,31241],{"class":262},[252,47303,308],{"class":258},[252,47305,30963],{"class":311},[252,47307,42995],{"class":262},[252,47309,47310,47312],{"class":254,"line":17021},[252,47311,14892],{"class":258},[252,47313,31349],{"class":262},[252,47315,47316],{"class":254,"line":17026},[252,47317,2539],{"emptyLinePlaceholder":181},[252,47319,47320],{"class":254,"line":17039},[252,47321,43010],{"class":321},[252,47323,47324,47326,47328,47330,47332],{"class":254,"line":17044},[252,47325,1670],{"class":258},[252,47327,31360],{"class":311},[252,47329,3088],{"class":258},[252,47331,31365],{"class":367},[252,47333,3878],{"class":262},[252,47335,47336,47338,47340,47342,47344,47346,47348,47350,47352],{"class":254,"line":17049},[252,47337,31377],{"class":262},[252,47339,308],{"class":258},[252,47341,30591],{"class":262},[252,47343,31384],{"class":367},[252,47345,1843],{"class":258},[252,47347,31389],{"class":262},[252,47349,1840],{"class":258},[252,47351,30616],{"class":367},[252,47353,269],{"class":262},[252,47355,47356,47358,47360],{"class":254,"line":17054},[252,47357,31429],{"class":262},[252,47359,308],{"class":258},[252,47361,43051],{"class":262},[252,47363,47364,47366,47368,47370,47372,47374,47376,47378],{"class":254,"line":17067},[252,47365,31439],{"class":311},[252,47367,31442],{"class":262},[252,47369,480],{"class":311},[252,47371,641],{"class":262},[252,47373,31641],{"class":311},[252,47375,641],{"class":262},[252,47377,31641],{"class":311},[252,47379,31455],{"class":262},[22137,47381,47383],{"id":47382},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47385,47386],{},"计算图片的均值与方差，用于训练中归一化处理操作",[244,47388,47390],{"className":30518,"code":47389,"language":30520,"meta":169,"style":169},"# 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",[22,47391,47392,47397,47410,47415,47421,47426,47436,47440,47445,47455,47459,47464,47474,47491,47495,47500,47512,47524,47555,47564,47574,47584,47588,47593,47608,47612,47617,47622,47627,47637,47642,47667,47671,47676,47691,47695,47708,47712,47717,47722,47727,47732,47737,47747,47757,47780,47788,47796,47804,47808,47820,47824,47829,47833,47837,47844,47864,47888,47895,47909,47914,47919,47923,47937,47941,47953],{"__ignoreMap":169},[252,47393,47394],{"class":254,"line":255},[252,47395,47396],{"class":321},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[252,47398,47399,47401,47404,47407],{"class":254,"line":170},[252,47400,30877],{"class":258},[252,47402,47403],{"class":311}," PIL",[252,47405,47406],{"class":258}," import",[252,47408,47409],{"class":262}," Image\n",[252,47411,47412],{"class":254,"line":1318},[252,47413,47414],{"class":321},"# os 用来处理文件夹和文件路径\n",[252,47416,47417,47419],{"class":254,"line":1333},[252,47418,30532],{"class":258},[252,47420,45445],{"class":262},[252,47422,47423],{"class":254,"line":1339},[252,47424,47425],{"class":321},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[252,47427,47428,47430,47432,47434],{"class":254,"line":1353},[252,47429,30532],{"class":258},[252,47431,31520],{"class":262},[252,47433,31523],{"class":258},[252,47435,31526],{"class":262},[252,47437,47438],{"class":254,"line":1359},[252,47439,2539],{"emptyLinePlaceholder":181},[252,47441,47442],{"class":254,"line":1450},[252,47443,47444],{"class":321},"# 文件夹路径，包含所有图片文件\n",[252,47446,47447,47450,47452],{"class":254,"line":1456},[252,47448,47449],{"class":262},"folder_path ",[252,47451,308],{"class":258},[252,47453,47454],{"class":367}," 'data_cat_dog'\n",[252,47456,47457],{"class":254,"line":1468},[252,47458,2539],{"emptyLinePlaceholder":181},[252,47460,47461],{"class":254,"line":1751},[252,47462,47463],{"class":321},"# 初始化累积变量\n",[252,47465,47466,47469,47471],{"class":254,"line":1756},[252,47467,47468],{"class":262},"total_pixels ",[252,47470,308],{"class":258},[252,47472,47473],{"class":311}," 0\n",[252,47475,47476,47479,47481,47484,47486,47488],{"class":254,"line":1762},[252,47477,47478],{"class":262},"sum_normalized_pixel_values ",[252,47480,308],{"class":258},[252,47482,47483],{"class":262}," np.zeros(",[252,47485,334],{"class":311},[252,47487,45948],{"class":262},[252,47489,47490],{"class":321},"# 如果是RGB图像，需要三个通道的均值和方差\n",[252,47492,47493],{"class":254,"line":1767},[252,47494,2539],{"emptyLinePlaceholder":181},[252,47496,47497],{"class":254,"line":1781},[252,47498,47499],{"class":321},"# 遍历文件夹中的图片文件\n",[252,47501,47502,47504,47507,47509],{"class":254,"line":1786},[252,47503,3164],{"class":258},[252,47505,47506],{"class":262}," root, dirs, files ",[252,47508,26183],{"class":258},[252,47510,47511],{"class":262}," os.walk(folder_path):\n",[252,47513,47514,47516,47519,47521],{"class":254,"line":1792},[252,47515,3340],{"class":258},[252,47517,47518],{"class":262}," filename ",[252,47520,26183],{"class":258},[252,47522,47523],{"class":262}," files:\n",[252,47525,47526,47528,47531,47534,47536,47539,47541,47544,47546,47549,47552],{"class":254,"line":1813},[252,47527,2636],{"class":258},[252,47529,47530],{"class":262}," filename.endswith((",[252,47532,47533],{"class":367},"'.jpg'",[252,47535,12575],{"class":262},[252,47537,47538],{"class":367},"'.jpeg'",[252,47540,12575],{"class":262},[252,47542,47543],{"class":367},"'.png'",[252,47545,12575],{"class":262},[252,47547,47548],{"class":367},"'.bmp'",[252,47550,47551],{"class":262},")):  ",[252,47553,47554],{"class":321},"# 可根据实际情况添加其他格式\n",[252,47556,47557,47559,47561],{"class":254,"line":1818},[252,47558,45813],{"class":262},[252,47560,308],{"class":258},[252,47562,47563],{"class":262}," os.path.join(root, filename)\n",[252,47565,47566,47569,47571],{"class":254,"line":1832},[252,47567,47568],{"class":262},"            image ",[252,47570,308],{"class":258},[252,47572,47573],{"class":262}," Image.open(image_path)\n",[252,47575,47576,47579,47581],{"class":254,"line":1837},[252,47577,47578],{"class":262},"            image_array ",[252,47580,308],{"class":258},[252,47582,47583],{"class":262}," np.array(image)\n",[252,47585,47586],{"class":254,"line":1866},[252,47587,2539],{"emptyLinePlaceholder":181},[252,47589,47590],{"class":254,"line":1871},[252,47591,47592],{"class":321},"            # 归一化像素值到0-1之间\n",[252,47594,47595,47598,47600,47603,47605],{"class":254,"line":1888},[252,47596,47597],{"class":262},"            normalized_image_array ",[252,47599,308],{"class":258},[252,47601,47602],{"class":262}," image_array ",[252,47604,847],{"class":258},[252,47606,47607],{"class":311}," 255.0\n",[252,47609,47610],{"class":254,"line":1893},[252,47611,2539],{"emptyLinePlaceholder":181},[252,47613,47614],{"class":254,"line":1898},[252,47615,47616],{"class":321},"            # print(image_path)\n",[252,47618,47619],{"class":254,"line":1903},[252,47620,47621],{"class":321},"            # print(normalized_image_array.shape)\n",[252,47623,47624],{"class":254,"line":1917},[252,47625,47626],{"class":321},"            # 累积归一化后的像素值和像素数量\n",[252,47628,47629,47632,47634],{"class":254,"line":1922},[252,47630,47631],{"class":262},"            total_pixels ",[252,47633,9617],{"class":258},[252,47635,47636],{"class":262}," normalized_image_array.size\n",[252,47638,47639],{"class":254,"line":2716},[252,47640,47641],{"class":321},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[252,47643,47644,47647,47649,47652,47655,47657,47659,47661,47663,47665],{"class":254,"line":2730},[252,47645,47646],{"class":262},"            sum_normalized_pixel_values ",[252,47648,9617],{"class":258},[252,47650,47651],{"class":262}," np.sum(normalized_image_array, ",[252,47653,47654],{"class":5356},"axis",[252,47656,308],{"class":258},[252,47658,263],{"class":262},[252,47660,454],{"class":311},[252,47662,12575],{"class":262},[252,47664,480],{"class":311},[252,47666,30637],{"class":262},[252,47668,47669],{"class":254,"line":2738},[252,47670,2539],{"emptyLinePlaceholder":181},[252,47672,47673],{"class":254,"line":2743},[252,47674,47675],{"class":321},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[252,47677,47678,47681,47683,47686,47688],{"class":254,"line":2749},[252,47679,47680],{"class":262},"mean ",[252,47682,308],{"class":258},[252,47684,47685],{"class":262}," sum_normalized_pixel_values ",[252,47687,847],{"class":258},[252,47689,47690],{"class":262}," total_pixels\n",[252,47692,47693],{"class":254,"line":2755},[252,47694,2539],{"emptyLinePlaceholder":181},[252,47696,47697,47700,47702,47704,47706],{"class":254,"line":2760},[252,47698,47699],{"class":262},"sum_squared_diff ",[252,47701,308],{"class":258},[252,47703,47483],{"class":262},[252,47705,334],{"class":311},[252,47707,269],{"class":262},[252,47709,47710],{"class":254,"line":8088},[252,47711,2539],{"emptyLinePlaceholder":181},[252,47713,47714],{"class":254,"line":8112},[252,47715,47716],{"class":321},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[252,47718,47719],{"class":254,"line":8117},[252,47720,47721],{"class":321},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[252,47723,47724],{"class":254,"line":8123},[252,47725,47726],{"class":321},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[252,47728,47729],{"class":254,"line":8150},[252,47730,47731],{"class":321},"# Image.open(image_path)：打开图片\n",[252,47733,47734],{"class":254,"line":8155},[252,47735,47736],{"class":321},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[252,47738,47739,47741,47743,47745],{"class":254,"line":8161},[252,47740,3164],{"class":258},[252,47742,47506],{"class":262},[252,47744,26183],{"class":258},[252,47746,47511],{"class":262},[252,47748,47749,47751,47753,47755],{"class":254,"line":8173},[252,47750,3340],{"class":258},[252,47752,47518],{"class":262},[252,47754,26183],{"class":258},[252,47756,47523],{"class":262},[252,47758,47759,47761,47763,47765,47767,47769,47771,47773,47775,47777],{"class":254,"line":8185},[252,47760,2636],{"class":258},[252,47762,47530],{"class":262},[252,47764,47533],{"class":367},[252,47766,12575],{"class":262},[252,47768,47538],{"class":367},[252,47770,12575],{"class":262},[252,47772,47543],{"class":367},[252,47774,12575],{"class":262},[252,47776,47548],{"class":367},[252,47778,47779],{"class":262},")):\n",[252,47781,47782,47784,47786],{"class":254,"line":8197},[252,47783,45813],{"class":262},[252,47785,308],{"class":258},[252,47787,47563],{"class":262},[252,47789,47790,47792,47794],{"class":254,"line":9856},[252,47791,47568],{"class":262},[252,47793,308],{"class":258},[252,47795,47573],{"class":262},[252,47797,47798,47800,47802],{"class":254,"line":9881},[252,47799,47578],{"class":262},[252,47801,308],{"class":258},[252,47803,47583],{"class":262},[252,47805,47806],{"class":254,"line":9904},[252,47807,47592],{"class":321},[252,47809,47810,47812,47814,47816,47818],{"class":254,"line":9928},[252,47811,47597],{"class":262},[252,47813,308],{"class":258},[252,47815,47602],{"class":262},[252,47817,847],{"class":258},[252,47819,47607],{"class":311},[252,47821,47822],{"class":254,"line":9933},[252,47823,47621],{"class":321},[252,47825,47826],{"class":254,"line":9938},[252,47827,47828],{"class":321},"            # print(mean.shape)\n",[252,47830,47831],{"class":254,"line":9943},[252,47832,47616],{"class":321},[252,47834,47835],{"class":254,"line":9952},[252,47836,2539],{"emptyLinePlaceholder":181},[252,47838,47839,47842],{"class":254,"line":9957},[252,47840,47841],{"class":258},"            try",[252,47843,3878],{"class":262},[252,47845,47846,47849,47851,47854,47856,47859,47861],{"class":254,"line":9963},[252,47847,47848],{"class":262},"                diff ",[252,47850,308],{"class":258},[252,47852,47853],{"class":262}," (normalized_image_array ",[252,47855,795],{"class":258},[252,47857,47858],{"class":262}," mean) ",[252,47860,10801],{"class":258},[252,47862,47863],{"class":311}," 2\n",[252,47865,47866,47869,47871,47874,47876,47878,47880,47882,47884,47886],{"class":254,"line":9984},[252,47867,47868],{"class":262},"                sum_squared_diff ",[252,47870,9617],{"class":258},[252,47872,47873],{"class":262}," np.sum(diff, ",[252,47875,47654],{"class":5356},[252,47877,308],{"class":258},[252,47879,263],{"class":262},[252,47881,454],{"class":311},[252,47883,12575],{"class":262},[252,47885,480],{"class":311},[252,47887,30637],{"class":262},[252,47889,47890,47893],{"class":254,"line":9990},[252,47891,47892],{"class":258},"            except",[252,47894,3878],{"class":262},[252,47896,47897,47900,47902,47904,47907],{"class":254,"line":10004},[252,47898,47899],{"class":311},"                print",[252,47901,263],{"class":262},[252,47903,315],{"class":258},[252,47905,47906],{"class":367},"\"捕获到自定义异常\"",[252,47908,269],{"class":262},[252,47910,47911],{"class":254,"line":10010},[252,47912,47913],{"class":321},"            # diff = (normalized_image_array - mean) ** 2\n",[252,47915,47916],{"class":254,"line":10037},[252,47917,47918],{"class":321},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[252,47920,47921],{"class":254,"line":10046},[252,47922,2539],{"emptyLinePlaceholder":181},[252,47924,47925,47928,47930,47933,47935],{"class":254,"line":10052},[252,47926,47927],{"class":262},"variance ",[252,47929,308],{"class":258},[252,47931,47932],{"class":262}," sum_squared_diff ",[252,47934,847],{"class":258},[252,47936,47690],{"class":262},[252,47938,47939],{"class":254,"line":10060},[252,47940,2539],{"emptyLinePlaceholder":181},[252,47942,47943,47945,47947,47950],{"class":254,"line":10065},[252,47944,30555],{"class":311},[252,47946,263],{"class":262},[252,47948,47949],{"class":367},"\"Mean:\"",[252,47951,47952],{"class":262},", mean)\n",[252,47954,47955,47957,47959,47962],{"class":254,"line":16744},[252,47956,30555],{"class":311},[252,47958,263],{"class":262},[252,47960,47961],{"class":367},"\"Variance:\"",[252,47963,47964],{"class":262},", variance)\n",[244,47966,47968],{"className":30518,"code":47967,"language":30520,"meta":169,"style":169},"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",[22,47969,47970,47976,47982,47992,47998,48008,48022,48032,48042,48052,48056,48066,48076,48080,48084,48092,48097,48102,48121,48125,48130,48135,48140,48145,48186,48191,48201,48206,48219,48224,48229,48234,48239,48244,48248,48253,48258,48280,48284,48316,48330,48340,48350,48354,48364,48378,48388,48398,48408,48414,48418,48422,48426,48430,48434,48442,48462,48466,48470,48474,48478,48494,48498,48502,48510,48514,48518,48526,48530,48534,48538,48546,48550,48554,48558,48566,48570,48578,48582,48590,48594,48602,48606,48614,48618,48622,48630,48634,48638,48650,48674,48688,48692,48696,48700,48708,48712,48720,48724,48732,48736,48744,48748,48756,48760,48768,48772,48784,48788,48796,48800,48808,48812,48816,48820,48824,48832,48836,48852,48856,48864,48868,48872,48876,48880,48884,48888,48892,48908,48912,48924,48928,48940,48944,48956,48960,48968,48972,48980,48984,48988,48992,48998,49002,49010,49014,49030,49034,49042,49046,49062,49074,49078,49090,49094,49098,49106,49110,49114,49122,49126,49134,49138,49146,49150,49154,49196,49238,49242,49246,49262,49266,49282,49286,49290,49298,49302,49306,49318,49356,49360,49364,49372,49376,49390,49400,49406,49412,49418,49424,49428,49432,49438,49442,49446,49454,49458,49476,49480,49484,49488,49504,49508,49512,49516,49520,49524,49544,49564,49568,49572,49576,49584,49592,49596,49612,49632,49652,49656,49661,49670,49679,49684,49689,49694,49707,49712,49721,49730,49747],{"__ignoreMap":169},[252,47971,47972,47974],{"class":254,"line":255},[252,47973,30532],{"class":258},[252,47975,31962],{"class":262},[252,47977,47978,47980],{"class":254,"line":170},[252,47979,30532],{"class":258},[252,47981,31969],{"class":262},[252,47983,47984,47986,47988,47990],{"class":254,"line":1318},[252,47985,30532],{"class":258},[252,47987,31980],{"class":262},[252,47989,31523],{"class":258},[252,47991,31985],{"class":262},[252,47993,47994,47996],{"class":254,"line":1333},[252,47995,30532],{"class":258},[252,47997,30535],{"class":262},[252,47999,48000,48002,48004,48006],{"class":254,"line":1339},[252,48001,30877],{"class":258},[252,48003,31555],{"class":262},[252,48005,30532],{"class":258},[252,48007,32002],{"class":262},[252,48009,48010,48012,48014,48016,48019],{"class":254,"line":1353},[252,48011,30877],{"class":258},[252,48013,31508],{"class":262},[252,48015,30532],{"class":258},[252,48017,48018],{"class":262}," ImageFolder ",[252,48020,48021],{"class":321},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[252,48023,48024,48026,48028,48030],{"class":254,"line":1359},[252,48025,30877],{"class":258},[252,48027,31538],{"class":262},[252,48029,30532],{"class":258},[252,48031,31543],{"class":262},[252,48033,48034,48036,48038,48040],{"class":254,"line":1450},[252,48035,30532],{"class":258},[252,48037,31555],{"class":262},[252,48039,31523],{"class":258},[252,48041,31560],{"class":262},[252,48043,48044,48046,48048,48050],{"class":254,"line":1456},[252,48045,30532],{"class":258},[252,48047,31572],{"class":262},[252,48049,31523],{"class":258},[252,48051,31577],{"class":262},[252,48053,48054],{"class":254,"line":1468},[252,48055,32047],{"class":321},[252,48057,48058,48060,48062,48064],{"class":254,"line":1751},[252,48059,30877],{"class":258},[252,48061,32054],{"class":262},[252,48063,30532],{"class":258},[252,48065,43171],{"class":262},[252,48067,48068,48070,48072,48074],{"class":254,"line":1756},[252,48069,30877],{"class":258},[252,48071,30880],{"class":262},[252,48073,30532],{"class":258},[252,48075,30885],{"class":262},[252,48077,48078],{"class":254,"line":1762},[252,48079,2539],{"emptyLinePlaceholder":181},[252,48081,48082],{"class":254,"line":1767},[252,48083,32082],{"class":321},[252,48085,48086,48088,48090],{"class":254,"line":1781},[252,48087,32087],{"class":258},[252,48089,32090],{"class":2102},[252,48091,32093],{"class":262},[252,48093,48094],{"class":254,"line":1786},[252,48095,48096],{"class":321},"    # 导入自己的数据集，并进行数据处理\n",[252,48098,48099],{"class":254,"line":1792},[252,48100,48101],{"class":321},"    # 定义数据集的路径\n",[252,48103,48104,48107,48109,48111,48113,48115,48119],{"class":254,"line":1813},[252,48105,48106],{"class":311},"    ROOT_PATH",[252,48108,308],{"class":258},[252,48110,933],{"class":258},[252,48112,514],{"class":367},[252,48114,821],{"class":311},[252,48116,48118],{"class":48117},"sA_wV","\u002Fdata\u002Ftrain",[252,48120,25273],{"class":367},[252,48122,48123],{"class":254,"line":1818},[252,48124,2539],{"emptyLinePlaceholder":181},[252,48126,48127],{"class":254,"line":1832},[252,48128,48129],{"class":321},"    # 定义归一化方法\n",[252,48131,48132],{"class":254,"line":1837},[252,48133,48134],{"class":321},"    # 这里需要先计算一下数据集的均值和方差\n",[252,48136,48137],{"class":254,"line":1866},[252,48138,48139],{"class":321},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[252,48141,48142],{"class":254,"line":1871},[252,48143,48144],{"class":321},"    # 第一个参数是均值，第二个参数是方差\n",[252,48146,48147,48150,48152,48155,48158,48160,48163,48165,48168,48171,48174,48176,48179,48181,48184],{"class":254,"line":1888},[252,48148,48149],{"class":262},"    normalize",[252,48151,308],{"class":258},[252,48153,48154],{"class":262},"transforms.Normalize([",[252,48156,48157],{"class":311},"0.162",[252,48159,641],{"class":262},[252,48161,48162],{"class":311},"0.151",[252,48164,641],{"class":262},[252,48166,48167],{"class":311},"0.138",[252,48169,48170],{"class":262},"],[",[252,48172,48173],{"class":311},"0.058",[252,48175,641],{"class":262},[252,48177,48178],{"class":311},"0.052",[252,48180,641],{"class":262},[252,48182,48183],{"class":311},"0.048",[252,48185,4796],{"class":262},[252,48187,48188],{"class":254,"line":1893},[252,48189,48190],{"class":321},"    # 定义数据集处理方法变量\n",[252,48192,48193,48196,48198],{"class":254,"line":1898},[252,48194,48195],{"class":262},"    train_transform",[252,48197,308],{"class":258},[252,48199,48200],{"class":262},"transforms.Compose([\n",[252,48202,48203],{"class":254,"line":1903},[252,48204,48205],{"class":321},"        # 调整图像大小为224*224\n",[252,48207,48208,48211,48213,48215,48217],{"class":254,"line":1917},[252,48209,48210],{"class":262},"        transforms.Resize((",[252,48212,31641],{"class":311},[252,48214,641],{"class":262},[252,48216,31641],{"class":311},[252,48218,42762],{"class":262},[252,48220,48221],{"class":254,"line":1922},[252,48222,48223],{"class":321},"        # 将图像转换为张量\n",[252,48225,48226],{"class":254,"line":2716},[252,48227,48228],{"class":262},"        transforms.ToTensor(),\n",[252,48230,48231],{"class":254,"line":2730},[252,48232,48233],{"class":262},"        normalize])\n",[252,48235,48236],{"class":254,"line":2738},[252,48237,48238],{"class":321},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[252,48240,48241],{"class":254,"line":2743},[252,48242,48243],{"class":321},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[252,48245,48246],{"class":254,"line":2749},[252,48247,2539],{"emptyLinePlaceholder":181},[252,48249,48250],{"class":254,"line":2755},[252,48251,48252],{"class":321},"    # 加载数据集\n",[252,48254,48255],{"class":254,"line":2760},[252,48256,48257],{"class":321},"    # 传入数据集路径与处理方法\n",[252,48259,48260,48262,48264,48267,48270,48272,48275,48277],{"class":254,"line":8088},[252,48261,32098],{"class":262},[252,48263,308],{"class":258},[252,48265,48266],{"class":262},"ImageFolder(",[252,48268,48269],{"class":311},"ROOT_PATH",[252,48271,641],{"class":262},[252,48273,48274],{"class":5356},"transform",[252,48276,308],{"class":258},[252,48278,48279],{"class":262},"train_transform)\n",[252,48281,48282],{"class":254,"line":8112},[252,48283,2539],{"emptyLinePlaceholder":181},[252,48285,48286,48288,48290,48292,48294,48296,48298,48300,48302,48304,48306,48308,48310,48312,48314],{"class":254,"line":8117},[252,48287,32150],{"class":262},[252,48289,308],{"class":258},[252,48291,32155],{"class":262},[252,48293,32158],{"class":311},[252,48295,263],{"class":262},[252,48297,32163],{"class":311},[252,48299,718],{"class":258},[252,48301,7498],{"class":311},[252,48303,32170],{"class":262},[252,48305,32158],{"class":311},[252,48307,263],{"class":262},[252,48309,32177],{"class":311},[252,48311,718],{"class":258},[252,48313,7498],{"class":311},[252,48315,32184],{"class":262},[252,48317,48318,48320,48322,48324,48326,48328],{"class":254,"line":8123},[252,48319,32189],{"class":262},[252,48321,308],{"class":258},[252,48323,32194],{"class":262},[252,48325,31677],{"class":5356},[252,48327,308],{"class":258},[252,48329,31682],{"class":262},[252,48331,48332,48334,48336,48338],{"class":254,"line":8150},[252,48333,32205],{"class":5356},[252,48335,308],{"class":258},[252,48337,460],{"class":311},[252,48339,31606],{"class":262},[252,48341,48342,48344,48346,48348],{"class":254,"line":8155},[252,48343,32217],{"class":5356},[252,48345,308],{"class":258},[252,48347,31616],{"class":311},[252,48349,31606],{"class":262},[252,48351,48352],{"class":254,"line":8161},[252,48353,32228],{"class":321},[252,48355,48356,48358,48360,48362],{"class":254,"line":8173},[252,48357,32233],{"class":5356},[252,48359,308],{"class":258},[252,48361,658],{"class":311},[252,48363,269],{"class":262},[252,48365,48366,48368,48370,48372,48374,48376],{"class":254,"line":8185},[252,48367,32244],{"class":262},[252,48369,308],{"class":258},[252,48371,31674],{"class":262},[252,48373,31677],{"class":5356},[252,48375,308],{"class":258},[252,48377,32255],{"class":262},[252,48379,48380,48382,48384,48386],{"class":254,"line":8197},[252,48381,32260],{"class":5356},[252,48383,308],{"class":258},[252,48385,460],{"class":311},[252,48387,31606],{"class":262},[252,48389,48390,48392,48394,48396],{"class":254,"line":9856},[252,48391,32271],{"class":5356},[252,48393,308],{"class":258},[252,48395,31616],{"class":311},[252,48397,31606],{"class":262},[252,48399,48400,48402,48404,48406],{"class":254,"line":9881},[252,48401,32282],{"class":5356},[252,48403,308],{"class":258},[252,48405,658],{"class":311},[252,48407,269],{"class":262},[252,48409,48410,48412],{"class":254,"line":9904},[252,48411,4229],{"class":258},[252,48413,32295],{"class":262},[252,48415,48416],{"class":254,"line":9928},[252,48417,2539],{"emptyLinePlaceholder":181},[252,48419,48420],{"class":254,"line":9933},[252,48421,32304],{"class":321},[252,48423,48424],{"class":254,"line":9938},[252,48425,32309],{"class":321},[252,48427,48428],{"class":254,"line":9943},[252,48429,2539],{"emptyLinePlaceholder":181},[252,48431,48432],{"class":254,"line":9952},[252,48433,32318],{"class":321},[252,48435,48436,48438,48440],{"class":254,"line":9957},[252,48437,32087],{"class":258},[252,48439,32325],{"class":2102},[252,48441,32328],{"class":262},[252,48443,48444,48446,48448,48450,48452,48454,48456,48458,48460],{"class":254,"line":9963},[252,48445,31377],{"class":262},[252,48447,308],{"class":258},[252,48449,30591],{"class":262},[252,48451,31384],{"class":367},[252,48453,1843],{"class":258},[252,48455,31389],{"class":262},[252,48457,1840],{"class":258},[252,48459,32347],{"class":367},[252,48461,269],{"class":262},[252,48463,48464],{"class":254,"line":9984},[252,48465,2539],{"emptyLinePlaceholder":181},[252,48467,48468],{"class":254,"line":9990},[252,48469,32362],{"class":321},[252,48471,48472],{"class":254,"line":10004},[252,48473,32367],{"class":321},[252,48475,48476],{"class":254,"line":10010},[252,48477,32372],{"class":321},[252,48479,48480,48482,48484,48486,48488,48490,48492],{"class":254,"line":10037},[252,48481,32377],{"class":262},[252,48483,308],{"class":258},[252,48485,32382],{"class":262},[252,48487,32385],{"class":5356},[252,48489,308],{"class":258},[252,48491,32390],{"class":311},[252,48493,269],{"class":262},[252,48495,48496],{"class":254,"line":10046},[252,48497,2539],{"emptyLinePlaceholder":181},[252,48499,48500],{"class":254,"line":10052},[252,48501,32401],{"class":321},[252,48503,48504,48506,48508],{"class":254,"line":10060},[252,48505,32406],{"class":262},[252,48507,308],{"class":258},[252,48509,32411],{"class":262},[252,48511,48512],{"class":254,"line":10065},[252,48513,2539],{"emptyLinePlaceholder":181},[252,48515,48516],{"class":254,"line":16744},[252,48517,32420],{"class":321},[252,48519,48520,48522,48524],{"class":254,"line":16750},[252,48521,31429],{"class":262},[252,48523,308],{"class":258},[252,48525,32429],{"class":262},[252,48527,48528],{"class":254,"line":16773},[252,48529,32434],{"class":321},[252,48531,48532],{"class":254,"line":16779},[252,48533,32439],{"class":321},[252,48535,48536],{"class":254,"line":16802},[252,48537,32444],{"class":321},[252,48539,48540,48542,48544],{"class":254,"line":16816},[252,48541,32449],{"class":262},[252,48543,308],{"class":258},[252,48545,32454],{"class":262},[252,48547,48548],{"class":254,"line":16836},[252,48549,2539],{"emptyLinePlaceholder":181},[252,48551,48552],{"class":254,"line":16842},[252,48553,32467],{"class":321},[252,48555,48556],{"class":254,"line":16853},[252,48557,32472],{"class":321},[252,48559,48560,48562,48564],{"class":254,"line":16876},[252,48561,32477],{"class":262},[252,48563,308],{"class":258},[252,48565,32482],{"class":311},[252,48567,48568],{"class":254,"line":16898},[252,48569,32487],{"class":321},[252,48571,48572,48574,48576],{"class":254,"line":16903},[252,48573,32492],{"class":262},[252,48575,308],{"class":258},[252,48577,32497],{"class":262},[252,48579,48580],{"class":254,"line":16909},[252,48581,32502],{"class":321},[252,48583,48584,48586,48588],{"class":254,"line":16923},[252,48585,32507],{"class":262},[252,48587,308],{"class":258},[252,48589,32497],{"class":262},[252,48591,48592],{"class":254,"line":16936},[252,48593,32516],{"class":321},[252,48595,48596,48598,48600],{"class":254,"line":16941},[252,48597,32521],{"class":262},[252,48599,308],{"class":258},[252,48601,32497],{"class":262},[252,48603,48604],{"class":254,"line":16955},[252,48605,32530],{"class":321},[252,48607,48608,48610,48612],{"class":254,"line":16960},[252,48609,32535],{"class":262},[252,48611,308],{"class":258},[252,48613,32497],{"class":262},[252,48615,48616],{"class":254,"line":16966},[252,48617,2539],{"emptyLinePlaceholder":181},[252,48619,48620],{"class":254,"line":16971},[252,48621,32548],{"class":321},[252,48623,48624,48626,48628],{"class":254,"line":16985},[252,48625,32553],{"class":262},[252,48627,308],{"class":258},[252,48629,32558],{"class":262},[252,48631,48632],{"class":254,"line":16990},[252,48633,2539],{"emptyLinePlaceholder":181},[252,48635,48636],{"class":254,"line":16995},[252,48637,32571],{"class":321},[252,48639,48640,48642,48644,48646,48648],{"class":254,"line":17009},[252,48641,3340],{"class":258},[252,48643,32578],{"class":262},[252,48645,26183],{"class":258},[252,48647,32583],{"class":311},[252,48649,32586],{"class":262},[252,48651,48652,48654,48656,48658,48660,48662,48664,48666,48668,48670,48672],{"class":254,"line":17021},[252,48653,32591],{"class":311},[252,48655,263],{"class":262},[252,48657,32596],{"class":367},[252,48659,32599],{"class":311},[252,48661,847],{"class":367},[252,48663,32599],{"class":311},[252,48665,514],{"class":367},[252,48667,32608],{"class":262},[252,48669,795],{"class":258},[252,48671,480],{"class":311},[252,48673,30637],{"class":262},[252,48675,48676,48678,48680,48682,48684,48686],{"class":254,"line":17026},[252,48677,32591],{"class":311},[252,48679,263],{"class":262},[252,48681,32623],{"class":367},[252,48683,718],{"class":258},[252,48685,709],{"class":311},[252,48687,269],{"class":262},[252,48689,48690],{"class":254,"line":17039},[252,48691,2539],{"emptyLinePlaceholder":181},[252,48693,48694],{"class":254,"line":17044},[252,48695,32638],{"class":321},[252,48697,48698],{"class":254,"line":17049},[252,48699,32643],{"class":321},[252,48701,48702,48704,48706],{"class":254,"line":17054},[252,48703,32648],{"class":262},[252,48705,308],{"class":258},[252,48707,32482],{"class":311},[252,48709,48710],{"class":254,"line":17067},[252,48711,32657],{"class":321},[252,48713,48714,48716,48718],{"class":254,"line":17072},[252,48715,32662],{"class":262},[252,48717,308],{"class":258},[252,48719,3224],{"class":311},[252,48721,48722],{"class":254,"line":32773},[252,48723,32671],{"class":321},[252,48725,48726,48728,48730],{"class":254,"line":32779},[252,48727,32676],{"class":262},[252,48729,308],{"class":258},[252,48731,32482],{"class":311},[252,48733,48734],{"class":254,"line":32785},[252,48735,32685],{"class":321},[252,48737,48738,48740,48742],{"class":254,"line":32791},[252,48739,32690],{"class":262},[252,48741,308],{"class":258},[252,48743,3224],{"class":311},[252,48745,48746],{"class":254,"line":32797},[252,48747,32699],{"class":321},[252,48749,48750,48752,48754],{"class":254,"line":32808},[252,48751,32704],{"class":262},[252,48753,308],{"class":258},[252,48755,3224],{"class":311},[252,48757,48758],{"class":254,"line":32814},[252,48759,32713],{"class":321},[252,48761,48762,48764,48766],{"class":254,"line":32834},[252,48763,32718],{"class":262},[252,48765,308],{"class":258},[252,48767,3224],{"class":311},[252,48769,48770],{"class":254,"line":32840},[252,48771,32727],{"class":321},[252,48773,48774,48776,48778,48780,48782],{"class":254,"line":32851},[252,48775,3542],{"class":258},[252,48777,31741],{"class":262},[252,48779,26183],{"class":258},[252,48781,31746],{"class":311},[252,48783,32740],{"class":262},[252,48785,48786],{"class":254,"line":32857},[252,48787,32745],{"class":321},[252,48789,48790,48792,48794],{"class":254,"line":32863},[252,48791,32750],{"class":262},[252,48793,308],{"class":258},[252,48795,32755],{"class":262},[252,48797,48798],{"class":254,"line":32869},[252,48799,32760],{"class":321},[252,48801,48802,48804,48806],{"class":254,"line":32875},[252,48803,32765],{"class":262},[252,48805,308],{"class":258},[252,48807,32770],{"class":262},[252,48809,48810],{"class":254,"line":32881},[252,48811,32776],{"class":321},[252,48813,48814],{"class":254,"line":32887},[252,48815,32782],{"class":262},[252,48817,48818],{"class":254,"line":32893},[252,48819,32788],{"class":321},[252,48821,48822],{"class":254,"line":32913},[252,48823,32794],{"class":321},[252,48825,48826,48828,48830],{"class":254,"line":32919},[252,48827,32800],{"class":262},[252,48829,308],{"class":258},[252,48831,32805],{"class":262},[252,48833,48834],{"class":254,"line":32935},[252,48835,32811],{"class":321},[252,48837,48838,48840,48842,48844,48846,48848,48850],{"class":254,"line":32941},[252,48839,32817],{"class":262},[252,48841,308],{"class":258},[252,48843,32822],{"class":262},[252,48845,32825],{"class":5356},[252,48847,308],{"class":258},[252,48849,480],{"class":311},[252,48851,269],{"class":262},[252,48853,48854],{"class":254,"line":32955},[252,48855,32837],{"class":321},[252,48857,48858,48860,48862],{"class":254,"line":32961},[252,48859,32843],{"class":262},[252,48861,308],{"class":258},[252,48863,32848],{"class":262},[252,48865,48866],{"class":254,"line":32976},[252,48867,32854],{"class":321},[252,48869,48870],{"class":254,"line":32982},[252,48871,32860],{"class":262},[252,48873,48874],{"class":254,"line":32991},[252,48875,32866],{"class":321},[252,48877,48878],{"class":254,"line":32997},[252,48879,32872],{"class":262},[252,48881,48882],{"class":254,"line":33006},[252,48883,32878],{"class":321},[252,48885,48886],{"class":254,"line":33012},[252,48887,32884],{"class":262},[252,48889,48890],{"class":254,"line":33018},[252,48891,32890],{"class":321},[252,48893,48894,48896,48898,48900,48902,48904,48906],{"class":254,"line":33027},[252,48895,32896],{"class":262},[252,48897,9617],{"class":258},[252,48899,32901],{"class":262},[252,48901,718],{"class":258},[252,48903,32906],{"class":262},[252,48905,454],{"class":311},[252,48907,269],{"class":262},[252,48909,48910],{"class":254,"line":33033},[252,48911,32916],{"class":321},[252,48913,48914,48916,48918,48920,48922],{"class":254,"line":33044},[252,48915,32922],{"class":262},[252,48917,9617],{"class":258},[252,48919,32927],{"class":262},[252,48921,3088],{"class":258},[252,48923,32932],{"class":262},[252,48925,48926],{"class":254,"line":33050},[252,48927,32938],{"class":321},[252,48929,48930,48932,48934,48936,48938],{"class":254,"line":33069},[252,48931,32944],{"class":262},[252,48933,9617],{"class":258},[252,48935,32906],{"class":262},[252,48937,454],{"class":311},[252,48939,269],{"class":262},[252,48941,48942],{"class":254,"line":33075},[252,48943,32958],{"class":321},[252,48945,48946,48948,48950,48952,48954],{"class":254,"line":33086},[252,48947,3542],{"class":258},[252,48949,32966],{"class":262},[252,48951,26183],{"class":258},[252,48953,31746],{"class":311},[252,48955,32973],{"class":262},[252,48957,48958],{"class":254,"line":33092},[252,48959,32979],{"class":321},[252,48961,48962,48964,48966],{"class":254,"line":33112},[252,48963,32750],{"class":262},[252,48965,308],{"class":258},[252,48967,32755],{"class":262},[252,48969,48970],{"class":254,"line":33128},[252,48971,32994],{"class":321},[252,48973,48974,48976,48978],{"class":254,"line":33134},[252,48975,32765],{"class":262},[252,48977,308],{"class":258},[252,48979,32770],{"class":262},[252,48981,48982],{"class":254,"line":33148},[252,48983,33009],{"class":321},[252,48985,48986],{"class":254,"line":33154},[252,48987,33015],{"class":262},[252,48989,48990],{"class":254,"line":33160},[252,48991,36496],{"class":321},[252,48993,48994,48996],{"class":254,"line":33171},[252,48995,33021],{"class":258},[252,48997,33024],{"class":262},[252,48999,49000],{"class":254,"line":33177},[252,49001,33030],{"class":321},[252,49003,49004,49006,49008],{"class":254,"line":33183},[252,49005,36511],{"class":262},[252,49007,308],{"class":258},[252,49009,32805],{"class":262},[252,49011,49012],{"class":254,"line":33193},[252,49013,33047],{"class":321},[252,49015,49016,49018,49020,49022,49024,49026,49028],{"class":254,"line":33199},[252,49017,36524],{"class":262},[252,49019,308],{"class":258},[252,49021,32822],{"class":262},[252,49023,32825],{"class":5356},[252,49025,308],{"class":258},[252,49027,480],{"class":311},[252,49029,269],{"class":262},[252,49031,49032],{"class":254,"line":33210},[252,49033,33072],{"class":321},[252,49035,49036,49038,49040],{"class":254,"line":33216},[252,49037,36545],{"class":262},[252,49039,308],{"class":258},[252,49041,32848],{"class":262},[252,49043,49044],{"class":254,"line":33226},[252,49045,33089],{"class":321},[252,49047,49048,49050,49052,49054,49056,49058,49060],{"class":254,"line":33231},[252,49049,36558],{"class":262},[252,49051,9617],{"class":258},[252,49053,36563],{"class":262},[252,49055,718],{"class":258},[252,49057,32906],{"class":262},[252,49059,454],{"class":311},[252,49061,269],{"class":262},[252,49063,49064,49066,49068,49070,49072],{"class":254,"line":33237},[252,49065,36576],{"class":262},[252,49067,9617],{"class":258},[252,49069,32927],{"class":262},[252,49071,3088],{"class":258},[252,49073,32932],{"class":262},[252,49075,49076],{"class":254,"line":33286},[252,49077,36589],{"class":321},[252,49079,49080,49082,49084,49086,49088],{"class":254,"line":33333},[252,49081,36594],{"class":262},[252,49083,9617],{"class":258},[252,49085,32906],{"class":262},[252,49087,454],{"class":311},[252,49089,269],{"class":262},[252,49091,49092],{"class":254,"line":33338},[252,49093,33151],{"class":321},[252,49095,49096],{"class":254,"line":33344},[252,49097,33157],{"class":321},[252,49099,49100,49102,49104],{"class":254,"line":33363},[252,49101,33163],{"class":262},[252,49103,847],{"class":258},[252,49105,33168],{"class":262},[252,49107,49108],{"class":254,"line":33369},[252,49109,33174],{"class":321},[252,49111,49112],{"class":254,"line":33389},[252,49113,33180],{"class":321},[252,49115,49116,49118,49120],{"class":254,"line":33395},[252,49117,33186],{"class":262},[252,49119,847],{"class":258},[252,49121,33168],{"class":262},[252,49123,49124],{"class":254,"line":33401},[252,49125,33196],{"class":321},[252,49127,49128,49130,49132],{"class":254,"line":33411},[252,49129,33202],{"class":262},[252,49131,847],{"class":258},[252,49133,33207],{"class":262},[252,49135,49136],{"class":254,"line":33416},[252,49137,33213],{"class":321},[252,49139,49140,49142,49144],{"class":254,"line":33422},[252,49141,33219],{"class":262},[252,49143,847],{"class":258},[252,49145,33207],{"class":262},[252,49147,49148],{"class":254,"line":33438},[252,49149,2539],{"emptyLinePlaceholder":181},[252,49151,49152],{"class":254,"line":33483},[252,49153,33234],{"class":321},[252,49155,49156,49158,49160,49162,49164,49166,49168,49170,49172,49174,49176,49178,49180,49182,49184,49186,49188,49190,49192,49194],{"class":254,"line":33489},[252,49157,32591],{"class":311},[252,49159,263],{"class":262},[252,49161,3731],{"class":367},[252,49163,32599],{"class":311},[252,49165,33248],{"class":367},[252,49167,1159],{"class":311},[252,49169,33253],{"class":258},[252,49171,1209],{"class":311},[252,49173,33258],{"class":367},[252,49175,1159],{"class":311},[252,49177,33253],{"class":258},[252,49179,1209],{"class":311},[252,49181,3731],{"class":367},[252,49183,33269],{"class":262},[252,49185,795],{"class":258},[252,49187,480],{"class":311},[252,49189,33276],{"class":262},[252,49191,795],{"class":258},[252,49193,480],{"class":311},[252,49195,33283],{"class":262},[252,49197,49198,49200,49202,49204,49206,49208,49210,49212,49214,49216,49218,49220,49222,49224,49226,49228,49230,49232,49234,49236],{"class":254,"line":33495},[252,49199,32591],{"class":311},[252,49201,263],{"class":262},[252,49203,3731],{"class":367},[252,49205,32599],{"class":311},[252,49207,33297],{"class":367},[252,49209,1159],{"class":311},[252,49211,33253],{"class":258},[252,49213,1209],{"class":311},[252,49215,33306],{"class":367},[252,49217,1159],{"class":311},[252,49219,33253],{"class":258},[252,49221,1209],{"class":311},[252,49223,3731],{"class":367},[252,49225,33317],{"class":262},[252,49227,795],{"class":258},[252,49229,480],{"class":311},[252,49231,33324],{"class":262},[252,49233,795],{"class":258},[252,49235,480],{"class":311},[252,49237,33283],{"class":262},[252,49239,49240],{"class":254,"line":33501},[252,49241,2539],{"emptyLinePlaceholder":181},[252,49243,49244],{"class":254,"line":33512},[252,49245,33341],{"class":321},[252,49247,49248,49250,49252,49254,49256,49258,49260],{"class":254,"line":33518},[252,49249,2636],{"class":258},[252,49251,33349],{"class":262},[252,49253,795],{"class":258},[252,49255,480],{"class":311},[252,49257,1203],{"class":262},[252,49259,1223],{"class":258},[252,49261,33360],{"class":262},[252,49263,49264],{"class":254,"line":33524},[252,49265,33366],{"class":321},[252,49267,49268,49270,49272,49274,49276,49278,49280],{"class":254,"line":33530},[252,49269,33372],{"class":262},[252,49271,302],{"class":311},[252,49273,308],{"class":258},[252,49275,33379],{"class":262},[252,49277,795],{"class":258},[252,49279,480],{"class":311},[252,49281,33386],{"class":262},[252,49283,49284],{"class":254,"line":33548},[252,49285,33392],{"class":321},[252,49287,49288],{"class":254,"line":33562},[252,49289,33398],{"class":321},[252,49291,49292,49294,49296],{"class":254,"line":33571},[252,49293,33404],{"class":262},[252,49295,308],{"class":258},[252,49297,32454],{"class":262},[252,49299,49300],{"class":254,"line":33580},[252,49301,2539],{"emptyLinePlaceholder":181},[252,49303,49304],{"class":254,"line":33589},[252,49305,33419],{"class":321},[252,49307,49308,49310,49312,49314,49316],{"class":254,"line":33598},[252,49309,33425],{"class":262},[252,49311,308],{"class":258},[252,49313,33430],{"class":262},[252,49315,795],{"class":258},[252,49317,33435],{"class":262},[252,49319,49320,49322,49324,49326,49328,49330,49332,49334,49336,49338,49340,49342,49344,49346,49348,49350,49352,49354],{"class":254,"line":33604},[252,49321,32591],{"class":311},[252,49323,263],{"class":262},[252,49325,33445],{"class":367},[252,49327,1159],{"class":311},[252,49329,33450],{"class":258},[252,49331,1209],{"class":311},[252,49333,807],{"class":367},[252,49335,1159],{"class":311},[252,49337,33450],{"class":258},[252,49339,1209],{"class":311},[252,49341,33463],{"class":367},[252,49343,33466],{"class":262},[252,49345,33469],{"class":258},[252,49347,1170],{"class":311},[252,49349,33474],{"class":262},[252,49351,591],{"class":258},[252,49353,1170],{"class":311},[252,49355,30637],{"class":262},[252,49357,49358],{"class":254,"line":33610},[252,49359,36873],{"class":321},[252,49361,49362],{"class":254,"line":33618},[252,49363,36878],{"class":321},[252,49365,49366,49368,49370],{"class":254,"line":33623},[252,49367,36883],{"class":262},[252,49369,33507],{"class":367},[252,49371,269],{"class":262},[252,49373,49374],{"class":254,"line":33629},[252,49375,33527],{"class":321},[252,49377,49378,49380,49382,49384,49386,49388],{"class":254,"line":33640},[252,49379,33533],{"class":262},[252,49381,308],{"class":258},[252,49383,33538],{"class":262},[252,49385,33541],{"class":5356},[252,49387,308],{"class":258},[252,49389,1685],{"class":262},[252,49391,49392,49394,49396,49398],{"class":254,"line":33646},[252,49393,33551],{"class":367},[252,49395,1122],{"class":262},[252,49397,33556],{"class":311},[252,49399,33559],{"class":262},[252,49401,49402,49404],{"class":254,"line":33666},[252,49403,33565],{"class":367},[252,49405,33568],{"class":262},[252,49407,49408,49410],{"class":254,"line":33672},[252,49409,33574],{"class":367},[252,49411,33577],{"class":262},[252,49413,49414,49416],{"class":254,"line":33678},[252,49415,33583],{"class":367},[252,49417,33586],{"class":262},[252,49419,49420,49422],{"class":254,"line":33684},[252,49421,33592],{"class":367},[252,49423,33595],{"class":262},[252,49425,49426],{"class":254,"line":33701},[252,49427,33601],{"class":262},[252,49429,49430],{"class":254,"line":33707},[252,49431,33607],{"class":321},[252,49433,49434,49436],{"class":254,"line":33713},[252,49435,4229],{"class":258},[252,49437,33615],{"class":262},[252,49439,49440],{"class":254,"line":33719},[252,49441,2539],{"emptyLinePlaceholder":181},[252,49443,49444],{"class":254,"line":33725},[252,49445,33626],{"class":321},[252,49447,49448,49450,49452],{"class":254,"line":33731},[252,49449,32087],{"class":258},[252,49451,33634],{"class":2102},[252,49453,33637],{"class":262},[252,49455,49456],{"class":254,"line":33758},[252,49457,33643],{"class":321},[252,49459,49460,49462,49464,49466,49468,49470,49472,49474],{"class":254,"line":33782},[252,49461,33649],{"class":262},[252,49463,31833],{"class":5356},[252,49465,308],{"class":258},[252,49467,263],{"class":262},[252,49469,761],{"class":311},[252,49471,641],{"class":262},[252,49473,556],{"class":311},[252,49475,30637],{"class":262},[252,49477,49478],{"class":254,"line":33788},[252,49479,33669],{"class":321},[252,49481,49482],{"class":254,"line":33794},[252,49483,33675],{"class":321},[252,49485,49486],{"class":254,"line":33800},[252,49487,33681],{"class":321},[252,49489,49490,49492,49494,49496,49498,49500,49502],{"class":254,"line":33811},[252,49491,31867],{"class":262},[252,49493,480],{"class":311},[252,49495,641],{"class":262},[252,49497,340],{"class":311},[252,49499,641],{"class":262},[252,49501,480],{"class":311},[252,49503,269],{"class":262},[252,49505,49506],{"class":254,"line":33822},[252,49507,33704],{"class":321},[252,49509,49510],{"class":254,"line":33828},[252,49511,33710],{"class":321},[252,49513,49514],{"class":254,"line":33845},[252,49515,33716],{"class":321},[252,49517,49518],{"class":254,"line":33868},[252,49519,33722],{"class":321},[252,49521,49522],{"class":254,"line":33891},[252,49523,33728],{"class":321},[252,49525,49526,49528,49530,49532,49534,49536,49538,49540,49542],{"class":254,"line":33897},[252,49527,33734],{"class":262},[252,49529,33737],{"class":367},[252,49531,33740],{"class":262},[252,49533,33743],{"class":367},[252,49535,641],{"class":262},[252,49537,33748],{"class":5356},[252,49539,308],{"class":258},[252,49541,33753],{"class":367},[252,49543,269],{"class":262},[252,49545,49546,49548,49550,49552,49554,49556,49558,49560,49562],{"class":254,"line":33902},[252,49547,33734],{"class":262},[252,49549,33737],{"class":367},[252,49551,33765],{"class":262},[252,49553,33768],{"class":367},[252,49555,641],{"class":262},[252,49557,33748],{"class":5356},[252,49559,308],{"class":258},[252,49561,33777],{"class":367},[252,49563,269],{"class":262},[252,49565,49566],{"class":254,"line":33911},[252,49567,33785],{"class":321},[252,49569,49570],{"class":254,"line":33921},[252,49571,33791],{"class":262},[252,49573,49574],{"class":254,"line":33927},[252,49575,33797],{"class":321},[252,49577,49578,49580,49582],{"class":254,"line":33932},[252,49579,33803],{"class":262},[252,49581,33806],{"class":367},[252,49583,269],{"class":262},[252,49585,49586,49588,49590],{"class":254,"line":33938},[252,49587,33814],{"class":262},[252,49589,33817],{"class":367},[252,49591,269],{"class":262},[252,49593,49594],{"class":254,"line":33951},[252,49595,33825],{"class":321},[252,49597,49598,49600,49602,49604,49606,49608,49610],{"class":254,"line":33957},[252,49599,31867],{"class":262},[252,49601,480],{"class":311},[252,49603,641],{"class":262},[252,49605,340],{"class":311},[252,49607,641],{"class":262},[252,49609,340],{"class":311},[252,49611,269],{"class":262},[252,49613,49614,49616,49618,49620,49622,49624,49626,49628,49630],{"class":254,"line":33968},[252,49615,33734],{"class":262},[252,49617,33737],{"class":367},[252,49619,33852],{"class":262},[252,49621,33743],{"class":367},[252,49623,641],{"class":262},[252,49625,33748],{"class":5356},[252,49627,308],{"class":258},[252,49629,33863],{"class":367},[252,49631,269],{"class":262},[252,49633,49634,49636,49638,49640,49642,49644,49646,49648,49650],{"class":254,"line":33979},[252,49635,33734],{"class":262},[252,49637,33737],{"class":367},[252,49639,33875],{"class":262},[252,49641,33768],{"class":367},[252,49643,641],{"class":262},[252,49645,33748],{"class":5356},[252,49647,308],{"class":258},[252,49649,33886],{"class":367},[252,49651,269],{"class":262},[252,49653,49654],{"class":254,"line":33998},[252,49655,33894],{"class":321},[252,49657,49659],{"class":254,"line":49658},219,[252,49660,33791],{"class":262},[252,49662,49664,49666,49668],{"class":254,"line":49663},220,[252,49665,33803],{"class":262},[252,49667,33737],{"class":367},[252,49669,269],{"class":262},[252,49671,49673,49675,49677],{"class":254,"line":49672},221,[252,49674,33814],{"class":262},[252,49676,33916],{"class":367},[252,49678,269],{"class":262},[252,49680,49682],{"class":254,"line":49681},222,[252,49683,33924],{"class":262},[252,49685,49687],{"class":254,"line":49686},223,[252,49688,2539],{"emptyLinePlaceholder":181},[252,49690,49692],{"class":254,"line":49691},224,[252,49693,33935],{"class":321},[252,49695,49697,49699,49701,49703,49705],{"class":254,"line":49696},225,[252,49698,1670],{"class":258},[252,49700,31360],{"class":311},[252,49702,3088],{"class":258},[252,49704,31365],{"class":367},[252,49706,3878],{"class":262},[252,49708,49710],{"class":254,"line":49709},226,[252,49711,33954],{"class":321},[252,49713,49715,49717,49719],{"class":254,"line":49714},227,[252,49716,44686],{"class":262},[252,49718,308],{"class":258},[252,49720,44691],{"class":262},[252,49722,49724,49726,49728],{"class":254,"line":49723},228,[252,49725,33971],{"class":262},[252,49727,308],{"class":258},[252,49729,33976],{"class":262},[252,49731,49733,49735,49737,49739,49741,49743,49745],{"class":254,"line":49732},229,[252,49734,33533],{"class":262},[252,49736,308],{"class":258},[252,49738,44708],{"class":262},[252,49740,33989],{"class":5356},[252,49742,308],{"class":258},[252,49744,1170],{"class":311},[252,49746,269],{"class":262},[252,49748,49750],{"class":254,"line":49749},230,[252,49751,34001],{"class":262},[22137,49753,49755],{"id":49754},"_242测试代码","2.4.2.测试代码",[19,49757,49758],{},"使用测试集进行测试与推理",[244,49760,49762],{"className":30518,"code":49761,"language":30520,"meta":169,"style":169},"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",[22,49763,49764,49770,49780,49790,49801,49811,49815,49819,49827,49832,49836,49853,49857,49861,49865,49869,49873,49905,49909,49917,49921,49933,49937,49941,49945,49949,49953,49957,49961,49965,49983,49997,50001,50011,50021,50031,50037,50041,50045,50053,50057,50073,50081,50085,50089,50097,50105,50109,50113,50117,50121,50127,50131,50141,50149,50157,50161,50165,50169,50177,50181,50197,50201,50205,50209,50221,50225,50237,50241,50245,50257,50261,50271,50275,50279,50291,50295,50303,50307,50311,50319,50323,50331,50335,50339,50343,50347,50351,50367,50375,50379,50383,50401,50407,50411,50421,50429,50437,50441,50445,50449,50453,50461,50465,50481,50485,50493,50501],{"__ignoreMap":169},[252,49765,49766,49768],{"class":254,"line":255},[252,49767,30532],{"class":258},[252,49769,30535],{"class":262},[252,49771,49772,49774,49776,49778],{"class":254,"line":170},[252,49773,30532],{"class":258},[252,49775,31555],{"class":262},[252,49777,31523],{"class":258},[252,49779,31560],{"class":262},[252,49781,49782,49784,49786,49788],{"class":254,"line":1318},[252,49783,30877],{"class":258},[252,49785,31538],{"class":262},[252,49787,30532],{"class":258},[252,49789,31543],{"class":262},[252,49791,49792,49794,49796,49798],{"class":254,"line":1333},[252,49793,30877],{"class":258},[252,49795,31508],{"class":262},[252,49797,30532],{"class":258},[252,49799,49800],{"class":262}," ImageFolder\n",[252,49802,49803,49805,49807,49809],{"class":254,"line":1339},[252,49804,30877],{"class":258},[252,49806,32054],{"class":262},[252,49808,30532],{"class":258},[252,49810,44780],{"class":262},[252,49812,49813],{"class":254,"line":1353},[252,49814,2539],{"emptyLinePlaceholder":181},[252,49816,49817],{"class":254,"line":1359},[252,49818,34091],{"class":321},[252,49820,49821,49823,49825],{"class":254,"line":1450},[252,49822,32087],{"class":258},[252,49824,34098],{"class":2102},[252,49826,32093],{"class":262},[252,49828,49829],{"class":254,"line":1456},[252,49830,49831],{"class":321},"   # 导入自己的数据集，并进行数据处理\n",[252,49833,49834],{"class":254,"line":1468},[252,49835,48101],{"class":321},[252,49837,49838,49840,49842,49844,49846,49848,49851],{"class":254,"line":1751},[252,49839,48106],{"class":311},[252,49841,308],{"class":258},[252,49843,933],{"class":258},[252,49845,514],{"class":367},[252,49847,821],{"class":311},[252,49849,49850],{"class":48117},"\u002Fdata\u002Ftest",[252,49852,25273],{"class":367},[252,49854,49855],{"class":254,"line":1756},[252,49856,2539],{"emptyLinePlaceholder":181},[252,49858,49859],{"class":254,"line":1762},[252,49860,48129],{"class":321},[252,49862,49863],{"class":254,"line":1767},[252,49864,48134],{"class":321},[252,49866,49867],{"class":254,"line":1781},[252,49868,48139],{"class":321},[252,49870,49871],{"class":254,"line":1786},[252,49872,48144],{"class":321},[252,49874,49875,49877,49879,49881,49883,49885,49887,49889,49891,49893,49895,49897,49899,49901,49903],{"class":254,"line":1792},[252,49876,48149],{"class":262},[252,49878,308],{"class":258},[252,49880,48154],{"class":262},[252,49882,48157],{"class":311},[252,49884,641],{"class":262},[252,49886,48162],{"class":311},[252,49888,641],{"class":262},[252,49890,48167],{"class":311},[252,49892,48170],{"class":262},[252,49894,48173],{"class":311},[252,49896,641],{"class":262},[252,49898,48178],{"class":311},[252,49900,641],{"class":262},[252,49902,48183],{"class":311},[252,49904,4796],{"class":262},[252,49906,49907],{"class":254,"line":1813},[252,49908,48190],{"class":321},[252,49910,49911,49913,49915],{"class":254,"line":1818},[252,49912,48195],{"class":262},[252,49914,308],{"class":258},[252,49916,48200],{"class":262},[252,49918,49919],{"class":254,"line":1832},[252,49920,48205],{"class":321},[252,49922,49923,49925,49927,49929,49931],{"class":254,"line":1837},[252,49924,48210],{"class":262},[252,49926,31641],{"class":311},[252,49928,641],{"class":262},[252,49930,31641],{"class":311},[252,49932,42762],{"class":262},[252,49934,49935],{"class":254,"line":1866},[252,49936,48223],{"class":321},[252,49938,49939],{"class":254,"line":1871},[252,49940,48228],{"class":262},[252,49942,49943],{"class":254,"line":1888},[252,49944,48233],{"class":262},[252,49946,49947],{"class":254,"line":1893},[252,49948,48238],{"class":321},[252,49950,49951],{"class":254,"line":1898},[252,49952,48243],{"class":321},[252,49954,49955],{"class":254,"line":1903},[252,49956,2539],{"emptyLinePlaceholder":181},[252,49958,49959],{"class":254,"line":1917},[252,49960,48252],{"class":321},[252,49962,49963],{"class":254,"line":1922},[252,49964,48257],{"class":321},[252,49966,49967,49969,49971,49973,49975,49977,49979,49981],{"class":254,"line":2716},[252,49968,34105],{"class":262},[252,49970,308],{"class":258},[252,49972,48266],{"class":262},[252,49974,48269],{"class":311},[252,49976,641],{"class":262},[252,49978,48274],{"class":5356},[252,49980,308],{"class":258},[252,49982,48279],{"class":262},[252,49984,49985,49987,49989,49991,49993,49995],{"class":254,"line":2730},[252,49986,34162],{"class":262},[252,49988,308],{"class":258},[252,49990,31674],{"class":262},[252,49992,31677],{"class":5356},[252,49994,308],{"class":258},[252,49996,34173],{"class":262},[252,49998,49999],{"class":254,"line":2738},[252,50000,34178],{"class":321},[252,50002,50003,50005,50007,50009],{"class":254,"line":2743},[252,50004,34183],{"class":5356},[252,50006,308],{"class":258},[252,50008,480],{"class":311},[252,50010,31606],{"class":262},[252,50012,50013,50015,50017,50019],{"class":254,"line":2749},[252,50014,34194],{"class":5356},[252,50016,308],{"class":258},[252,50018,31616],{"class":311},[252,50020,31606],{"class":262},[252,50022,50023,50025,50027,50029],{"class":254,"line":2755},[252,50024,34205],{"class":5356},[252,50026,308],{"class":258},[252,50028,454],{"class":311},[252,50030,269],{"class":262},[252,50032,50033,50035],{"class":254,"line":2760},[252,50034,4229],{"class":258},[252,50036,34218],{"class":262},[252,50038,50039],{"class":254,"line":8088},[252,50040,2539],{"emptyLinePlaceholder":181},[252,50042,50043],{"class":254,"line":8112},[252,50044,34227],{"class":321},[252,50046,50047,50049,50051],{"class":254,"line":8117},[252,50048,32087],{"class":258},[252,50050,34234],{"class":2102},[252,50052,34237],{"class":262},[252,50054,50055],{"class":254,"line":8123},[252,50056,34242],{"class":321},[252,50058,50059,50061,50063,50065,50067,50069,50071],{"class":254,"line":8150},[252,50060,31377],{"class":262},[252,50062,308],{"class":258},[252,50064,31384],{"class":367},[252,50066,1843],{"class":258},[252,50068,31389],{"class":262},[252,50070,1840],{"class":258},[252,50072,34259],{"class":367},[252,50074,50075,50077,50079],{"class":254,"line":8155},[252,50076,31429],{"class":262},[252,50078,308],{"class":258},[252,50080,32429],{"class":262},[252,50082,50083],{"class":254,"line":8161},[252,50084,2539],{"emptyLinePlaceholder":181},[252,50086,50087],{"class":254,"line":8173},[252,50088,34276],{"class":321},[252,50090,50091,50093,50095],{"class":254,"line":8185},[252,50092,34281],{"class":262},[252,50094,308],{"class":258},[252,50096,32482],{"class":311},[252,50098,50099,50101,50103],{"class":254,"line":8197},[252,50100,34290],{"class":262},[252,50102,308],{"class":258},[252,50104,3224],{"class":311},[252,50106,50107],{"class":254,"line":9856},[252,50108,2539],{"emptyLinePlaceholder":181},[252,50110,50111],{"class":254,"line":9881},[252,50112,34303],{"class":321},[252,50114,50115],{"class":254,"line":9904},[252,50116,34308],{"class":321},[252,50118,50119],{"class":254,"line":9928},[252,50120,34313],{"class":321},[252,50122,50123,50125],{"class":254,"line":9933},[252,50124,34318],{"class":258},[252,50126,33024],{"class":262},[252,50128,50129],{"class":254,"line":9938},[252,50130,34325],{"class":321},[252,50132,50133,50135,50137,50139],{"class":254,"line":9943},[252,50134,3542],{"class":258},[252,50136,34332],{"class":262},[252,50138,26183],{"class":258},[252,50140,34337],{"class":262},[252,50142,50143,50145,50147],{"class":254,"line":9952},[252,50144,34342],{"class":262},[252,50146,308],{"class":258},[252,50148,34347],{"class":262},[252,50150,50151,50153,50155],{"class":254,"line":9957},[252,50152,34352],{"class":262},[252,50154,308],{"class":258},[252,50156,34357],{"class":262},[252,50158,50159],{"class":254,"line":9963},[252,50160,34362],{"class":321},[252,50162,50163],{"class":254,"line":9984},[252,50164,33015],{"class":262},[252,50166,50167],{"class":254,"line":9990},[252,50168,34371],{"class":321},[252,50170,50171,50173,50175],{"class":254,"line":10004},[252,50172,32800],{"class":262},[252,50174,308],{"class":258},[252,50176,34380],{"class":262},[252,50178,50179],{"class":254,"line":10010},[252,50180,34385],{"class":321},[252,50182,50183,50185,50187,50189,50191,50193,50195],{"class":254,"line":10037},[252,50184,32817],{"class":262},[252,50186,308],{"class":258},[252,50188,32822],{"class":262},[252,50190,32825],{"class":5356},[252,50192,308],{"class":258},[252,50194,480],{"class":311},[252,50196,269],{"class":262},[252,50198,50199],{"class":254,"line":10046},[252,50200,34406],{"class":321},[252,50202,50203],{"class":254,"line":10052},[252,50204,34411],{"class":321},[252,50206,50207],{"class":254,"line":10060},[252,50208,34416],{"class":321},[252,50210,50211,50213,50215,50217,50219],{"class":254,"line":10065},[252,50212,34421],{"class":262},[252,50214,9617],{"class":258},[252,50216,32927],{"class":262},[252,50218,3088],{"class":258},[252,50220,34430],{"class":262},[252,50222,50223],{"class":254,"line":16744},[252,50224,34435],{"class":321},[252,50226,50227,50229,50231,50233,50235],{"class":254,"line":16750},[252,50228,34440],{"class":262},[252,50230,9617],{"class":258},[252,50232,34445],{"class":262},[252,50234,454],{"class":311},[252,50236,269],{"class":262},[252,50238,50239],{"class":254,"line":16773},[252,50240,2539],{"emptyLinePlaceholder":181},[252,50242,50243],{"class":254,"line":16779},[252,50244,34458],{"class":321},[252,50246,50247,50249,50251,50253,50255],{"class":254,"line":16802},[252,50248,34463],{"class":262},[252,50250,308],{"class":258},[252,50252,34468],{"class":262},[252,50254,847],{"class":258},[252,50256,34473],{"class":262},[252,50258,50259],{"class":254,"line":16816},[252,50260,34478],{"class":321},[252,50262,50263,50265,50267,50269],{"class":254,"line":16836},[252,50264,32591],{"class":311},[252,50266,263],{"class":262},[252,50268,34487],{"class":367},[252,50270,34490],{"class":262},[252,50272,50273],{"class":254,"line":16842},[252,50274,2539],{"emptyLinePlaceholder":181},[252,50276,50277],{"class":254,"line":16853},[252,50278,34499],{"class":321},[252,50280,50281,50283,50285,50287,50289],{"class":254,"line":16876},[252,50282,1670],{"class":258},[252,50284,31360],{"class":311},[252,50286,3088],{"class":258},[252,50288,31365],{"class":367},[252,50290,3878],{"class":262},[252,50292,50293],{"class":254,"line":16898},[252,50294,34516],{"class":321},[252,50296,50297,50299,50301],{"class":254,"line":16903},[252,50298,31429],{"class":262},[252,50300,308],{"class":258},[252,50302,44691],{"class":262},[252,50304,50305],{"class":254,"line":16909},[252,50306,34529],{"class":321},[252,50308,50309],{"class":254,"line":16923},[252,50310,34534],{"class":321},[252,50312,50313,50315,50317],{"class":254,"line":16936},[252,50314,34539],{"class":262},[252,50316,34542],{"class":367},[252,50318,30637],{"class":262},[252,50320,50321],{"class":254,"line":16941},[252,50322,34549],{"class":321},[252,50324,50325,50327,50329],{"class":254,"line":16955},[252,50326,34162],{"class":262},[252,50328,308],{"class":258},[252,50330,34558],{"class":262},[252,50332,50333],{"class":254,"line":16960},[252,50334,34563],{"class":321},[252,50336,50337],{"class":254,"line":16966},[252,50338,34568],{"class":262},[252,50340,50341],{"class":254,"line":16971},[252,50342,2539],{"emptyLinePlaceholder":181},[252,50344,50345],{"class":254,"line":16985},[252,50346,34577],{"class":321},[252,50348,50349],{"class":254,"line":16990},[252,50350,34582],{"class":321},[252,50352,50353,50355,50357,50359,50361,50363,50365],{"class":254,"line":16995},[252,50354,31377],{"class":262},[252,50356,308],{"class":258},[252,50358,31384],{"class":367},[252,50360,1843],{"class":258},[252,50362,31389],{"class":262},[252,50364,1840],{"class":258},[252,50366,34259],{"class":367},[252,50368,50369,50371,50373],{"class":254,"line":17009},[252,50370,31429],{"class":262},[252,50372,308],{"class":258},[252,50374,32429],{"class":262},[252,50376,50377],{"class":254,"line":17021},[252,50378,34611],{"class":321},[252,50380,50381],{"class":254,"line":17026},[252,50382,34616],{"class":321},[252,50384,50385,50387,50389,50391,50394,50396,50399],{"class":254,"line":17039},[252,50386,34621],{"class":262},[252,50388,308],{"class":258},[252,50390,1153],{"class":262},[252,50392,50393],{"class":367},"'猫'",[252,50395,641],{"class":262},[252,50397,50398],{"class":367},"'狗'",[252,50400,33386],{"class":262},[252,50402,50403,50405],{"class":254,"line":17044},[252,50404,34318],{"class":258},[252,50406,33024],{"class":262},[252,50408,50409],{"class":254,"line":17049},[252,50410,34686],{"class":321},[252,50412,50413,50415,50417,50419],{"class":254,"line":17054},[252,50414,3542],{"class":258},[252,50416,34693],{"class":262},[252,50418,26183],{"class":258},[252,50420,34337],{"class":262},[252,50422,50423,50425,50427],{"class":254,"line":17067},[252,50424,32750],{"class":262},[252,50426,308],{"class":258},[252,50428,32755],{"class":262},[252,50430,50431,50433,50435],{"class":254,"line":17072},[252,50432,32765],{"class":262},[252,50434,308],{"class":258},[252,50436,32770],{"class":262},[252,50438,50439],{"class":254,"line":32773},[252,50440,2539],{"emptyLinePlaceholder":181},[252,50442,50443],{"class":254,"line":32779},[252,50444,34722],{"class":321},[252,50446,50447],{"class":254,"line":32785},[252,50448,33015],{"class":262},[252,50450,50451],{"class":254,"line":32791},[252,50452,34731],{"class":321},[252,50454,50455,50457,50459],{"class":254,"line":32797},[252,50456,32800],{"class":262},[252,50458,308],{"class":258},[252,50460,32805],{"class":262},[252,50462,50463],{"class":254,"line":32808},[252,50464,34744],{"class":321},[252,50466,50467,50469,50471,50473,50475,50477,50479],{"class":254,"line":32814},[252,50468,32817],{"class":262},[252,50470,308],{"class":258},[252,50472,32822],{"class":262},[252,50474,32825],{"class":5356},[252,50476,308],{"class":258},[252,50478,480],{"class":311},[252,50480,269],{"class":262},[252,50482,50483],{"class":254,"line":32834},[252,50484,34765],{"class":321},[252,50486,50487,50489,50491],{"class":254,"line":32840},[252,50488,34770],{"class":262},[252,50490,308],{"class":258},[252,50492,34775],{"class":262},[252,50494,50495,50497,50499],{"class":254,"line":32851},[252,50496,34780],{"class":262},[252,50498,308],{"class":258},[252,50500,34785],{"class":262},[252,50502,50503,50505,50507,50509,50511,50513,50515,50517],{"class":254,"line":32857},[252,50504,34790],{"class":311},[252,50506,263],{"class":262},[252,50508,34795],{"class":367},[252,50510,34798],{"class":262},[252,50512,34801],{"class":367},[252,50514,641],{"class":262},[252,50516,34806],{"class":367},[252,50518,34809],{"class":262},[5266,50520,50521],{},"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":169,"searchDepth":170,"depth":170,"links":50523},[50524,50525,50526,50527],{"id":30731,"depth":1318,"text":30732},{"id":37979,"depth":1318,"text":37980},{"id":41412,"depth":1318,"text":41413},{"id":45421,"depth":1318,"text":45422},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30723,"description":178},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50534,"title":50535,"body":50536,"description":178,"extension":179,"meta":50543,"navigation":181,"path":50544,"seo":50545,"stem":50546,"__hash__":50547},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50537,"toc":50541},[50538],[10,50539,50535],{"id":50540},"_3yolo模型学习",{"title":169,"searchDepth":170,"depth":170,"links":50542},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50535,"description":178},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50549,"title":50550,"body":50551,"description":50558,"extension":179,"meta":50559,"navigation":181,"path":50561,"seo":50562,"stem":50563,"__hash__":50564},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50552,"toc":50556},[50553],[19,50554,50555],{},"yolo模型还未补充",{"title":169,"searchDepth":170,"depth":170,"links":50557},[],"深度学习学习",{"category":50560},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50550,"description":50558},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50566,"title":50567,"body":50568,"description":178,"extension":179,"meta":50593,"navigation":181,"path":50594,"seo":50595,"stem":50596,"__hash__":50597},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50569,"toc":50591},[50570,50573,50576,50581,50588],[10,50571,50567],{"id":50572},"_1工具",[19,50574,50575],{},"提示错误插件：有问题会提前报错",[19,50577,50578],{},[1601,50579],{"alt":169,"src":50580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50582,50583],{},[501,50584,50587],{"href":50585,"rel":50586},"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",[24004],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50589,50590],{},"alt键加上下箭头可以实现语句的移动",{"title":169,"searchDepth":170,"depth":170,"links":50592},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50567,"description":178},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50599,"title":50600,"body":50601,"description":178,"extension":179,"meta":53465,"navigation":181,"path":53466,"seo":53467,"stem":53468,"__hash__":53469},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50602,"toc":53416},[50603,50606,50610,50614,50619,50622,50627,50631,50638,50643,50650,50655,50662,50667,50671,50676,50679,50683,50688,50692,50697,50700,50703,50706,50709,50712,50715,50718,50721,50726,50731,50736,50740,50743,50746,50750,50755,50758,50766,50771,50788,50796,50801,50806,50811,50816,50821,50824,50829,50834,50838,50847,50852,50857,50861,50866,50869,50873,50878,50886,50891,50896,50899,50904,50909,50914,50917,50920,50923,50928,50933,50936,50941,50944,50949,50952,50955,50958,50963,50966,50969,50984,50989,50994,50999,51002,51005,51008,51022,51025,51030,51035,51038,51041,51044,51047,51050,51053,51056,51060,51064,51069,51073,51076,51081,51086,51089,51094,51097,51101,51106,51109,51112,51115,51118,51121,51124,51127,51130,51133,51137,51142,51147,51152,51155,51158,51162,51167,51170,51174,51177,51180,51185,51188,51191,51195,51199,51202,51207,51212,51215,51244,51249,51254,51259,51264,51268,51273,51277,51282,51285,51289,51293,51298,51302,51307,51312,51316,51321,51324,51326,51329,51334,51338,51343,51347,51351,51356,51361,51366,51371,51375,51380,51385,51390,51393,51396,51401,51404,51409,51414,51419,51424,51428,52235,52239,52582,52587,52590,52593,52596,52599,52602,52605,52608,52611,52613,52616,52618,52621,52625,52630,52633,52636,52639,52643,52648,52653,52673,52676,52680,52685,52690,52707,52711,52740,52744,52766,52768,52807,52815,52821,52825,52828,52831,52836,52841,52844,52847,52850,52855,52860,52863,52866,52869,52872,52875,52878,52881,52884,52887,52890,52893,52895,52898,52901,52904,52907,52910,52913,52916,52919,52923,52928,52931,52936,52939,52942,52945,52948,52951,52954,52957,52959,52962,52965,52968,52971,52974,52977,52981,52984,52993,52996,53001,53004,53009,53012,53015,53018,53021,53024,53027,53030,53034,53038,53041,53044,53049,53054,53059,53063,53068,53073,53076,53079,53082,53085,53088,53093,53096,53101,53103,53108,53111,53115,53120,53123,53126,53131,53135,53138,53143,53146,53149,53178,53183,53186,53189,53192,53195,53198,53202,53205,53291,53295,53298,53303,53308,53315,53318,53321,53324,53327,53330,53335,53340,53343,53346,53349,53352,53355,53358,53361,53364,53367,53369,53372,53376,53381,53386,53391,53394,53399,53404,53407,53410,53413],[10,50604,50600],{"id":50605},"_2基础语法",[14,50607,50609],{"id":50608},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[224,50611,50613],{"id":50612},"_211-js组成","2.1.1 js组成",[207,50615,50616],{},[210,50617,50618],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50620,50621],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[207,50623,50624],{"start":170},[210,50625,50626],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[224,50628,50630],{"id":50629},"_212-js书写位置","2.1.2 js书写位置",[207,50632,50633],{},[210,50634,50635],{},[412,50636,50637],{},"内部 JavaScript",[19,50639,50640],{},[1601,50641],{"alt":169,"src":50642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[207,50644,50645],{"start":170},[210,50646,50647],{},[412,50648,50649],{},"外部 JavaScript",[19,50651,50652],{},[1601,50653],{"alt":169,"src":50654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[207,50656,50657],{"start":1318},[210,50658,50659],{},[412,50660,50661],{},"内联 JavaScript",[19,50663,50664],{},[1601,50665],{"alt":169,"src":50666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[224,50668,50670],{"id":50669},"_213-javascript注释","2.1.3 JavaScript注释",[19,50672,50673],{},[1601,50674],{"alt":169,"src":50675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50677,50678],{},"alt+shift+a一定要记住！",[224,50680,50682],{"id":50681},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50684,50685],{},[1601,50686],{"alt":169,"src":50687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[224,50689,50691],{"id":50690},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[207,50693,50694],{},[210,50695,50696],{},"输出语法：",[19,50698,50699],{},"①document.write('要出的内容')",[19,50701,50702],{},"向body内输出内容；",[19,50704,50705],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50707,50708],{},"②alert('要出的内容')",[19,50710,50711],{},"页面弹出警告对话框",[19,50713,50714],{},"③console.log('控制台打印')",[19,50716,50717],{},"控制台输出语法，程序员调试使用",[19,50719,50720],{},"输入log就行，自动生成：",[19,50722,50723],{},[1601,50724],{"alt":169,"src":50725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[207,50727,50728],{"start":170},[210,50729,50730],{},"输入语法：",[19,50732,50733],{},[1601,50734],{"alt":169,"src":50735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[224,50737,50739],{"id":50738},"_2116-字面量","21.1.6 字面量",[19,50741,50742],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50744,50745],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50747,50749],{"id":50748},"_22-变量","2.2 变量",[207,50751,50752],{},[210,50753,50754],{},"变量声明",[19,50756,50757],{},"let 变量名",[1270,50759,50760,50763],{},[210,50761,50762],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[210,50764,50765],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[207,50767,50768],{"start":170},[210,50769,50770],{},"变量赋值",[244,50772,50776],{"className":50773,"code":50774,"language":50775,"meta":169,"style":169},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[22,50777,50778,50783],{"__ignoreMap":169},[252,50779,50780],{"class":254,"line":255},[252,50781,50782],{"class":262},"let age\n",[252,50784,50785],{"class":254,"line":170},[252,50786,50787],{"class":262},"age=18\n",[207,50789,50790,50793],{"start":1318},[210,50791,50792],{},"连这些（变量的初始化）：let age=18",[210,50794,50795],{},"更新变量",[19,50797,50798],{},[1601,50799],{"alt":169,"src":50800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[207,50802,50803],{"start":1339},[210,50804,50805],{},"声明多个变量",[19,50807,50808],{},[1601,50809],{"alt":169,"src":50810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[207,50812,50813],{"start":1353},[210,50814,50815],{},"变量命名规则与规范",[19,50817,50818],{},[1601,50819],{"alt":169,"src":50820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,50822,50823],{},"遵守小驼峰！",[207,50825,50826],{"start":1359},[210,50827,50828],{},"变量拓展-let和var的区别",[19,50830,50831],{},[1601,50832],{"alt":169,"src":50833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50835,50837],{"id":50836},"_23-数组","2.3 数组",[244,50839,50841],{"className":50773,"code":50840,"language":50775,"meta":169,"style":169},"let arr = []\n",[22,50842,50843],{"__ignoreMap":169},[252,50844,50845],{"class":254,"line":255},[252,50846,50840],{"class":262},[19,50848,50849],{},[1601,50850],{"alt":169,"src":50851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,50853,50854],{},[1601,50855],{"alt":169,"src":50856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50858,50860],{"id":50859},"_24-常量","2.4 常量",[19,50862,50863],{},[1601,50864],{"alt":169,"src":50865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,50867,50868],{},"const — 类似于 let ，但是变量的值无法被修改",[14,50870,50872],{"id":50871},"_25-数据类型","2.5 数据类型",[19,50874,50875],{},[1601,50876],{"alt":169,"src":50877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[207,50879,50880,50883],{},[210,50881,50882],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[210,50884,50885],{},"算数运算符：",[19,50887,50888],{},[1601,50889],{"alt":169,"src":50890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[207,50892,50893],{"start":1318},[210,50894,50895],{},"数字类型（Number）",[19,50897,50898],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,50900,50901],{},[1601,50902],{"alt":169,"src":50903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[207,50905,50906],{"start":1333},[210,50907,50908],{},"字符串类型（string）",[19,50910,50911],{},[1601,50912],{"alt":169,"src":50913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,50915,50916],{},"反引号也是可以使用的",[19,50918,50919],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,50921,50922],{},"例如：document.write(\"我今年\"+age+\"岁\")",[207,50924,50925],{"start":1339},[210,50926,50927],{},"模板字符串",[19,50929,50930],{},[1601,50931],{"alt":169,"src":50932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,50934,50935],{},"类似于python的字符串格式化",[207,50937,50938],{"start":1353},[210,50939,50940],{},"布尔类型",[19,50942,50943],{},"true 和 false",[207,50945,50946],{"start":1359},[210,50947,50948],{},"未定义类型（underfined）",[19,50950,50951],{},"表示没有赋值",[19,50953,50954],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,50956,50957],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[207,50959,50960],{"start":1450},[210,50961,50962],{},"null（空类型）",[19,50964,50965],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,50967,50968],{},"赋值了，但是内容为空",[244,50970,50972],{"className":50773,"code":50971,"language":50775,"meta":169,"style":169},"typeof null\n输出的是'object'，是一个对象数据类型\n",[22,50973,50974,50979],{"__ignoreMap":169},[252,50975,50976],{"class":254,"line":255},[252,50977,50978],{"class":262},"typeof null\n",[252,50980,50981],{"class":254,"line":170},[252,50982,50983],{"class":262},"输出的是'object'，是一个对象数据类型\n",[207,50985,50986],{"start":1456},[210,50987,50988],{},"控制台检测数据类型",[19,50990,50991],{},[1601,50992],{"alt":169,"src":50993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[207,50995,50996],{"start":1468},[210,50997,50998],{},"类型转换",[19,51000,51001],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51003,51004],{},"转换方式：隐式转换和显示转换",[19,51006,51007],{},"①隐式转换",[1270,51009,51010,51013,51016,51019],{},[210,51011,51012],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[210,51014,51015],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[210,51017,51018],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[210,51020,51021],{},"任何数据和字符串相加结果都是字符串",[19,51023,51024],{},"②显示转换",[19,51026,51027],{},[1601,51028],{"alt":169,"src":51029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51031,51032],{},[1601,51033],{"alt":169,"src":51034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51036,51037],{},"在输入的时候要用好隐式转换，简单写起来",[19,51039,51040],{},"let num = +prompt(’请输入数字：‘)",[19,51042,51043],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51045,51046],{},"console.log(parseInt('12.333px'))",[19,51048,51049],{},"输出为：12",[19,51051,51052],{},"console.log(parseInt('a'a'a12.333px'))",[19,51054,51055],{},"输出：NaN",[14,51057,51059],{"id":51058},"_26-运算符","2.6 运算符",[224,51061,51063],{"id":51062},"_261-赋值运算符","2.6.1 赋值运算符",[19,51065,51066],{},[1601,51067],{"alt":169,"src":51068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[224,51070,51072],{"id":51071},"_262-一元运算符","2.6.2 一元运算符",[19,51074,51075],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51077,51078],{},[1601,51079],{"alt":169,"src":51080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51082,51083],{},[1601,51084],{"alt":169,"src":51085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51087,51088],{},"两者的区别：",[19,51090,51091],{},[1601,51092],{"alt":169,"src":51093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51095,51096],{},"前置先自加；后置后加，代码执行完之后再加",[224,51098,51100],{"id":51099},"_263-比较运算符","2.6.3 比较运算符",[19,51102,51103],{},[1601,51104],{"alt":169,"src":51105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51107,51108],{},"比较运算符也有隐式转换",[19,51110,51111],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51113,51114],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51116,51117],{},"要使用三等，开发的时候",[19,51119,51120],{},"NaN不等于任何人，包括它自己",[19,51122,51123],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51125,51126],{},"7\u002F10=0.7",[19,51128,51129],{},"最后：0.5+0.2=0.7",[19,51131,51132],{},"字符串比较，比较的是字符对应的ASCII码",[224,51134,51136],{"id":51135},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51138,51139],{},[1601,51140],{"alt":169,"src":51141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51143,51144],{},[1601,51145],{"alt":169,"src":51146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51148,51149],{},[1601,51150],{"alt":169,"src":51151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51153,51154],{},"上述题目选D",[19,51156,51157],{},"与真2假1；或真1假2",[224,51159,51161],{"id":51160},"_265-运算符优先级","2.6.5 运算符优先级",[19,51163,51164],{},[1601,51165],{"alt":169,"src":51166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51168,51169],{},"先算逻辑与，后算逻辑或",[14,51171,51173],{"id":51172},"_27-语句","2.7 语句",[19,51175,51176],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51178,51179],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51181,51182],{},[1601,51183],{"alt":169,"src":51184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51186,51187],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51189,51190],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[224,51192,51194],{"id":51193},"_271-分支语句","2.7.1 分支语句",[22137,51196,51198],{"id":51197},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51200,51201],{},"if语句单行简单的话，可以不写{}，写在一行就行",[207,51203,51204],{},[210,51205,51206],{},"单分支语句",[19,51208,51209],{},[1601,51210],{"alt":169,"src":51211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51213,51214],{},"除了0，所有数字都为真",[244,51216,51218],{"className":50773,"code":51217,"language":50775,"meta":169,"style":169},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[22,51219,51220,51225,51230,51235,51239],{"__ignoreMap":169},[252,51221,51222],{"class":254,"line":255},[252,51223,51224],{"class":262},"if（0) {\n",[252,51226,51227],{"class":254,"line":170},[252,51228,51229],{"class":262},"    let a=1\n",[252,51231,51232],{"class":254,"line":1318},[252,51233,51234],{"class":262},"    alert(typeof a)\n",[252,51236,51237],{"class":254,"line":1333},[252,51238,1704],{"class":262},[252,51240,51241],{"class":254,"line":1339},[252,51242,51243],{"class":262},"不输出，括号为假\n",[207,51245,51246],{"start":170},[210,51247,51248],{},"双分支语句",[19,51250,51251],{},[1601,51252],{"alt":169,"src":51253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[207,51255,51256],{"start":1318},[210,51257,51258],{},"多分支语句",[19,51260,51261],{},[1601,51262],{"alt":169,"src":51263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22137,51265,51267],{"id":51266},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51269,51270],{},[1601,51271],{"alt":169,"src":51272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22137,51274,51276],{"id":51275},"_2713-switch语句","2.7.1.3 switch语句",[19,51278,51279],{},[1601,51280],{"alt":169,"src":51281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51283,51284],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[224,51286,51288],{"id":51287},"_272-循环语句","2.7.2 循环语句",[22137,51290,51292],{"id":51291},"_2721-断点演示","2.7.2.1 断点演示",[19,51294,51295],{},[1601,51296],{"alt":169,"src":51297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22137,51299,51301],{"id":51300},"_2722-while循环","2.7.2.2 while循环",[19,51303,51304],{},[1601,51305],{"alt":169,"src":51306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51308,51309],{},[1601,51310],{"alt":169,"src":51311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22137,51313,51315],{"id":51314},"_2723-for循环","2.7.2.3 for循环",[19,51317,51318],{},[1601,51319],{"alt":169,"src":51320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51322,51323],{},"for(;;) {",[19,51325,1209],{},[19,51327,51328],{},"表示无限循环",[19,51330,51331],{},[1601,51332],{"alt":169,"src":51333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22137,51335,51337],{"id":51336},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51339,51340],{},[1601,51341],{"alt":169,"src":51342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51344,51346],{"id":51345},"_28-数组","2.8 数组",[224,51348,51350],{"id":51349},"_281-基础认识","2.8.1 基础认识",[19,51352,51353],{},[1601,51354],{"alt":169,"src":51355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51357,51358],{},[1601,51359],{"alt":169,"src":51360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51362,51363],{},[1601,51364],{"alt":169,"src":51365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51367,51368],{},[1601,51369],{"alt":169,"src":51370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[224,51372,51374],{"id":51373},"_282-操作数组","2.8.2 操作数组",[19,51376,51377],{},[1601,51378],{"alt":169,"src":51379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[207,51381,51382],{},[210,51383,51384],{},"添加元素",[19,51386,51387],{},[1601,51388],{"alt":169,"src":51389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51391,51392],{},"console.log(arr.push('green'))",[19,51394,51395],{},"输出结果：为新数组的长度",[19,51397,51398],{},[1601,51399],{"alt":169,"src":51400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51402,51403],{},"push用的非常多，一定要记住",[207,51405,51406],{},[210,51407,51408],{},"删除元素",[19,51410,51411],{},[1601,51412],{"alt":169,"src":51413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51415,51416],{},[1601,51417],{"alt":169,"src":51418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51420,51421],{},[1601,51422],{"alt":169,"src":51423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[224,51425,51427],{"id":51426},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[244,51429,51431],{"className":50773,"code":51430,"language":50775,"meta":169,"style":169},"\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",[22,51432,51433,51448,51464,51468,51477,51495,51519,51541,51555,51563,51570,51582,51593,51597,51601,51608,51620,51635,51648,51667,51684,51699,51711,51723,51735,51739,51743,51754,51764,51776,51788,51800,51811,51815,51819,51831,51835,51849,51853,51857,51868,51882,51894,51908,51912,51921,51930,51934,51943,51947,51956,51961,51966,51979,52007,52012,52017,52042,52047,52051,52056,52061,52076,52080,52085,52115,52127,52143,52159,52173,52178,52185,52189,52194,52207,52215,52223,52227],{"__ignoreMap":169},[252,51434,51435,51438,51442,51445],{"class":254,"line":255},[252,51436,51437],{"class":262},"\u003C!",[252,51439,51441],{"class":51440},"s9eBZ","DOCTYPE",[252,51443,51444],{"class":2102}," html",[252,51446,51447],{"class":262},">\n",[252,51449,51450,51452,51454,51457,51459,51462],{"class":254,"line":170},[252,51451,1173],{"class":262},[252,51453,50775],{"class":51440},[252,51455,51456],{"class":2102}," lang",[252,51458,308],{"class":262},[252,51460,51461],{"class":367},"\"en\"",[252,51463,51447],{"class":262},[252,51465,51466],{"class":254,"line":1318},[252,51467,2539],{"emptyLinePlaceholder":181},[252,51469,51470,51472,51475],{"class":254,"line":1333},[252,51471,1173],{"class":262},[252,51473,51474],{"class":51440},"head",[252,51476,51447],{"class":262},[252,51478,51479,51482,51485,51488,51490,51493],{"class":254,"line":1339},[252,51480,51481],{"class":262},"    \u003C",[252,51483,51484],{"class":51440},"meta",[252,51486,51487],{"class":2102}," charset",[252,51489,308],{"class":262},[252,51491,51492],{"class":367},"\"UTF-8\"",[252,51494,51447],{"class":262},[252,51496,51497,51499,51501,51504,51506,51509,51512,51514,51517],{"class":254,"line":1353},[252,51498,51481],{"class":262},[252,51500,51484],{"class":51440},[252,51502,51503],{"class":2102}," http-equiv",[252,51505,308],{"class":262},[252,51507,51508],{"class":367},"\"X-UA-Compatible\"",[252,51510,51511],{"class":2102}," content",[252,51513,308],{"class":262},[252,51515,51516],{"class":367},"\"IE=edge\"",[252,51518,51447],{"class":262},[252,51520,51521,51523,51525,51527,51529,51532,51534,51536,51539],{"class":254,"line":1359},[252,51522,51481],{"class":262},[252,51524,51484],{"class":51440},[252,51526,15060],{"class":2102},[252,51528,308],{"class":262},[252,51530,51531],{"class":367},"\"viewport\"",[252,51533,51511],{"class":2102},[252,51535,308],{"class":262},[252,51537,51538],{"class":367},"\"width=device-width, initial-scale=1.0\"",[252,51540,51447],{"class":262},[252,51542,51543,51545,51548,51551,51553],{"class":254,"line":1450},[252,51544,51481],{"class":262},[252,51546,51547],{"class":51440},"title",[252,51549,51550],{"class":262},">Document\u003C\u002F",[252,51552,51547],{"class":51440},[252,51554,51447],{"class":262},[252,51556,51557,51559,51561],{"class":254,"line":1456},[252,51558,51481],{"class":262},[252,51560,5266],{"class":51440},[252,51562,51447],{"class":262},[252,51564,51565,51568],{"class":254,"line":1468},[252,51566,51567],{"class":51440},"        *",[252,51569,15712],{"class":262},[252,51571,51572,51575,51578,51580],{"class":254,"line":1751},[252,51573,51574],{"class":311},"            margin",[252,51576,51577],{"class":262},": ",[252,51579,454],{"class":311},[252,51581,1429],{"class":262},[252,51583,51584,51587,51589,51591],{"class":254,"line":1756},[252,51585,51586],{"class":311},"            padding",[252,51588,51577],{"class":262},[252,51590,454],{"class":311},[252,51592,1429],{"class":262},[252,51594,51595],{"class":254,"line":1762},[252,51596,2668],{"class":262},[252,51598,51599],{"class":254,"line":1767},[252,51600,2539],{"emptyLinePlaceholder":181},[252,51602,51603,51606],{"class":254,"line":1781},[252,51604,51605],{"class":2102},"        .box",[252,51607,15712],{"class":262},[252,51609,51610,51613,51615,51618],{"class":254,"line":1786},[252,51611,51612],{"class":311},"            display",[252,51614,51577],{"class":262},[252,51616,51617],{"class":311},"flex",[252,51619,1429],{"class":262},[252,51621,51622,51625,51627,51630,51633],{"class":254,"line":1792},[252,51623,51624],{"class":311},"            width",[252,51626,51577],{"class":262},[252,51628,51629],{"class":311},"700",[252,51631,51632],{"class":258},"px",[252,51634,1429],{"class":262},[252,51636,51637,51640,51642,51644,51646],{"class":254,"line":1813},[252,51638,51639],{"class":311},"            height",[252,51641,51577],{"class":262},[252,51643,4112],{"class":311},[252,51645,51632],{"class":258},[252,51647,1429],{"class":262},[252,51649,51650,51653,51655,51657,51659,51662,51665],{"class":254,"line":1818},[252,51651,51652],{"class":311},"            border-left",[252,51654,51577],{"class":262},[252,51656,480],{"class":311},[252,51658,51632],{"class":258},[252,51660,51661],{"class":311}," solid",[252,51663,51664],{"class":311}," pink",[252,51666,1429],{"class":262},[252,51668,51669,51672,51674,51676,51678,51680,51682],{"class":254,"line":1832},[252,51670,51671],{"class":311},"            border-bottom",[252,51673,51577],{"class":262},[252,51675,480],{"class":311},[252,51677,51632],{"class":258},[252,51679,51661],{"class":311},[252,51681,51664],{"class":311},[252,51683,1429],{"class":262},[252,51685,51686,51688,51690,51692,51694,51697],{"class":254,"line":1837},[252,51687,51574],{"class":311},[252,51689,51577],{"class":262},[252,51691,919],{"class":311},[252,51693,51632],{"class":258},[252,51695,51696],{"class":311}," auto",[252,51698,1429],{"class":262},[252,51700,51701,51704,51706,51709],{"class":254,"line":1866},[252,51702,51703],{"class":311},"            justify-content",[252,51705,51577],{"class":262},[252,51707,51708],{"class":311},"space-around",[252,51710,1429],{"class":262},[252,51712,51713,51716,51718,51721],{"class":254,"line":1871},[252,51714,51715],{"class":311},"            align-items",[252,51717,51577],{"class":262},[252,51719,51720],{"class":311},"flex-end",[252,51722,1429],{"class":262},[252,51724,51725,51728,51730,51733],{"class":254,"line":1888},[252,51726,51727],{"class":311},"            text-align",[252,51729,51577],{"class":262},[252,51731,51732],{"class":311},"center",[252,51734,1429],{"class":262},[252,51736,51737],{"class":254,"line":1893},[252,51738,2668],{"class":262},[252,51740,51741],{"class":254,"line":1898},[252,51742,2539],{"emptyLinePlaceholder":181},[252,51744,51745,51747,51749,51752],{"class":254,"line":1903},[252,51746,51605],{"class":2102},[252,51748,1223],{"class":258},[252,51750,51751],{"class":51440},"div",[252,51753,15712],{"class":262},[252,51755,51756,51758,51760,51762],{"class":254,"line":1917},[252,51757,51612],{"class":311},[252,51759,51577],{"class":262},[252,51761,51617],{"class":311},[252,51763,1429],{"class":262},[252,51765,51766,51768,51770,51772,51774],{"class":254,"line":1922},[252,51767,51624],{"class":311},[252,51769,51577],{"class":262},[252,51771,919],{"class":311},[252,51773,51632],{"class":258},[252,51775,1429],{"class":262},[252,51777,51778,51781,51783,51786],{"class":254,"line":2716},[252,51779,51780],{"class":311},"            background-color",[252,51782,51577],{"class":262},[252,51784,51785],{"class":311},"pink",[252,51787,1429],{"class":262},[252,51789,51790,51793,51795,51798],{"class":254,"line":2730},[252,51791,51792],{"class":311},"            flex-direction",[252,51794,51577],{"class":262},[252,51796,51797],{"class":311},"column",[252,51799,1429],{"class":262},[252,51801,51802,51804,51806,51809],{"class":254,"line":2738},[252,51803,51703],{"class":311},[252,51805,51577],{"class":262},[252,51807,51808],{"class":311},"space-between",[252,51810,1429],{"class":262},[252,51812,51813],{"class":254,"line":2743},[252,51814,2668],{"class":262},[252,51816,51817],{"class":254,"line":2749},[252,51818,2539],{"emptyLinePlaceholder":181},[252,51820,51821,51823,51826,51829],{"class":254,"line":2755},[252,51822,51605],{"class":2102},[252,51824,51825],{"class":51440}," div",[252,51827,51828],{"class":51440}," span",[252,51830,15712],{"class":262},[252,51832,51833],{"class":254,"line":2760},[252,51834,2539],{"emptyLinePlaceholder":181},[252,51836,51837,51840,51842,51845,51847],{"class":254,"line":8088},[252,51838,51839],{"class":311},"            margin-top",[252,51841,51577],{"class":262},[252,51843,51844],{"class":311},"-20",[252,51846,51632],{"class":258},[252,51848,1429],{"class":262},[252,51850,51851],{"class":254,"line":8112},[252,51852,2668],{"class":262},[252,51854,51855],{"class":254,"line":8117},[252,51856,2539],{"emptyLinePlaceholder":181},[252,51858,51859,51861,51863,51866],{"class":254,"line":8123},[252,51860,51605],{"class":2102},[252,51862,51825],{"class":51440},[252,51864,51865],{"class":51440}," h4",[252,51867,15712],{"class":262},[252,51869,51870,51873,51875,51878,51880],{"class":254,"line":8150},[252,51871,51872],{"class":311},"            margin-bottom",[252,51874,51577],{"class":262},[252,51876,51877],{"class":311},"-35",[252,51879,51632],{"class":258},[252,51881,1429],{"class":262},[252,51883,51884,51886,51888,51890,51892],{"class":254,"line":8155},[252,51885,51624],{"class":311},[252,51887,51577],{"class":262},[252,51889,619],{"class":311},[252,51891,51632],{"class":258},[252,51893,1429],{"class":262},[252,51895,51896,51899,51901,51904,51906],{"class":254,"line":8161},[252,51897,51898],{"class":311},"            margin-left",[252,51900,51577],{"class":262},[252,51902,51903],{"class":311},"-10",[252,51905,51632],{"class":258},[252,51907,1429],{"class":262},[252,51909,51910],{"class":254,"line":8173},[252,51911,2668],{"class":262},[252,51913,51914,51917,51919],{"class":254,"line":8185},[252,51915,51916],{"class":262},"    \u003C\u002F",[252,51918,5266],{"class":51440},[252,51920,51447],{"class":262},[252,51922,51923,51926,51928],{"class":254,"line":8197},[252,51924,51925],{"class":262},"\u003C\u002F",[252,51927,51474],{"class":51440},[252,51929,51447],{"class":262},[252,51931,51932],{"class":254,"line":9856},[252,51933,2539],{"emptyLinePlaceholder":181},[252,51935,51936,51938,51941],{"class":254,"line":9881},[252,51937,1173],{"class":262},[252,51939,51940],{"class":51440},"body",[252,51942,51447],{"class":262},[252,51944,51945],{"class":254,"line":9904},[252,51946,2539],{"emptyLinePlaceholder":181},[252,51948,51949,51951,51954],{"class":254,"line":9928},[252,51950,51481],{"class":262},[252,51952,51953],{"class":51440},"script",[252,51955,51447],{"class":262},[252,51957,51958],{"class":254,"line":9933},[252,51959,51960],{"class":321},"        \u002F\u002F 1. 四次弹框效果\n",[252,51962,51963],{"class":254,"line":9938},[252,51964,51965],{"class":321},"        \u002F\u002F 声明一个新的数组\n",[252,51967,51968,51971,51974,51976],{"class":254,"line":9943},[252,51969,51970],{"class":258},"        let",[252,51972,51973],{"class":262}," arr ",[252,51975,308],{"class":258},[252,51977,51978],{"class":262}," []\n",[252,51980,51981,51983,51985,51988,51990,51992,51994,51996,51998,52001,52003,52005],{"class":254,"line":9952},[252,51982,3542],{"class":258},[252,51984,1797],{"class":262},[252,51986,51987],{"class":258},"let",[252,51989,9578],{"class":262},[252,51991,308],{"class":258},[252,51993,25258],{"class":311},[252,51995,9585],{"class":262},[252,51997,1727],{"class":258},[252,51999,52000],{"class":311}," 4",[252,52002,3353],{"class":262},[252,52004,2431],{"class":258},[252,52006,12582],{"class":262},[252,52008,52009],{"class":254,"line":9957},[252,52010,52011],{"class":321},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[252,52013,52014],{"class":254,"line":9963},[252,52015,52016],{"class":321},"            \u002F\u002F arr.push(num)\n",[252,52018,52019,52022,52025,52027,52030,52032,52035,52037,52040],{"class":254,"line":9984},[252,52020,52021],{"class":262},"            arr.",[252,52023,52024],{"class":2102},"push",[252,52026,263],{"class":262},[252,52028,52029],{"class":2102},"prompt",[252,52031,263],{"class":262},[252,52033,52034],{"class":367},"`请输入第${",[252,52036,704],{"class":262},[252,52038,52039],{"class":367},"}季度的数据:`",[252,52041,30637],{"class":262},[252,52043,52044],{"class":254,"line":9990},[252,52045,52046],{"class":321},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[252,52048,52049],{"class":254,"line":10004},[252,52050,2668],{"class":262},[252,52052,52053],{"class":254,"line":10010},[252,52054,52055],{"class":321},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[252,52057,52058],{"class":254,"line":10037},[252,52059,52060],{"class":321},"        \u002F\u002F 盒子开头\n",[252,52062,52063,52066,52069,52071,52074],{"class":254,"line":10046},[252,52064,52065],{"class":262},"        document.",[252,52067,52068],{"class":2102},"write",[252,52070,263],{"class":262},[252,52072,52073],{"class":367},"` \u003Cdiv class=\"box\">`",[252,52075,269],{"class":262},[252,52077,52078],{"class":254,"line":10052},[252,52079,2539],{"emptyLinePlaceholder":181},[252,52081,52082],{"class":254,"line":10060},[252,52083,52084],{"class":321},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[252,52086,52087,52089,52091,52093,52095,52097,52099,52101,52103,52106,52109,52111,52113],{"class":254,"line":10065},[252,52088,3542],{"class":258},[252,52090,1797],{"class":262},[252,52092,51987],{"class":258},[252,52094,9578],{"class":262},[252,52096,308],{"class":258},[252,52098,4232],{"class":311},[252,52100,9585],{"class":262},[252,52102,1173],{"class":258},[252,52104,52105],{"class":262}," arr.",[252,52107,52108],{"class":311},"length",[252,52110,3353],{"class":262},[252,52112,2431],{"class":258},[252,52114,12582],{"class":262},[252,52116,52117,52120,52122,52124],{"class":254,"line":16744},[252,52118,52119],{"class":262},"            document.",[252,52121,52068],{"class":2102},[252,52123,263],{"class":262},[252,52125,52126],{"class":367},"`\n",[252,52128,52129,52132,52134,52136,52138,52140],{"class":254,"line":16750},[252,52130,52131],{"class":367},"              \u003Cdiv style=\"height: ${",[252,52133,4019],{"class":262},[252,52135,1153],{"class":367},[252,52137,704],{"class":262},[252,52139,1203],{"class":367},[252,52141,52142],{"class":367},"}px;\">\n",[252,52144,52145,52148,52150,52152,52154,52156],{"class":254,"line":16773},[252,52146,52147],{"class":367},"                \u003Cspan>${",[252,52149,4019],{"class":262},[252,52151,1153],{"class":367},[252,52153,704],{"class":262},[252,52155,1203],{"class":367},[252,52157,52158],{"class":367},"}\u003C\u002Fspan>\n",[252,52160,52161,52164,52166,52168,52170],{"class":254,"line":16779},[252,52162,52163],{"class":367},"                \u003Ch4>第${",[252,52165,704],{"class":262},[252,52167,45706],{"class":258},[252,52169,25258],{"class":311},[252,52171,52172],{"class":367},"}季度\u003C\u002Fh4>\n",[252,52174,52175],{"class":254,"line":16802},[252,52176,52177],{"class":367},"              \u003C\u002Fdiv>          \n",[252,52179,52180,52183],{"class":254,"line":16816},[252,52181,52182],{"class":367},"            `",[252,52184,269],{"class":262},[252,52186,52187],{"class":254,"line":16836},[252,52188,2668],{"class":262},[252,52190,52191],{"class":254,"line":16842},[252,52192,52193],{"class":321},"        \u002F\u002F 盒子结尾\n",[252,52195,52196,52198,52200,52202,52205],{"class":254,"line":16853},[252,52197,52065],{"class":262},[252,52199,52068],{"class":2102},[252,52201,263],{"class":262},[252,52203,52204],{"class":367},"` \u003C\u002Fdiv>`",[252,52206,269],{"class":262},[252,52208,52209,52211,52213],{"class":254,"line":16876},[252,52210,51916],{"class":262},[252,52212,51953],{"class":51440},[252,52214,51447],{"class":262},[252,52216,52217,52219,52221],{"class":254,"line":16898},[252,52218,51925],{"class":262},[252,52220,51940],{"class":51440},[252,52222,51447],{"class":262},[252,52224,52225],{"class":254,"line":16903},[252,52226,2539],{"emptyLinePlaceholder":181},[252,52228,52229,52231,52233],{"class":254,"line":16909},[252,52230,51925],{"class":262},[252,52232,50775],{"class":51440},[252,52234,51447],{"class":262},[224,52236,52238],{"id":52237},"_284-冒泡排序","2.8.4 冒泡排序",[244,52240,52242],{"className":50773,"code":52241,"language":50775,"meta":169,"style":169},"\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",[22,52243,52244,52254,52268,52272,52280,52295,52315,52327,52335,52339,52347,52355,52387,52420,52457,52462,52481,52486,52499,52514,52530,52534,52539,52543,52553,52562,52570,52574],{"__ignoreMap":169},[252,52245,52246,52248,52250,52252],{"class":254,"line":255},[252,52247,51437],{"class":262},[252,52249,51441],{"class":51440},[252,52251,51444],{"class":2102},[252,52253,51447],{"class":262},[252,52255,52256,52258,52260,52262,52264,52266],{"class":254,"line":170},[252,52257,1173],{"class":262},[252,52259,50775],{"class":51440},[252,52261,51456],{"class":2102},[252,52263,308],{"class":262},[252,52265,51461],{"class":367},[252,52267,51447],{"class":262},[252,52269,52270],{"class":254,"line":1318},[252,52271,2539],{"emptyLinePlaceholder":181},[252,52273,52274,52276,52278],{"class":254,"line":1333},[252,52275,1173],{"class":262},[252,52277,51474],{"class":51440},[252,52279,51447],{"class":262},[252,52281,52282,52285,52287,52289,52291,52293],{"class":254,"line":1339},[252,52283,52284],{"class":262},"  \u003C",[252,52286,51484],{"class":51440},[252,52288,51487],{"class":2102},[252,52290,308],{"class":262},[252,52292,51492],{"class":367},[252,52294,51447],{"class":262},[252,52296,52297,52299,52301,52303,52305,52307,52309,52311,52313],{"class":254,"line":1353},[252,52298,52284],{"class":262},[252,52300,51484],{"class":51440},[252,52302,15060],{"class":2102},[252,52304,308],{"class":262},[252,52306,51531],{"class":367},[252,52308,51511],{"class":2102},[252,52310,308],{"class":262},[252,52312,51538],{"class":367},[252,52314,51447],{"class":262},[252,52316,52317,52319,52321,52323,52325],{"class":254,"line":1359},[252,52318,52284],{"class":262},[252,52320,51547],{"class":51440},[252,52322,51550],{"class":262},[252,52324,51547],{"class":51440},[252,52326,51447],{"class":262},[252,52328,52329,52331,52333],{"class":254,"line":1450},[252,52330,51925],{"class":262},[252,52332,51474],{"class":51440},[252,52334,51447],{"class":262},[252,52336,52337],{"class":254,"line":1456},[252,52338,2539],{"emptyLinePlaceholder":181},[252,52340,52341,52343,52345],{"class":254,"line":1468},[252,52342,1173],{"class":262},[252,52344,51940],{"class":51440},[252,52346,51447],{"class":262},[252,52348,52349,52351,52353],{"class":254,"line":1751},[252,52350,52284],{"class":262},[252,52352,51953],{"class":51440},[252,52354,51447],{"class":262},[252,52356,52357,52360,52362,52364,52367,52369,52371,52373,52375,52377,52379,52381,52383,52385],{"class":254,"line":1756},[252,52358,52359],{"class":258},"    let",[252,52361,51973],{"class":262},[252,52363,308],{"class":258},[252,52365,52366],{"class":262}," [",[252,52368,582],{"class":311},[252,52370,12575],{"class":262},[252,52372,556],{"class":311},[252,52374,12575],{"class":262},[252,52376,334],{"class":311},[252,52378,12575],{"class":262},[252,52380,340],{"class":311},[252,52382,12575],{"class":262},[252,52384,480],{"class":311},[252,52386,33386],{"class":262},[252,52388,52389,52391,52393,52395,52397,52399,52401,52403,52405,52407,52409,52412,52414,52416,52418],{"class":254,"line":1762},[252,52390,3340],{"class":258},[252,52392,1797],{"class":262},[252,52394,51987],{"class":258},[252,52396,9578],{"class":262},[252,52398,308],{"class":258},[252,52400,4232],{"class":311},[252,52402,9585],{"class":262},[252,52404,1173],{"class":258},[252,52406,52105],{"class":262},[252,52408,52108],{"class":311},[252,52410,52411],{"class":258}," -",[252,52413,25258],{"class":311},[252,52415,3353],{"class":262},[252,52417,2431],{"class":258},[252,52419,12582],{"class":262},[252,52421,52422,52425,52427,52429,52431,52433,52435,52437,52439,52441,52443,52445,52447,52449,52451,52453,52455],{"class":254,"line":1767},[252,52423,52424],{"class":258},"      for",[252,52426,1797],{"class":262},[252,52428,51987],{"class":258},[252,52430,9640],{"class":262},[252,52432,308],{"class":258},[252,52434,4232],{"class":311},[252,52436,9647],{"class":262},[252,52438,1173],{"class":258},[252,52440,52105],{"class":262},[252,52442,52108],{"class":311},[252,52444,52411],{"class":258},[252,52446,9578],{"class":262},[252,52448,795],{"class":258},[252,52450,25258],{"class":311},[252,52452,9654],{"class":262},[252,52454,2431],{"class":258},[252,52456,12582],{"class":262},[252,52458,52459],{"class":254,"line":1781},[252,52460,52461],{"class":321},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[252,52463,52464,52466,52469,52471,52474,52476,52478],{"class":254,"line":1786},[252,52465,2636],{"class":258},[252,52467,52468],{"class":262}," (arr[j] ",[252,52470,1223],{"class":258},[252,52472,52473],{"class":262}," arr[j ",[252,52475,744],{"class":258},[252,52477,25258],{"class":311},[252,52479,52480],{"class":262},"]) {\n",[252,52482,52483],{"class":254,"line":1792},[252,52484,52485],{"class":321},"          \u002F\u002F 交换两个变量\n",[252,52487,52488,52491,52494,52496],{"class":254,"line":1813},[252,52489,52490],{"class":258},"          let",[252,52492,52493],{"class":262}," tmp ",[252,52495,308],{"class":258},[252,52497,52498],{"class":262}," arr[j]\n",[252,52500,52501,52504,52506,52508,52510,52512],{"class":254,"line":1818},[252,52502,52503],{"class":262},"          arr[j] ",[252,52505,308],{"class":258},[252,52507,52473],{"class":262},[252,52509,744],{"class":258},[252,52511,25258],{"class":311},[252,52513,33386],{"class":262},[252,52515,52516,52519,52521,52523,52525,52527],{"class":254,"line":1832},[252,52517,52518],{"class":262},"          arr[j ",[252,52520,744],{"class":258},[252,52522,25258],{"class":311},[252,52524,4582],{"class":262},[252,52526,308],{"class":258},[252,52528,52529],{"class":262}," tmp\n",[252,52531,52532],{"class":254,"line":1837},[252,52533,2668],{"class":262},[252,52535,52536],{"class":254,"line":1866},[252,52537,52538],{"class":262},"      }\n",[252,52540,52541],{"class":254,"line":1871},[252,52542,2326],{"class":262},[252,52544,52545,52548,52550],{"class":254,"line":1888},[252,52546,52547],{"class":262},"    document.",[252,52549,52068],{"class":2102},[252,52551,52552],{"class":262},"(arr)\n",[252,52554,52555,52558,52560],{"class":254,"line":1893},[252,52556,52557],{"class":262},"  \u003C\u002F",[252,52559,51953],{"class":51440},[252,52561,51447],{"class":262},[252,52563,52564,52566,52568],{"class":254,"line":1898},[252,52565,51925],{"class":262},[252,52567,51940],{"class":51440},[252,52569,51447],{"class":262},[252,52571,52572],{"class":254,"line":1903},[252,52573,2539],{"emptyLinePlaceholder":181},[252,52575,52576,52578,52580],{"class":254,"line":1917},[252,52577,51925],{"class":262},[252,52579,50775],{"class":51440},[252,52581,51447],{"class":262},[19,52583,52584],{},[1601,52585],{"alt":169,"src":52586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52588,52589],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52591,52592],{},"let arr = [4, 2, 5, 1, 3]",[19,52594,52595],{},"\u002F\u002F 1.升序排列写法",[19,52597,52598],{},"arr.sort(function (a, b) {",[19,52600,52601],{},"return a - b",[19,52603,52604],{},"})",[19,52606,52607],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52609,52610],{},"\u002F\u002F 降序排列写法",[19,52612,52598],{},[19,52614,52615],{},"return b - a",[19,52617,52604],{},[19,52619,52620],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52622,52624],{"id":52623},"_29-函数","2.9 函数",[19,52626,52627],{},[1601,52628],{"alt":169,"src":52629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52631,52632],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52634,52635],{},"函数的声明用function",[19,52637,52638],{},"函数里边可以嵌套函数",[224,52640,52642],{"id":52641},"_291-函数传参","2.9.1 函数传参",[19,52644,52645],{},[1601,52646],{"alt":169,"src":52647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52649,52650],{},[1601,52651],{"alt":169,"src":52652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1270,52654,52655,52658,52661,52664,52667,52670],{},[210,52656,52657],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[210,52659,52660],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[210,52662,52663],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[210,52665,52666],{},"开发中尽量保持形参和实参个数一致",[210,52668,52669],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[210,52671,52672],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52674,52675],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[224,52677,52679],{"id":52678},"_292-函数的返回值","2.9.2 函数的返回值",[19,52681,52682],{},[1601,52683],{"alt":169,"src":52684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52686,52687],{},[1601,52688],{"alt":169,"src":52689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1270,52691,52692,52695,52698,52701,52704],{},[210,52693,52694],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[210,52696,52697],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[210,52699,52700],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[210,52702,52703],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[210,52705,52706],{},"断点调试:进入函数内部看执行过程F11",[224,52708,52710],{"id":52709},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[244,52712,52714],{"className":50773,"code":52713,"language":50775,"meta":169,"style":169},"    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",[22,52715,52716,52721,52726,52730,52735],{"__ignoreMap":169},[252,52717,52718],{"class":254,"line":255},[252,52719,52720],{"class":262},"    function fn(a, b) {\n",[252,52722,52723],{"class":254,"line":170},[252,52724,52725],{"class":262},"      console.log(a + b);\n",[252,52727,52728],{"class":254,"line":1318},[252,52729,2326],{"class":262},[252,52731,52732],{"class":254,"line":1333},[252,52733,52734],{"class":262},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[252,52736,52737],{"class":254,"line":1339},[252,52738,52739],{"class":262},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[224,52741,52743],{"id":52742},"_294-作用域","2.9.4 作用域",[1270,52745,52746,52752,52757,52760,52763],{},[210,52747,52748,52749],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[412,52750,52751],{},"作用域",[210,52753,52754],{},[412,52755,52756],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[210,52758,52759],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[210,52761,52762],{},"函数内部可以直接所使用全局变量",[210,52764,52765],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,52767,14773],{},[244,52769,52771],{"className":50773,"code":52770,"language":50775,"meta":169,"style":169},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[22,52772,52773,52778,52783,52787,52792,52797,52802],{"__ignoreMap":169},[252,52774,52775],{"class":254,"line":255},[252,52776,52777],{"class":262},"    function fun() {\n",[252,52779,52780],{"class":254,"line":170},[252,52781,52782],{"class":262},"      num = 10\n",[252,52784,52785],{"class":254,"line":1318},[252,52786,2326],{"class":262},[252,52788,52789],{"class":254,"line":1333},[252,52790,52791],{"class":262},"    fun()\n",[252,52793,52794],{"class":254,"line":1339},[252,52795,52796],{"class":262},"    console.log(num)\n",[252,52798,52799],{"class":254,"line":1353},[252,52800,52801],{"class":262},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[252,52803,52804],{"class":254,"line":1359},[252,52805,52806],{"class":262},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1270,52808,52809,52812],{},[210,52810,52811],{},"函数内部的形参可以看做是局部变量",[210,52813,52814],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,52816,52817,52818],{},"变量访问原则： ",[412,52819,52820],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[224,52822,52824],{"id":52823},"_295-匿名函数","2.9.5 匿名函数",[19,52826,52827],{},"函数可以分为具名函数和匿名函数",[19,52829,52830],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[207,52832,52833],{},[210,52834,52835],{},"函数表达式",[19,52837,52838],{},[1601,52839],{"alt":169,"src":52840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,52842,52843],{},"里边也可以写参数",[19,52845,52846],{},"具名函数调用位置可以随意调整；",[19,52848,52849],{},"匿名函数函数表达式形式只能在声明后才可以使用",[207,52851,52852],{"start":170},[210,52853,52854],{},"立即执行函数",[19,52856,52857],{},[1601,52858],{"alt":169,"src":52859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,52861,52862],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,52864,52865],{},"写法：两个小括号，然后在第一个小括号中写function",[19,52867,52868],{},"(function () {})();",[19,52870,52871],{},"不要落下最后的;",[19,52873,52874],{},"立即执行函数必须要加;",[19,52876,52877],{},"分号写前写后都没问题",[19,52879,52880],{},"写前：",[19,52882,52883],{},"(function() {})()",[19,52885,52886],{},";(function () {})();",[19,52888,52889],{},"写后:",[19,52891,52892],{},"(function() {})();",[19,52894,52868],{},[19,52896,52897],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,52899,52900],{},"还有一种写法：",[19,52902,52903],{},"(function(){}());",[19,52905,52906],{},"或者:",[19,52908,52909],{},"!function(){}();",[19,52911,52912],{},"立即执行函数有时候也是可以加名字的：",[19,52914,52915],{},"(function flexible(window,document) {}(window,document));",[19,52917,52918],{},"省一些调用方法",[224,52920,52922],{"id":52921},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,52924,52925],{},[1601,52926],{"alt":169,"src":52927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,52929,52930],{},"这样就不用非得给x,y初始化了",[19,52932,52933],{},[1601,52934],{"alt":169,"src":52935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,52937,52938],{},"代码执行时先看左边",[19,52940,52941],{},"例如：console.log(false && 3+5)",[19,52943,52944],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,52946,52947],{},"&&都是真时，就返回最后一个真值",[19,52949,52950],{},"console.log(11 && 22)",[19,52952,52953],{},"输出22",[19,52955,52956],{},"逻辑与：遇真则真",[19,52958,14773],{},[19,52960,52961],{},"let age=1",[19,52963,52964],{},"console.log(11 || age++)",[19,52966,52967],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,52969,52970],{},"console.log(11 || 22)",[19,52972,52973],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,52975,52976],{},"||如果都是假的话，就取最后一个假的值了",[224,52978,52980],{"id":52979},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,52982,52983],{},"显示转换：",[19,52985,52986,52989,52990],{},[412,52987,52988],{},"记忆","： ",[412,52991,52992],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,52994,52995],{},"空字符串为假，其他字符串全为真",[19,52997,52998],{},[1601,52999],{"alt":169,"src":53000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53002,53003],{},"隐式转换：",[19,53005,53006],{},[1601,53007],{"alt":169,"src":53008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53010,53011],{},"隐式转换:",[19,53013,53014],{},"null+3=3",[19,53016,53017],{},"undefined+3=NaN",[19,53019,53020],{},"null==undefined 输出true,他两个都当0看",[19,53022,53023],{},"null===undefined 输出false",[19,53025,53026],{},"undefined做任何操作都是NaN",[19,53028,53029],{},"NaN不等于NaN，NaN表示计算错误",[14,53031,53033],{"id":53032},"_210-对象","2.10 对象",[224,53035,53037],{"id":53036},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53039,53040],{},"对象也是一种数据类型，里边的数据是无序的",[19,53042,53043],{},"对象由属性和方法组成",[19,53045,53046],{},[1601,53047],{"alt":169,"src":53048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53050,53051],{},[1601,53052],{"alt":169,"src":53053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53055,53056],{},[1601,53057],{"alt":169,"src":53058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[224,53060,53062],{"id":53061},"_2102-对象属性","2.10.2 对象属性",[19,53064,53065],{},[1601,53066],{"alt":169,"src":53067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[207,53069,53070],{},[210,53071,53072],{},"查询对象",[19,53074,53075],{},"对象名.属性 goods.uname",[19,53077,53078],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53080,53081],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53083,53084],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53086,53087],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[207,53089,53090],{"start":170},[210,53091,53092],{},"重新赋值",[19,53094,53095],{},"对象名.属性=新值",[207,53097,53098],{"start":1318},[210,53099,53100],{},"增加新数据",[19,53102,53095],{},[207,53104,53105],{"start":1333},[210,53106,53107],{},"删除对象中的属性",[19,53109,53110],{},"delete 对象名.属性",[224,53112,53114],{"id":53113},"_2103-对象方法","2.10.3 对象方法",[19,53116,53117],{},[1601,53118],{"alt":169,"src":53119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53121,53122],{},"后边跟的是匿名函数",[19,53124,53125],{},"对象外面的叫函数；对象内部的叫方法",[19,53127,53128],{},[1601,53129],{"alt":169,"src":53130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[224,53132,53134],{"id":53133},"_2104-遍历对象","2.10.4 遍历对象",[19,53136,53137],{},"理解为加括号的python字典遍历",[19,53139,53140],{},[1601,53141],{"alt":169,"src":53142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53144,53145],{},"k是字符串类型",[19,53147,53148],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[244,53150,53152],{"className":50773,"code":53151,"language":50775,"meta":169,"style":169},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[22,53153,53154,53159,53164,53169,53174],{"__ignoreMap":169},[252,53155,53156],{"class":254,"line":255},[252,53157,53158],{"class":262},"   let arr = [1, 2, 3]\n",[252,53160,53161],{"class":254,"line":170},[252,53162,53163],{"class":262},"    for (let k in arr) {\n",[252,53165,53166],{"class":254,"line":1318},[252,53167,53168],{"class":262},"      console.log(k)\n",[252,53170,53171],{"class":254,"line":1333},[252,53172,53173],{"class":262},"      console.log(arr[k])\n",[252,53175,53176],{"class":254,"line":1339},[252,53177,2326],{"class":262},[19,53179,53180],{},[1601,53181],{"alt":169,"src":53182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53184,53185],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53187,53188],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53190,53191],{},"for in 得到的k是属性名",[51953,53193,53194],{},"\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",[19,53196,53197],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[224,53199,53201],{"id":53200},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53203,53204],{},"数组中放对象信息",[244,53206,53210],{"className":53207,"code":53208,"language":53209,"meta":169,"style":169},"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",[22,53211,53212,53220,53225,53230,53235,53240,53245,53250,53255,53260,53265,53270,53275,53279,53283],{"__ignoreMap":169},[252,53213,53214,53216,53218],{"class":254,"line":255},[252,53215,1173],{"class":262},[252,53217,51953],{"class":51440},[252,53219,51447],{"class":262},[252,53221,53222],{"class":254,"line":170},[252,53223,53224],{"class":262},"    let students = [\n",[252,53226,53227],{"class":254,"line":1318},[252,53228,53229],{"class":262},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[252,53231,53232],{"class":254,"line":1333},[252,53233,53234],{"class":262},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[252,53236,53237],{"class":254,"line":1339},[252,53238,53239],{"class":262},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[252,53241,53242],{"class":254,"line":1353},[252,53243,53244],{"class":262},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[252,53246,53247],{"class":254,"line":1359},[252,53248,53249],{"class":262},"    ]\n",[252,53251,53252],{"class":254,"line":1450},[252,53253,53254],{"class":262},"    for (let i = 0; i \u003C students.length; i++) {\n",[252,53256,53257],{"class":254,"line":1456},[252,53258,53259],{"class":262},"      for (let k in students[i]) {\n",[252,53261,53262],{"class":254,"line":1468},[252,53263,53264],{"class":262},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[252,53266,53267],{"class":254,"line":1751},[252,53268,53269],{"class":262},"        \u002F\u002F输出每个人的名字：\n",[252,53271,53272],{"class":254,"line":1756},[252,53273,53274],{"class":262},"        \u002F\u002Fconsole.log(students[i].name)\n",[252,53276,53277],{"class":254,"line":1762},[252,53278,52538],{"class":262},[252,53280,53281],{"class":254,"line":1767},[252,53282,2326],{"class":262},[252,53284,53285,53287,53289],{"class":254,"line":1781},[252,53286,52557],{"class":262},[252,53288,51953],{"class":51440},[252,53290,51447],{"class":262},[224,53292,53294],{"id":53293},"_2106-内置对象","2.10.6 内置对象",[19,53296,53297],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[207,53299,53300],{},[210,53301,53302],{},"数学对象Math",[19,53304,53305],{},[1601,53306],{"alt":169,"src":53307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53309,53310],{},[501,53311,53314],{"href":53312,"rel":53313},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24004],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53316,53317],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53319,53320],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53322,53323],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53325,53326],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53328,53329],{},"null属于对象数据类型",[207,53331,53332],{"start":170},[210,53333,53334],{},"生成任意范围随机数",[19,53336,53337],{},[1601,53338],{"alt":169,"src":53339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53341,53342],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53344,53345],{},"乘以几就取不到几",[19,53347,53348],{},"取数组中的随机元素：",[19,53350,53351],{},"let arr = ['red', 'green', 'blue']",[19,53353,53354],{},"let random = Math.floor(Math.random() * arr.length)",[19,53356,53357],{},"console.log(arr[random])",[19,53359,53360],{},"这个函数得到的是全闭区间",[19,53362,53363],{},"function getRandom(N, M) {",[19,53365,53366],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53368,1209],{},[19,53370,53371],{},"console.log(getRandom(4, 8))",[224,53373,53375],{"id":53374},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53377,53378],{},[1601,53379],{"alt":169,"src":53380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53382,53383],{},[1601,53384],{"alt":169,"src":53385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53387,53388],{},[1601,53389],{"alt":169,"src":53390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53392,53393],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53395,53396],{},[1601,53397],{"alt":169,"src":53398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53400,53401],{},[1601,53402],{"alt":169,"src":53403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53405,53406],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53408,53409],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53411,53412],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5266,53414,53415],{},"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":169,"searchDepth":170,"depth":170,"links":53417},[53418,53426,53427,53428,53429,53430,53437,53441,53447,53456],{"id":50608,"depth":170,"text":50609,"children":53419},[53420,53421,53422,53423,53424,53425],{"id":50612,"depth":1318,"text":50613},{"id":50629,"depth":1318,"text":50630},{"id":50669,"depth":1318,"text":50670},{"id":50681,"depth":1318,"text":50682},{"id":50690,"depth":1318,"text":50691},{"id":50738,"depth":1318,"text":50739},{"id":50748,"depth":170,"text":50749},{"id":50836,"depth":170,"text":50837},{"id":50859,"depth":170,"text":50860},{"id":50871,"depth":170,"text":50872},{"id":51058,"depth":170,"text":51059,"children":53431},[53432,53433,53434,53435,53436],{"id":51062,"depth":1318,"text":51063},{"id":51071,"depth":1318,"text":51072},{"id":51099,"depth":1318,"text":51100},{"id":51135,"depth":1318,"text":51136},{"id":51160,"depth":1318,"text":51161},{"id":51172,"depth":170,"text":51173,"children":53438},[53439,53440],{"id":51193,"depth":1318,"text":51194},{"id":51287,"depth":1318,"text":51288},{"id":51345,"depth":170,"text":51346,"children":53442},[53443,53444,53445,53446],{"id":51349,"depth":1318,"text":51350},{"id":51373,"depth":1318,"text":51374},{"id":51426,"depth":1318,"text":51427},{"id":52237,"depth":1318,"text":52238},{"id":52623,"depth":170,"text":52624,"children":53448},[53449,53450,53451,53452,53453,53454,53455],{"id":52641,"depth":1318,"text":52642},{"id":52678,"depth":1318,"text":52679},{"id":52709,"depth":1318,"text":52710},{"id":52742,"depth":1318,"text":52743},{"id":52823,"depth":1318,"text":52824},{"id":52921,"depth":1318,"text":52922},{"id":52979,"depth":1318,"text":52980},{"id":53032,"depth":170,"text":53033,"children":53457},[53458,53459,53460,53461,53462,53463,53464],{"id":53036,"depth":1318,"text":53037},{"id":53061,"depth":1318,"text":53062},{"id":53113,"depth":1318,"text":53114},{"id":53133,"depth":1318,"text":53134},{"id":53200,"depth":1318,"text":53201},{"id":53293,"depth":1318,"text":53294},{"id":53374,"depth":1318,"text":53375},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50600,"description":178},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53471,"title":53472,"body":53473,"description":178,"extension":179,"meta":76813,"navigation":181,"path":76814,"seo":76815,"stem":76816,"__hash__":76817},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53474,"toc":76753},[53475,53478,53481,53484,53489,53492,53495,53498,53502,53506,53512,53517,53525,53532,53535,53539,53544,53549,53554,53557,53560,53571,53574,53578,53581,53584,53589,53594,53599,53602,53605,53697,53700,53705,53708,53713,53716,53719,53724,53727,53732,53736,53739,53753,53757,53762,53765,53768,53772,53777,53780,53784,53788,53793,53797,53802,53805,53808,53811,53814,53817,53820,53825,53830,53858,53861,53864,53867,53872,53875,53878,53881,53884,53888,53917,53921,53926,53931,53934,53937,53940,53945,54060,54065,54070,54231,54236,54239,54243,54248,54253,54256,54259,54262,54265,54268,54271,54274,54277,54280,54283,54286,54289,54292,54295,54297,54300,54303,54306,54311,54315,54712,54715,54721,54725,54730,56012,56017,56020,56023,56026,56031,57227,57231,57237,57242,57245,57250,57255,57259,57263,57268,57271,57276,57279,57282,57286,58194,58197,58201,58422,58425,58428,58431,58657,58660,58884,58887,58891,58896,58899,58902,59130,59133,59166,59169,59173,59178,59182,59185,59188,59191,59194,59197,59200,59203,59208,60488,60492,60495,61588,61592,61595,61598,61601,61604,61608,61611,61614,61616,61624,63105,63109,63112,63115,63118,63327,63330,63334,63338,63343,63348,63351,63354,63359,63363,63368,63371,63480,63484,63489,63494,63497,63500,63504,63509,63514,63519,63522,63525,63536,63539,63544,63549,63552,63555,63628,63632,63637,63640,63642,63653,63657,63662,64988,64991,64994,64997,64999,65002,65005,65008,65011,65014,65017,65020,65023,65026,65029,65032,65035,65037,65039,65042,65046,66140,66143,66146,66162,66176,66179,66184,66190,66195,66199,66203,66208,66212,66217,66659,66664,66667,66671,66676,66679,66682,66686,66691,66695,66700,66705,66709,66714,66719,66722,66727,66732,66736,66741,66746,66850,66853,66857,66862,67228,67231,67234,67237,67240,67243,67246,67249,67252,68548,68552,68557,68562,68565,68568,68571,68574,68576,68581,68586,68589,68593,68598,68603,68608,68611,68614,68617,68620,68623,68628,68631,68635,68640,68645,68649,68654,68657,68662,68665,68668,68671,68674,68677,68682,68685,68688,68691,68694,68698,68703,68706,68710,68715,68718,68721,68725,68754,68757,68761,68765,68770,68774,68779,68782,68785,68788,68791,68794,68797,68800,68803,68806,68809,68812,68815,68818,68821,68825,68830,68835,68838,68842,68846,68851,68854,68858,68861,68864,68869,68874,68879,68884,68889,68892,68895,68900,68905,68909,68914,68917,68922,68925,68928,68931,68934,68939,68942,68951,68955,68960,68963,68966,68970,68973,68978,68982,68985,68991,68997,69001,69027,69030,70591,70594,71090,71093,71098,71103,71108,71112,71117,71122,71127,71131,71136,71139,71142,71145,71148,71152,71155,71160,71163,71168,71172,71177,71180,71185,71190,71195,71198,71201,71206,71211,71214,71217,71221,71224,71229,71232,71237,71240,71245,71250,71255,71258,71263,71328,71331,71342,71346,71351,71523,71527,71532,71535,71538,71541,71545,71556,71560,71563,71568,71573,71576,71579,71582,71585,71588,71590,71593,71596,71599,71604,71607,71612,71615,71619,71622,71625,71639,71643,71646,71701,71706,71709,71712,71717,71720,71724,71729,71859,71863,71868,71873,71954,71959,71963,71966,71971,71976,71982,71985,71988,71991,71995,72000,72003,72014,72018,72035,75082,75086,75089,75092,75095,75116,75120,75123,75131,75134,75139,75142,75145,75150,75155,75159,75180,75184,75189,75192,75195,75198,75201,75205,75210,75213,75217,75222,75225,75230,75233,75238,75241,75246,76449,76453,76458,76461,76466,76750],[10,53476,53472],{"id":53477},"_3web-apis",[19,53479,53480],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53482,53483],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53485,53486],{},[1601,53487],{"alt":169,"src":53488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53490,53491],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53493,53494],{},"建议数组和对象使用 const 来声明",[19,53496,53497],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53499,53501],{"id":53500},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[224,53503,53505],{"id":53504},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53507,53508,53511],{},[22,53509,53510],{},"document"," = HTML 文件解析后的对象化表示；",[19,53513,53514,53516],{},[22,53515,53510],{}," ≠ HTML 文件本身",[19,53518,53519,53524],{},[412,53520,53521],{},[22,53522,53523],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53526,53527,53531],{},[412,53528,53529],{},[22,53530,53510],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53533,53534],{},"document实际上为window.document的简写",[224,53536,53538],{"id":53537},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53540,53541],{},[1601,53542],{"alt":169,"src":53543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53545,53546],{},[1601,53547],{"alt":169,"src":53548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53550,53551],{},[1601,53552],{"alt":169,"src":53553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53555,53556],{},"console.dir()",[19,53558,53559],{},"dir用来打印对象",[1270,53561,53562,53565,53568],{},[210,53563,53564],{},"任何一个标签，都是一个对象",[210,53566,53567],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[210,53569,53570],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53572,53573],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[224,53575,53577],{"id":53576},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53579,53580],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53582,53583],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53585,53586],{},[412,53587,53588],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[207,53590,53591],{},[210,53592,53593],{},"利用CSS选择器来获取标签元素",[19,53595,53596],{},[1601,53597],{"alt":169,"src":53598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53600,53601],{},"里边的选择器必须必须加引号！！！",[19,53603,53604],{},"只选择第一个元素",[244,53606,53608],{"className":53207,"code":53607,"language":53209,"meta":169,"style":169},"\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",[22,53609,53610,53618,53639,53658,53666,53671,53676,53681,53689],{"__ignoreMap":169},[252,53611,53612,53614,53616],{"class":254,"line":255},[252,53613,1173],{"class":262},[252,53615,51940],{"class":51440},[252,53617,51447],{"class":262},[252,53619,53620,53622,53624,53627,53629,53632,53635,53637],{"class":254,"line":170},[252,53621,52284],{"class":262},[252,53623,51751],{"class":51440},[252,53625,53626],{"class":2102}," class",[252,53628,308],{"class":262},[252,53630,53631],{"class":367},"\"box\"",[252,53633,53634],{"class":262},">123\u003C\u002F",[252,53636,51751],{"class":51440},[252,53638,51447],{"class":262},[252,53640,53641,53643,53645,53647,53649,53651,53654,53656],{"class":254,"line":1318},[252,53642,52284],{"class":262},[252,53644,51751],{"class":51440},[252,53646,53626],{"class":2102},[252,53648,308],{"class":262},[252,53650,53631],{"class":367},[252,53652,53653],{"class":262},">456\u003C\u002F",[252,53655,51751],{"class":51440},[252,53657,51447],{"class":262},[252,53659,53660,53662,53664],{"class":254,"line":1333},[252,53661,52284],{"class":262},[252,53663,51953],{"class":51440},[252,53665,51447],{"class":262},[252,53667,53668],{"class":254,"line":1339},[252,53669,53670],{"class":262},"    \u002F\u002F 1.获取匹配的第一个元素\n",[252,53672,53673],{"class":254,"line":1353},[252,53674,53675],{"class":262},"    const box = document.querySelector('div')\n",[252,53677,53678],{"class":254,"line":1359},[252,53679,53680],{"class":262},"    console.dir(box)\n",[252,53682,53683,53685,53687],{"class":254,"line":1450},[252,53684,52557],{"class":262},[252,53686,51953],{"class":51440},[252,53688,51447],{"class":262},[252,53690,53691,53693,53695],{"class":254,"line":1456},[252,53692,51925],{"class":262},[252,53694,51940],{"class":51440},[252,53696,51447],{"class":262},[19,53698,53699],{},"只选123，不选456",[19,53701,53702],{},[1601,53703],{"alt":169,"src":53704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53706,53707],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53709,53710],{},[1601,53711],{"alt":169,"src":53712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53714,53715],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53717,53718],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[207,53720,53721],{"start":170},[210,53722,53723],{},"其他方法来获取标签元素",[19,53725,53726],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53728,53729],{},[1601,53730],{"alt":169,"src":53731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[224,53733,53735],{"id":53734},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53737,53738],{},"设置修改DOM元素内容有两种方式：",[1270,53740,53741,53744,53747,53750],{},[210,53742,53743],{},"元素.innerText=''",[210,53745,53746],{},"元素.innerHTML=''",[210,53748,53749],{},"不写字符串输出数字也是可以的",[210,53751,53752],{},"元素.innerHtml=1",[22137,53754,53756],{"id":53755},"_3131-innertext","3.1.3.1 innerText",[19,53758,53759],{},[1601,53760],{"alt":169,"src":53761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,53763,53764],{},"思路：实现了修改盒子中的内容！",[19,53766,53767],{},"它只显示纯文本，不解析标签",[22137,53769,53771],{"id":53770},"_3132-innerhtml","3.1.3.2 innerHTML",[19,53773,53774],{},[1601,53775],{"alt":169,"src":53776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,53778,53779],{},"相比于innerText，他的强大之处在于可以解析标签",[224,53781,53783],{"id":53782},"_314-操作元素属性","3.1.4 操作元素属性",[22137,53785,53787],{"id":53786},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,53789,53790],{},[1601,53791],{"alt":169,"src":53792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22137,53794,53796],{"id":53795},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,53798,53799],{},[1601,53800],{"alt":169,"src":53801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,53803,53804],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,53806,53807],{},"div.style.backgroundColor = 'hotpink'",[19,53809,53810],{},"如果按照css的写法，-表示减，就会出错",[19,53812,53813],{},"body元素不需要再获取，直接用就行！！！！！！",[19,53815,53816],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,53818,53819],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,53821,53822],{},[1601,53823],{"alt":169,"src":53824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,53826,53827],{},[1601,53828],{"alt":169,"src":53829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[207,53831,53832,53835,53838,53841,53844,53847],{},[210,53833,53834],{},"className这个方式就是修改很多样式的时候来使用的！",[210,53836,53837],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[210,53839,53840],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[210,53842,53843],{},"className为属性名，如果还用class的话就导致与关键字冲突",[210,53845,53846],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[210,53848,53849,53850,53855],{},"解析标签的时候就变为了",[51751,53851],{"className":53852},[53853,53854],"nav","box",[53856,53857],"br",{},[19,53859,53860],{},"例子：",[51751,53862],{"className":53863},[53853],[51953,53865,53866],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,53868,53869],{},[1601,53870],{"alt":169,"src":53871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,53873,53874],{},"追加和删除类名用classList",[19,53876,53877],{},"常用于类似于开关的操作",[19,53879,53880],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,53882,53883],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22137,53885,53887],{"id":53886},"_3143-牢记点","3.1.4.3 牢记点",[207,53889,53890,53893,53896,53899,53902,53905,53908,53911,53914],{},[210,53891,53892],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[210,53894,53895],{},"使用style属性操作css时不要忘记引号",[210,53897,53898],{},"使用className或者classList时也不要忘记引号",[210,53900,53901],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[210,53903,53904],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[210,53906,53907],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[210,53909,53910],{},"若： let arr=['1','2',3] arr[0]=1",[210,53912,53913],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[210,53915,53916],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[224,53918,53920],{"id":53919},"_315-操作表单元素","3.1.5 操作表单元素",[207,53922,53923],{},[210,53924,53925],{},"天生的属性",[19,53927,53928],{},[1601,53929],{"alt":169,"src":53930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,53932,53933],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,53935,53936],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,53938,53939],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,53941,53942],{},[1601,53943],{"alt":169,"src":53944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[244,53946,53948],{"className":50773,"code":53947,"language":50775,"meta":169,"style":169},"在复选框中如果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",[22,53949,53950,53955,53987,53992,53997,54002,54007,54011,54016,54021,54038,54050,54055],{"__ignoreMap":169},[252,53951,53952],{"class":254,"line":255},[252,53953,53954],{"class":262},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[252,53956,53957,53959,53962,53965,53967,53970,53972,53974,53976,53978,53980,53982,53985],{"class":254,"line":170},[252,53958,1173],{"class":262},[252,53960,53961],{"class":51440},"input",[252,53963,53964],{"class":2102}," type",[252,53966,308],{"class":262},[252,53968,53969],{"class":367},"\"checkbox\"",[252,53971,15060],{"class":2102},[252,53973,308],{"class":262},[252,53975,7792],{"class":367},[252,53977,15099],{"class":2102},[252,53979,308],{"class":262},[252,53981,7792],{"class":367},[252,53983,53984],{"class":2102}," checked",[252,53986,51447],{"class":262},[252,53988,53989],{"class":254,"line":1318},[252,53990,53991],{"class":262},"不选的话：\n",[252,53993,53994],{"class":254,"line":1333},[252,53995,53996],{"class":262},"const input = document.querySelector('input')\n",[252,53998,53999],{"class":254,"line":1339},[252,54000,54001],{"class":262},"input.checked=false\n",[252,54003,54004],{"class":254,"line":1353},[252,54005,54006],{"class":262},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[252,54008,54009],{"class":254,"line":1359},[252,54010,2539],{"emptyLinePlaceholder":181},[252,54012,54013],{"class":254,"line":1450},[252,54014,54015],{"class":262},"禁用按钮：\n",[252,54017,54018],{"class":254,"line":1456},[252,54019,54020],{"class":262},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[252,54022,54023,54025,54028,54031,54034,54036],{"class":254,"line":1468},[252,54024,1173],{"class":262},[252,54026,54027],{"class":51440},"button",[252,54029,54030],{"class":2102}," disabled",[252,54032,54033],{"class":262},">点击\u003C\u002F",[252,54035,54027],{"class":51440},[252,54037,51447],{"class":262},[252,54039,54040,54042,54044,54046,54048],{"class":254,"line":1751},[252,54041,1173],{"class":262},[252,54043,54027],{"class":51440},[252,54045,54033],{"class":262},[252,54047,54027],{"class":51440},[252,54049,51447],{"class":262},[252,54051,54052],{"class":254,"line":1756},[252,54053,54054],{"class":262},"const bt = document.querySelector('button')\n",[252,54056,54057],{"class":254,"line":1762},[252,54058,54059],{"class":262},"bt.disabled = false\n",[207,54061,54062],{"start":170},[210,54063,54064],{},"自定义属性",[19,54066,54067],{},[1601,54068],{"alt":169,"src":54069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[244,54071,54073],{"className":53207,"code":54072,"language":53209,"meta":169,"style":169},"\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",[22,54074,54075,54083,54111,54130,54149,54168,54187,54195,54200,54205,54210,54215,54223],{"__ignoreMap":169},[252,54076,54077,54079,54081],{"class":254,"line":255},[252,54078,1173],{"class":262},[252,54080,51940],{"class":51440},[252,54082,51447],{"class":262},[252,54084,54085,54087,54089,54092,54094,54096,54099,54101,54104,54107,54109],{"class":254,"line":170},[252,54086,52284],{"class":262},[252,54088,51751],{"class":51440},[252,54090,54091],{"class":2102}," data-id",[252,54093,308],{"class":262},[252,54095,3817],{"class":367},[252,54097,54098],{"class":2102}," data-spm",[252,54100,308],{"class":262},[252,54102,54103],{"class":367},"\"我不知道\"",[252,54105,54106],{"class":262},">1\u003C\u002F",[252,54108,51751],{"class":51440},[252,54110,51447],{"class":262},[252,54112,54113,54115,54117,54119,54121,54123,54126,54128],{"class":254,"line":1318},[252,54114,52284],{"class":262},[252,54116,51751],{"class":51440},[252,54118,54091],{"class":2102},[252,54120,308],{"class":262},[252,54122,3840],{"class":367},[252,54124,54125],{"class":262},">2\u003C\u002F",[252,54127,51751],{"class":51440},[252,54129,51447],{"class":262},[252,54131,54132,54134,54136,54138,54140,54142,54145,54147],{"class":254,"line":1333},[252,54133,52284],{"class":262},[252,54135,51751],{"class":51440},[252,54137,54091],{"class":2102},[252,54139,308],{"class":262},[252,54141,3853],{"class":367},[252,54143,54144],{"class":262},">3\u003C\u002F",[252,54146,51751],{"class":51440},[252,54148,51447],{"class":262},[252,54150,54151,54153,54155,54157,54159,54161,54164,54166],{"class":254,"line":1339},[252,54152,52284],{"class":262},[252,54154,51751],{"class":51440},[252,54156,54091],{"class":2102},[252,54158,308],{"class":262},[252,54160,3866],{"class":367},[252,54162,54163],{"class":262},">4\u003C\u002F",[252,54165,51751],{"class":51440},[252,54167,51447],{"class":262},[252,54169,54170,54172,54174,54176,54178,54180,54183,54185],{"class":254,"line":1353},[252,54171,52284],{"class":262},[252,54173,51751],{"class":51440},[252,54175,54091],{"class":2102},[252,54177,308],{"class":262},[252,54179,3887],{"class":367},[252,54181,54182],{"class":262},">5\u003C\u002F",[252,54184,51751],{"class":51440},[252,54186,51447],{"class":262},[252,54188,54189,54191,54193],{"class":254,"line":1359},[252,54190,52284],{"class":262},[252,54192,51953],{"class":51440},[252,54194,51447],{"class":262},[252,54196,54197],{"class":254,"line":1450},[252,54198,54199],{"class":262},"    const one = document.querySelector('div')\n",[252,54201,54202],{"class":254,"line":1456},[252,54203,54204],{"class":262},"    console.log(one.dataset)\n",[252,54206,54207],{"class":254,"line":1468},[252,54208,54209],{"class":262},"    console.log(one.dataset.id)\n",[252,54211,54212],{"class":254,"line":1751},[252,54213,54214],{"class":262},"    console.log(one.dataset.spm)\n",[252,54216,54217,54219,54221],{"class":254,"line":1756},[252,54218,52557],{"class":262},[252,54220,51953],{"class":51440},[252,54222,51447],{"class":262},[252,54224,54225,54227,54229],{"class":254,"line":1762},[252,54226,51925],{"class":262},[252,54228,51940],{"class":51440},[252,54230,51447],{"class":262},[19,54232,54233],{},[1601,54234],{"alt":169,"src":54235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54237,54238],{},"document.querySelector选择的是第一个对象（元素）",[224,54240,54242],{"id":54241},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54244,54245],{},[1601,54246],{"alt":169,"src":54247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54249,54250],{},[1601,54251],{"alt":169,"src":54252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54254,54255],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51953,54257,54258],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54260,54261],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51953,54263,54264],{},"\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",[19,54266,54267],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54269,54270],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54272,54273],{},"单位为毫秒！！！",[19,54275,54276],{},"可以搭配匿名函数来用！！！",[19,54278,54279],{},"setInterval(function () {",[19,54281,54282],{},"alert('两秒执行一次')",[19,54284,54285],{},"}, 2000)",[19,54287,54288],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54290,54291],{},"function fn() {",[19,54293,54294],{},"document.write(1)",[19,54296,1209],{},[19,54298,54299],{},"setInterval(fn, 1000)",[19,54301,54302],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54304,54305],{},"setInterval('fn()', 1000)",[19,54307,54308],{},[1601,54309],{"alt":169,"src":54310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22137,54312,54314],{"id":54313},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[244,54316,54318],{"className":50773,"code":54317,"language":50775,"meta":169,"style":169},"\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",[22,54319,54320,54330,54344,54348,54356,54370,54390,54402,54410,54414,54422,54459,54464,54469,54474,54482,54490,54512,54520,54525,54547,54552,54557,54568,54573,54593,54601,54616,54631,54642,54647,54657,54667,54671,54680,54684,54692,54700,54704],{"__ignoreMap":169},[252,54321,54322,54324,54326,54328],{"class":254,"line":255},[252,54323,51437],{"class":262},[252,54325,51441],{"class":51440},[252,54327,51444],{"class":2102},[252,54329,51447],{"class":262},[252,54331,54332,54334,54336,54338,54340,54342],{"class":254,"line":170},[252,54333,1173],{"class":262},[252,54335,50775],{"class":51440},[252,54337,51456],{"class":2102},[252,54339,308],{"class":262},[252,54341,51461],{"class":367},[252,54343,51447],{"class":262},[252,54345,54346],{"class":254,"line":1318},[252,54347,2539],{"emptyLinePlaceholder":181},[252,54349,54350,54352,54354],{"class":254,"line":1333},[252,54351,1173],{"class":262},[252,54353,51474],{"class":51440},[252,54355,51447],{"class":262},[252,54357,54358,54360,54362,54364,54366,54368],{"class":254,"line":1339},[252,54359,52284],{"class":262},[252,54361,51484],{"class":51440},[252,54363,51487],{"class":2102},[252,54365,308],{"class":262},[252,54367,51492],{"class":367},[252,54369,51447],{"class":262},[252,54371,54372,54374,54376,54378,54380,54382,54384,54386,54388],{"class":254,"line":1353},[252,54373,52284],{"class":262},[252,54375,51484],{"class":51440},[252,54377,15060],{"class":2102},[252,54379,308],{"class":262},[252,54381,51531],{"class":367},[252,54383,51511],{"class":2102},[252,54385,308],{"class":262},[252,54387,51538],{"class":367},[252,54389,51447],{"class":262},[252,54391,54392,54394,54396,54398,54400],{"class":254,"line":1359},[252,54393,52284],{"class":262},[252,54395,51547],{"class":51440},[252,54397,51550],{"class":262},[252,54399,51547],{"class":51440},[252,54401,51447],{"class":262},[252,54403,54404,54406,54408],{"class":254,"line":1450},[252,54405,51925],{"class":262},[252,54407,51474],{"class":51440},[252,54409,51447],{"class":262},[252,54411,54412],{"class":254,"line":1456},[252,54413,2539],{"emptyLinePlaceholder":181},[252,54415,54416,54418,54420],{"class":254,"line":1468},[252,54417,1173],{"class":262},[252,54419,51940],{"class":51440},[252,54421,51447],{"class":262},[252,54423,54424,54426,54429,54431,54433,54435,54437,54439,54441,54444,54446,54449,54452,54454,54457],{"class":254,"line":1751},[252,54425,52284],{"class":262},[252,54427,54428],{"class":51440},"textarea",[252,54430,15060],{"class":2102},[252,54432,308],{"class":262},[252,54434,7792],{"class":367},[252,54436,15099],{"class":2102},[252,54438,308],{"class":262},[252,54440,7792],{"class":367},[252,54442,54443],{"class":2102}," cols",[252,54445,308],{"class":262},[252,54447,54448],{"class":367},"\"30\"",[252,54450,54451],{"class":2102}," rows",[252,54453,308],{"class":262},[252,54455,54456],{"class":367},"\"10\"",[252,54458,51447],{"class":262},[252,54460,54461],{"class":254,"line":1756},[252,54462,54463],{"class":262},"        用户注册协议\n",[252,54465,54466],{"class":254,"line":1762},[252,54467,54468],{"class":262},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[252,54470,54471],{"class":254,"line":1767},[252,54472,54473],{"class":262},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[252,54475,54476,54478,54480],{"class":254,"line":1781},[252,54477,51916],{"class":262},[252,54479,54428],{"class":51440},[252,54481,51447],{"class":262},[252,54483,54484,54486,54488],{"class":254,"line":1786},[252,54485,52284],{"class":262},[252,54487,53856],{"class":51440},[252,54489,51447],{"class":262},[252,54491,54492,54494,54496,54498,54500,54503,54505,54508,54510],{"class":254,"line":1792},[252,54493,52284],{"class":262},[252,54495,54027],{"class":51440},[252,54497,53626],{"class":2102},[252,54499,308],{"class":262},[252,54501,54502],{"class":367},"\"btn\"",[252,54504,54030],{"class":2102},[252,54506,54507],{"class":262},">我已经阅读用户协议(5)\u003C\u002F",[252,54509,54027],{"class":51440},[252,54511,51447],{"class":262},[252,54513,54514,54516,54518],{"class":254,"line":1813},[252,54515,52284],{"class":262},[252,54517,51953],{"class":51440},[252,54519,51447],{"class":262},[252,54521,54522],{"class":254,"line":1818},[252,54523,54524],{"class":321},"    \u002F\u002F 1. 获取元素\n",[252,54526,54527,54529,54532,54534,54537,54540,54542,54545],{"class":254,"line":1832},[252,54528,11361],{"class":258},[252,54530,54531],{"class":311}," btn",[252,54533,13704],{"class":258},[252,54535,54536],{"class":262}," document.",[252,54538,54539],{"class":2102},"querySelector",[252,54541,263],{"class":262},[252,54543,54544],{"class":367},"'.btn'",[252,54546,269],{"class":262},[252,54548,54549],{"class":254,"line":1837},[252,54550,54551],{"class":321},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[252,54553,54554],{"class":254,"line":1866},[252,54555,54556],{"class":321},"    \u002F\u002F 2. 倒计时\n",[252,54558,54559,54561,54563,54565],{"class":254,"line":1871},[252,54560,52359],{"class":258},[252,54562,9578],{"class":262},[252,54564,308],{"class":258},[252,54566,54567],{"class":311}," 5\n",[252,54569,54570],{"class":254,"line":1888},[252,54571,54572],{"class":321},"    \u002F\u002F 2.1 开启定时器\n",[252,54574,54575,54577,54580,54582,54585,54587,54590],{"class":254,"line":1893},[252,54576,52359],{"class":258},[252,54578,54579],{"class":262}," n ",[252,54581,308],{"class":258},[252,54583,54584],{"class":2102}," setInterval",[252,54586,263],{"class":262},[252,54588,54589],{"class":258},"function",[252,54591,54592],{"class":262}," () {\n",[252,54594,54595,54598],{"class":254,"line":1898},[252,54596,54597],{"class":262},"      i",[252,54599,54600],{"class":258},"--\n",[252,54602,54603,54606,54608,54611,54613],{"class":254,"line":1903},[252,54604,54605],{"class":262},"      btn.innerHTML ",[252,54607,308],{"class":258},[252,54609,54610],{"class":367}," `我已经阅读用户协议(${",[252,54612,704],{"class":262},[252,54614,54615],{"class":367},"})`\n",[252,54617,54618,54621,54624,54627,54629],{"class":254,"line":1917},[252,54619,54620],{"class":258},"      if",[252,54622,54623],{"class":262}," (i ",[252,54625,54626],{"class":258},"===",[252,54628,4232],{"class":311},[252,54630,12582],{"class":262},[252,54632,54633,54636,54639],{"class":254,"line":1922},[252,54634,54635],{"class":2102},"        clearInterval",[252,54637,54638],{"class":262},"(n)  ",[252,54640,54641],{"class":321},"\u002F\u002F 关闭定时器\n",[252,54643,54644],{"class":254,"line":2716},[252,54645,54646],{"class":321},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[252,54648,54649,54652,54654],{"class":254,"line":2730},[252,54650,54651],{"class":262},"        btn.disabled ",[252,54653,308],{"class":258},[252,54655,54656],{"class":311}," false\n",[252,54658,54659,54662,54664],{"class":254,"line":2738},[252,54660,54661],{"class":262},"        btn.innerHTML ",[252,54663,308],{"class":258},[252,54665,54666],{"class":367}," '同意'\n",[252,54668,54669],{"class":254,"line":2743},[252,54670,52538],{"class":262},[252,54672,54673,54676,54678],{"class":254,"line":2749},[252,54674,54675],{"class":262},"    }, ",[252,54677,6550],{"class":311},[252,54679,269],{"class":262},[252,54681,54682],{"class":254,"line":2755},[252,54683,2539],{"emptyLinePlaceholder":181},[252,54685,54686,54688,54690],{"class":254,"line":2760},[252,54687,52557],{"class":262},[252,54689,51953],{"class":51440},[252,54691,51447],{"class":262},[252,54693,54694,54696,54698],{"class":254,"line":8088},[252,54695,51925],{"class":262},[252,54697,51940],{"class":51440},[252,54699,51447],{"class":262},[252,54701,54702],{"class":254,"line":8112},[252,54703,2539],{"emptyLinePlaceholder":181},[252,54705,54706,54708,54710],{"class":254,"line":8117},[252,54707,51925],{"class":262},[252,54709,50775],{"class":51440},[252,54711,51447],{"class":262},[19,54713,54714],{},"不要一直想着用死循环,避免死循环",[19,54716,54717,54720],{},[22,54718,54719],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22137,54722,54724],{"id":54723},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[207,54726,54727],{},[210,54728,54729],{},"法1",[244,54731,54733],{"className":50773,"code":54732,"language":50775,"meta":169,"style":169},"\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",[22,54734,54735,54745,54759,54763,54771,54785,54805,54817,54825,54831,54842,54853,54857,54861,54868,54880,54884,54888,54895,54907,54921,54934,54948,54952,54956,54963,54974,54985,54996,55008,55020,55032,55036,55040,55048,55058,55071,55083,55096,55100,55104,55111,55121,55133,55145,55156,55167,55177,55189,55201,55205,55209,55218,55230,55242,55270,55283,55287,55291,55298,55309,55313,55321,55329,55333,55341,55355,55370,55394,55402,55417,55430,55438,55459,55471,55483,55495,55507,55519,55531,55543,55552,55560,55568,55576,55588,55611,55630,55649,55668,55687,55706,55725,55745,55749,55769,55788,55808,55829,55840,55857,55867,55877,55887,55892,55897,55902,55907,55932,55945,55949,55972,55976,55984,55992,56000,56004],{"__ignoreMap":169},[252,54736,54737,54739,54741,54743],{"class":254,"line":255},[252,54738,51437],{"class":262},[252,54740,51441],{"class":51440},[252,54742,51444],{"class":2102},[252,54744,51447],{"class":262},[252,54746,54747,54749,54751,54753,54755,54757],{"class":254,"line":170},[252,54748,1173],{"class":262},[252,54750,50775],{"class":51440},[252,54752,51456],{"class":2102},[252,54754,308],{"class":262},[252,54756,51461],{"class":367},[252,54758,51447],{"class":262},[252,54760,54761],{"class":254,"line":1318},[252,54762,2539],{"emptyLinePlaceholder":181},[252,54764,54765,54767,54769],{"class":254,"line":1333},[252,54766,1173],{"class":262},[252,54768,51474],{"class":51440},[252,54770,51447],{"class":262},[252,54772,54773,54775,54777,54779,54781,54783],{"class":254,"line":1339},[252,54774,52284],{"class":262},[252,54776,51484],{"class":51440},[252,54778,51487],{"class":2102},[252,54780,308],{"class":262},[252,54782,51492],{"class":367},[252,54784,51447],{"class":262},[252,54786,54787,54789,54791,54793,54795,54797,54799,54801,54803],{"class":254,"line":1353},[252,54788,52284],{"class":262},[252,54790,51484],{"class":51440},[252,54792,15060],{"class":2102},[252,54794,308],{"class":262},[252,54796,51531],{"class":367},[252,54798,51511],{"class":2102},[252,54800,308],{"class":262},[252,54802,51538],{"class":367},[252,54804,51447],{"class":262},[252,54806,54807,54809,54811,54813,54815],{"class":254,"line":1359},[252,54808,52284],{"class":262},[252,54810,51547],{"class":51440},[252,54812,51550],{"class":262},[252,54814,51547],{"class":51440},[252,54816,51447],{"class":262},[252,54818,54819,54821,54823],{"class":254,"line":1450},[252,54820,52284],{"class":262},[252,54822,5266],{"class":51440},[252,54824,51447],{"class":262},[252,54826,54827,54829],{"class":254,"line":1456},[252,54828,6543],{"class":51440},[252,54830,15712],{"class":262},[252,54832,54833,54836,54838,54840],{"class":254,"line":1468},[252,54834,54835],{"class":311},"      padding",[252,54837,51577],{"class":262},[252,54839,454],{"class":311},[252,54841,1429],{"class":262},[252,54843,54844,54847,54849,54851],{"class":254,"line":1751},[252,54845,54846],{"class":311},"      margin",[252,54848,51577],{"class":262},[252,54850,454],{"class":311},[252,54852,1429],{"class":262},[252,54854,54855],{"class":254,"line":1756},[252,54856,2326],{"class":262},[252,54858,54859],{"class":254,"line":1762},[252,54860,2539],{"emptyLinePlaceholder":181},[252,54862,54863,54866],{"class":254,"line":1767},[252,54864,54865],{"class":51440},"    li",[252,54867,15712],{"class":262},[252,54869,54870,54873,54875,54878],{"class":254,"line":1781},[252,54871,54872],{"class":311},"      list-style",[252,54874,51577],{"class":262},[252,54876,54877],{"class":311},"none",[252,54879,1429],{"class":262},[252,54881,54882],{"class":254,"line":1786},[252,54883,2326],{"class":262},[252,54885,54886],{"class":254,"line":1792},[252,54887,2539],{"emptyLinePlaceholder":181},[252,54889,54890,54893],{"class":254,"line":1813},[252,54891,54892],{"class":2102},"    .box",[252,54894,15712],{"class":262},[252,54896,54897,54900,54902,54905],{"class":254,"line":1818},[252,54898,54899],{"class":311},"      position",[252,54901,51577],{"class":262},[252,54903,54904],{"class":311},"relative",[252,54906,1429],{"class":262},[252,54908,54909,54912,54914,54917,54919],{"class":254,"line":1832},[252,54910,54911],{"class":311},"      width",[252,54913,51577],{"class":262},[252,54915,54916],{"class":311},"976",[252,54918,51632],{"class":258},[252,54920,1429],{"class":262},[252,54922,54923,54926,54928,54930,54932],{"class":254,"line":1837},[252,54924,54925],{"class":311},"      height",[252,54927,51577],{"class":262},[252,54929,1678],{"class":311},[252,54931,51632],{"class":258},[252,54933,1429],{"class":262},[252,54935,54936,54938,54940,54942,54944,54946],{"class":254,"line":1866},[252,54937,54846],{"class":311},[252,54939,51577],{"class":262},[252,54941,574],{"class":311},[252,54943,51632],{"class":258},[252,54945,51696],{"class":311},[252,54947,1429],{"class":262},[252,54949,54950],{"class":254,"line":1871},[252,54951,2326],{"class":262},[252,54953,54954],{"class":254,"line":1888},[252,54955,2539],{"emptyLinePlaceholder":181},[252,54957,54958,54961],{"class":254,"line":1893},[252,54959,54960],{"class":2102},"    .slider-footer",[252,54962,15712],{"class":262},[252,54964,54965,54967,54969,54972],{"class":254,"line":1898},[252,54966,54899],{"class":311},[252,54968,51577],{"class":262},[252,54970,54971],{"class":311},"absolute",[252,54973,1429],{"class":262},[252,54975,54976,54979,54981,54983],{"class":254,"line":1903},[252,54977,54978],{"class":311},"      left",[252,54980,51577],{"class":262},[252,54982,454],{"class":311},[252,54984,1429],{"class":262},[252,54986,54987,54990,54992,54994],{"class":254,"line":1917},[252,54988,54989],{"class":311},"      bottom",[252,54991,51577],{"class":262},[252,54993,454],{"class":311},[252,54995,1429],{"class":262},[252,54997,54998,55000,55002,55004,55006],{"class":254,"line":1922},[252,54999,54911],{"class":311},[252,55001,51577],{"class":262},[252,55003,574],{"class":311},[252,55005,591],{"class":258},[252,55007,1429],{"class":262},[252,55009,55010,55012,55014,55016,55018],{"class":254,"line":2716},[252,55011,54925],{"class":311},[252,55013,51577],{"class":262},[252,55015,838],{"class":311},[252,55017,591],{"class":258},[252,55019,1429],{"class":262},[252,55021,55022,55025,55027,55030],{"class":254,"line":2730},[252,55023,55024],{"class":311},"      background-color",[252,55026,51577],{"class":262},[252,55028,55029],{"class":311},"skyblue",[252,55031,1429],{"class":262},[252,55033,55034],{"class":254,"line":2738},[252,55035,2326],{"class":262},[252,55037,55038],{"class":254,"line":2743},[252,55039,2539],{"emptyLinePlaceholder":181},[252,55041,55042,55044,55046],{"class":254,"line":2749},[252,55043,54960],{"class":2102},[252,55045,6965],{"class":51440},[252,55047,15712],{"class":262},[252,55049,55050,55052,55054,55056],{"class":254,"line":2755},[252,55051,54899],{"class":311},[252,55053,51577],{"class":262},[252,55055,54971],{"class":311},[252,55057,1429],{"class":262},[252,55059,55060,55063,55065,55067,55069],{"class":254,"line":2760},[252,55061,55062],{"class":311},"      font-size",[252,55064,51577],{"class":262},[252,55066,1164],{"class":311},[252,55068,51632],{"class":258},[252,55070,1429],{"class":262},[252,55072,55073,55075,55077,55079,55081],{"class":254,"line":8088},[252,55074,54978],{"class":311},[252,55076,51577],{"class":262},[252,55078,963],{"class":311},[252,55080,51632],{"class":258},[252,55082,1429],{"class":262},[252,55084,55085,55088,55090,55092,55094],{"class":254,"line":8112},[252,55086,55087],{"class":311},"      top",[252,55089,51577],{"class":262},[252,55091,582],{"class":311},[252,55093,51632],{"class":258},[252,55095,1429],{"class":262},[252,55097,55098],{"class":254,"line":8117},[252,55099,2326],{"class":262},[252,55101,55102],{"class":254,"line":8123},[252,55103,2539],{"emptyLinePlaceholder":181},[252,55105,55106,55109],{"class":254,"line":8150},[252,55107,55108],{"class":51440},"    ul",[252,55110,15712],{"class":262},[252,55112,55113,55115,55117,55119],{"class":254,"line":8155},[252,55114,54899],{"class":311},[252,55116,51577],{"class":262},[252,55118,54971],{"class":311},[252,55120,1429],{"class":262},[252,55122,55123,55125,55127,55129,55131],{"class":254,"line":8161},[252,55124,55087],{"class":311},[252,55126,51577],{"class":262},[252,55128,1044],{"class":311},[252,55130,51632],{"class":258},[252,55132,1429],{"class":262},[252,55134,55135,55137,55139,55141,55143],{"class":254,"line":8173},[252,55136,54978],{"class":311},[252,55138,51577],{"class":262},[252,55140,963],{"class":311},[252,55142,51632],{"class":258},[252,55144,1429],{"class":262},[252,55146,55147,55150,55152,55154],{"class":254,"line":8185},[252,55148,55149],{"class":311},"      display",[252,55151,51577],{"class":262},[252,55153,51617],{"class":311},[252,55155,1429],{"class":262},[252,55157,55158,55161,55163,55165],{"class":254,"line":8197},[252,55159,55160],{"class":311},"      justify-content",[252,55162,51577],{"class":262},[252,55164,51808],{"class":311},[252,55166,1429],{"class":262},[252,55168,55169,55171,55173,55175],{"class":254,"line":9856},[252,55170,54899],{"class":311},[252,55172,51577],{"class":262},[252,55174,54971],{"class":311},[252,55176,1429],{"class":262},[252,55178,55179,55181,55183,55185,55187],{"class":254,"line":9881},[252,55180,54911],{"class":311},[252,55182,51577],{"class":262},[252,55184,4131],{"class":311},[252,55186,51632],{"class":258},[252,55188,1429],{"class":262},[252,55190,55191,55193,55195,55197,55199],{"class":254,"line":9904},[252,55192,54925],{"class":311},[252,55194,51577],{"class":262},[252,55196,963],{"class":311},[252,55198,51632],{"class":258},[252,55200,1429],{"class":262},[252,55202,55203],{"class":254,"line":9928},[252,55204,2326],{"class":262},[252,55206,55207],{"class":254,"line":9933},[252,55208,2539],{"emptyLinePlaceholder":181},[252,55210,55211,55213,55216],{"class":254,"line":9938},[252,55212,55108],{"class":51440},[252,55214,55215],{"class":51440}," li",[252,55217,15712],{"class":262},[252,55219,55220,55222,55224,55226,55228],{"class":254,"line":9943},[252,55221,54911],{"class":311},[252,55223,51577],{"class":262},[252,55225,963],{"class":311},[252,55227,51632],{"class":258},[252,55229,1429],{"class":262},[252,55231,55232,55234,55236,55238,55240],{"class":254,"line":9952},[252,55233,54925],{"class":311},[252,55235,51577],{"class":262},[252,55237,963],{"class":311},[252,55239,51632],{"class":258},[252,55241,1429],{"class":262},[252,55243,55244,55246,55248,55251,55253,55255,55257,55259,55261,55263,55265,55268],{"class":254,"line":9957},[252,55245,55024],{"class":311},[252,55247,51577],{"class":262},[252,55249,55250],{"class":311},"rgba",[252,55252,263],{"class":262},[252,55254,454],{"class":311},[252,55256,12575],{"class":262},[252,55258,454],{"class":311},[252,55260,12575],{"class":262},[252,55262,454],{"class":311},[252,55264,12575],{"class":262},[252,55266,55267],{"class":311},".4",[252,55269,2858],{"class":262},[252,55271,55272,55275,55277,55279,55281],{"class":254,"line":9963},[252,55273,55274],{"class":311},"      border-radius",[252,55276,51577],{"class":262},[252,55278,709],{"class":311},[252,55280,51632],{"class":258},[252,55282,1429],{"class":262},[252,55284,55285],{"class":254,"line":9984},[252,55286,2326],{"class":262},[252,55288,55289],{"class":254,"line":9990},[252,55290,2539],{"emptyLinePlaceholder":181},[252,55292,55293,55296],{"class":254,"line":10004},[252,55294,55295],{"class":2102},"    .activate",[252,55297,15712],{"class":262},[252,55299,55300,55302,55304,55307],{"class":254,"line":10010},[252,55301,55024],{"class":311},[252,55303,51577],{"class":262},[252,55305,55306],{"class":311},"#f7f7f7",[252,55308,1429],{"class":262},[252,55310,55311],{"class":254,"line":10037},[252,55312,2326],{"class":262},[252,55314,55315,55317,55319],{"class":254,"line":10046},[252,55316,52557],{"class":262},[252,55318,5266],{"class":51440},[252,55320,51447],{"class":262},[252,55322,55323,55325,55327],{"class":254,"line":10052},[252,55324,51925],{"class":262},[252,55326,51474],{"class":51440},[252,55328,51447],{"class":262},[252,55330,55331],{"class":254,"line":10060},[252,55332,2539],{"emptyLinePlaceholder":181},[252,55334,55335,55337,55339],{"class":254,"line":10065},[252,55336,1173],{"class":262},[252,55338,51940],{"class":51440},[252,55340,51447],{"class":262},[252,55342,55343,55345,55347,55349,55351,55353],{"class":254,"line":16744},[252,55344,52284],{"class":262},[252,55346,51751],{"class":51440},[252,55348,53626],{"class":2102},[252,55350,308],{"class":262},[252,55352,53631],{"class":367},[252,55354,51447],{"class":262},[252,55356,55357,55359,55361,55363,55365,55368],{"class":254,"line":16750},[252,55358,51481],{"class":262},[252,55360,51751],{"class":51440},[252,55362,53626],{"class":2102},[252,55364,308],{"class":262},[252,55366,55367],{"class":367},"\"slider-wrapper\"",[252,55369,51447],{"class":262},[252,55371,55372,55375,55377,55380,55382,55385,55388,55390,55392],{"class":254,"line":16773},[252,55373,55374],{"class":262},"      \u003C",[252,55376,1601],{"class":51440},[252,55378,55379],{"class":2102}," src",[252,55381,308],{"class":262},[252,55383,55384],{"class":367},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[252,55386,55387],{"class":2102}," alt",[252,55389,308],{"class":262},[252,55391,7792],{"class":367},[252,55393,51447],{"class":262},[252,55395,55396,55398,55400],{"class":254,"line":16779},[252,55397,51916],{"class":262},[252,55399,51751],{"class":51440},[252,55401,51447],{"class":262},[252,55403,55404,55406,55408,55410,55412,55415],{"class":254,"line":16802},[252,55405,51481],{"class":262},[252,55407,51751],{"class":51440},[252,55409,53626],{"class":2102},[252,55411,308],{"class":262},[252,55413,55414],{"class":367},"\"slider-footer\"",[252,55416,51447],{"class":262},[252,55418,55419,55421,55423,55426,55428],{"class":254,"line":16816},[252,55420,55374],{"class":262},[252,55422,19],{"class":51440},[252,55424,55425],{"class":262},">对人类来说会不会太超前了?\u003C\u002F",[252,55427,19],{"class":51440},[252,55429,51447],{"class":262},[252,55431,55432,55434,55436],{"class":254,"line":16836},[252,55433,55374],{"class":262},[252,55435,1270],{"class":51440},[252,55437,51447],{"class":262},[252,55439,55440,55443,55445,55447,55449,55452,55455,55457],{"class":254,"line":16842},[252,55441,55442],{"class":262},"        \u003C",[252,55444,210],{"class":51440},[252,55446,53626],{"class":2102},[252,55448,308],{"class":262},[252,55450,55451],{"class":367},"\"activate\"",[252,55453,55454],{"class":262},">\u003C\u002F",[252,55456,210],{"class":51440},[252,55458,51447],{"class":262},[252,55460,55461,55463,55465,55467,55469],{"class":254,"line":16853},[252,55462,55442],{"class":262},[252,55464,210],{"class":51440},[252,55466,55454],{"class":262},[252,55468,210],{"class":51440},[252,55470,51447],{"class":262},[252,55472,55473,55475,55477,55479,55481],{"class":254,"line":16876},[252,55474,55442],{"class":262},[252,55476,210],{"class":51440},[252,55478,55454],{"class":262},[252,55480,210],{"class":51440},[252,55482,51447],{"class":262},[252,55484,55485,55487,55489,55491,55493],{"class":254,"line":16898},[252,55486,55442],{"class":262},[252,55488,210],{"class":51440},[252,55490,55454],{"class":262},[252,55492,210],{"class":51440},[252,55494,51447],{"class":262},[252,55496,55497,55499,55501,55503,55505],{"class":254,"line":16903},[252,55498,55442],{"class":262},[252,55500,210],{"class":51440},[252,55502,55454],{"class":262},[252,55504,210],{"class":51440},[252,55506,51447],{"class":262},[252,55508,55509,55511,55513,55515,55517],{"class":254,"line":16909},[252,55510,55442],{"class":262},[252,55512,210],{"class":51440},[252,55514,55454],{"class":262},[252,55516,210],{"class":51440},[252,55518,51447],{"class":262},[252,55520,55521,55523,55525,55527,55529],{"class":254,"line":16923},[252,55522,55442],{"class":262},[252,55524,210],{"class":51440},[252,55526,55454],{"class":262},[252,55528,210],{"class":51440},[252,55530,51447],{"class":262},[252,55532,55533,55535,55537,55539,55541],{"class":254,"line":16936},[252,55534,55442],{"class":262},[252,55536,210],{"class":51440},[252,55538,55454],{"class":262},[252,55540,210],{"class":51440},[252,55542,51447],{"class":262},[252,55544,55545,55548,55550],{"class":254,"line":16941},[252,55546,55547],{"class":262},"      \u003C\u002F",[252,55549,1270],{"class":51440},[252,55551,51447],{"class":262},[252,55553,55554,55556,55558],{"class":254,"line":16955},[252,55555,51916],{"class":262},[252,55557,51751],{"class":51440},[252,55559,51447],{"class":262},[252,55561,55562,55564,55566],{"class":254,"line":16960},[252,55563,52557],{"class":262},[252,55565,51751],{"class":51440},[252,55567,51447],{"class":262},[252,55569,55570,55572,55574],{"class":254,"line":16966},[252,55571,52284],{"class":262},[252,55573,51953],{"class":51440},[252,55575,51447],{"class":262},[252,55577,55578,55580,55583,55585],{"class":254,"line":16971},[252,55579,11361],{"class":258},[252,55581,55582],{"class":311}," arrImage",[252,55584,13704],{"class":258},[252,55586,55587],{"class":262}," [\n",[252,55589,55590,55593,55596,55599,55602,55605,55608],{"class":254,"line":16985},[252,55591,55592],{"class":262},"      { url: ",[252,55594,55595],{"class":367},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[252,55597,55598],{"class":262},", title: ",[252,55600,55601],{"class":367},"'对人类来说会不会太超前了?'",[252,55603,55604],{"class":262},", color: ",[252,55606,55607],{"class":367},"'rgba(100,67,68)'",[252,55609,55610],{"class":262}," },\n",[252,55612,55613,55615,55618,55620,55623,55625,55628],{"class":254,"line":16990},[252,55614,55592],{"class":262},[252,55616,55617],{"class":367},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[252,55619,55598],{"class":262},[252,55621,55622],{"class":367},"'开启剑与雪的黑暗传说!'",[252,55624,55604],{"class":262},[252,55626,55627],{"class":367},"'rgba(43,35,26)'",[252,55629,55610],{"class":262},[252,55631,55632,55634,55637,55639,55642,55644,55647],{"class":254,"line":16995},[252,55633,55592],{"class":262},[252,55635,55636],{"class":367},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[252,55638,55598],{"class":262},[252,55640,55641],{"class":367},"'真正的jo厨出现了!'",[252,55643,55604],{"class":262},[252,55645,55646],{"class":367},"'rgba(36,31,33)'",[252,55648,55610],{"class":262},[252,55650,55651,55653,55656,55658,55661,55663,55666],{"class":254,"line":17009},[252,55652,55592],{"class":262},[252,55654,55655],{"class":367},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[252,55657,55598],{"class":262},[252,55659,55660],{"class":367},"'李玉刚:让世界通过b站看到东方大国文化'",[252,55662,55604],{"class":262},[252,55664,55665],{"class":367},"'rgba(139,98,66)'",[252,55667,55610],{"class":262},[252,55669,55670,55672,55675,55677,55680,55682,55685],{"class":254,"line":17021},[252,55671,55592],{"class":262},[252,55673,55674],{"class":367},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[252,55676,55598],{"class":262},[252,55678,55679],{"class":367},"'快来分享你的寒假日常吧'",[252,55681,55604],{"class":262},[252,55683,55684],{"class":367},"'rgba(67,90,92)'",[252,55686,55610],{"class":262},[252,55688,55689,55691,55694,55696,55699,55701,55704],{"class":254,"line":17026},[252,55690,55592],{"class":262},[252,55692,55693],{"class":367},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[252,55695,55598],{"class":262},[252,55697,55698],{"class":367},"'哔哩哔哩小年YEAR'",[252,55700,55604],{"class":262},[252,55702,55703],{"class":367},"'rgba(166,131,143)'",[252,55705,55610],{"class":262},[252,55707,55708,55710,55713,55715,55718,55720,55723],{"class":254,"line":17039},[252,55709,55592],{"class":262},[252,55711,55712],{"class":367},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[252,55714,55598],{"class":262},[252,55716,55717],{"class":367},"'一站式解决你的电脑配置问题'",[252,55719,55604],{"class":262},[252,55721,55722],{"class":367},"'rgba(53,29,25)'",[252,55724,55610],{"class":262},[252,55726,55727,55729,55732,55734,55737,55739,55742],{"class":254,"line":17044},[252,55728,55592],{"class":262},[252,55730,55731],{"class":367},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[252,55733,55598],{"class":262},[252,55735,55736],{"class":367},"'谁不想和小猫咪贴贴呢?'",[252,55738,55604],{"class":262},[252,55740,55741],{"class":367},"'rgba(99,72,114)'",[252,55743,55744],{"class":262}," }\n",[252,55746,55747],{"class":254,"line":17049},[252,55748,53249],{"class":262},[252,55750,55751,55753,55756,55758,55760,55762,55764,55767],{"class":254,"line":17054},[252,55752,11361],{"class":258},[252,55754,55755],{"class":311}," img",[252,55757,13704],{"class":258},[252,55759,54536],{"class":262},[252,55761,54539],{"class":2102},[252,55763,263],{"class":262},[252,55765,55766],{"class":367},"'.slider-wrapper img'",[252,55768,269],{"class":262},[252,55770,55771,55773,55775,55777,55779,55781,55783,55786],{"class":254,"line":17067},[252,55772,11361],{"class":258},[252,55774,6965],{"class":311},[252,55776,13704],{"class":258},[252,55778,54536],{"class":262},[252,55780,54539],{"class":2102},[252,55782,263],{"class":262},[252,55784,55785],{"class":367},"'.slider-footer p'",[252,55787,269],{"class":262},[252,55789,55790,55792,55795,55797,55799,55801,55803,55806],{"class":254,"line":17072},[252,55791,11361],{"class":258},[252,55793,55794],{"class":311}," color",[252,55796,13704],{"class":258},[252,55798,54536],{"class":262},[252,55800,54539],{"class":2102},[252,55802,263],{"class":262},[252,55804,55805],{"class":367},"'.slider-footer'",[252,55807,269],{"class":262},[252,55809,55810,55812,55815,55817,55819,55822,55824,55827],{"class":254,"line":32773},[252,55811,11361],{"class":258},[252,55813,55814],{"class":311}," lis",[252,55816,13704],{"class":258},[252,55818,54536],{"class":262},[252,55820,55821],{"class":2102},"querySelectorAll",[252,55823,263],{"class":262},[252,55825,55826],{"class":367},"'.slider-footer ul li'",[252,55828,269],{"class":262},[252,55830,55831,55833,55835,55837],{"class":254,"line":32779},[252,55832,52359],{"class":258},[252,55834,9578],{"class":262},[252,55836,308],{"class":258},[252,55838,55839],{"class":311}," 1\n",[252,55841,55842,55844,55847,55849,55851,55853,55855],{"class":254,"line":32785},[252,55843,52359],{"class":258},[252,55845,55846],{"class":262}," timer ",[252,55848,308],{"class":258},[252,55850,54584],{"class":2102},[252,55852,263],{"class":262},[252,55854,54589],{"class":258},[252,55856,54592],{"class":262},[252,55858,55859,55862,55864],{"class":254,"line":32791},[252,55860,55861],{"class":262},"      img.src ",[252,55863,308],{"class":258},[252,55865,55866],{"class":262}," arrImage[i].url\n",[252,55868,55869,55872,55874],{"class":254,"line":32797},[252,55870,55871],{"class":262},"      p.innerHTML ",[252,55873,308],{"class":258},[252,55875,55876],{"class":262}," arrImage[i].title\n",[252,55878,55879,55882,55884],{"class":254,"line":32808},[252,55880,55881],{"class":262},"      color.style.backgroundColor ",[252,55883,308],{"class":258},[252,55885,55886],{"class":262}," arrImage[i].color\n",[252,55888,55889],{"class":254,"line":32814},[252,55890,55891],{"class":321},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[252,55893,55894],{"class":254,"line":32834},[252,55895,55896],{"class":321},"      \u002F\u002F li.classList.add('activate')\n",[252,55898,55899],{"class":254,"line":32840},[252,55900,55901],{"class":321},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[252,55903,55904],{"class":254,"line":32851},[252,55905,55906],{"class":321},"      \u002F\u002F lis[i].classList.remove('activate')\n",[252,55908,55909,55912,55914,55916,55919,55922,55925,55927,55930],{"class":254,"line":32857},[252,55910,55911],{"class":262},"      document.",[252,55913,54539],{"class":2102},[252,55915,263],{"class":262},[252,55917,55918],{"class":367},"'.activate'",[252,55920,55921],{"class":262},")?.classList.",[252,55923,55924],{"class":2102},"toggle",[252,55926,263],{"class":262},[252,55928,55929],{"class":367},"'activate'",[252,55931,269],{"class":262},[252,55933,55934,55937,55939,55941,55943],{"class":254,"line":32863},[252,55935,55936],{"class":262},"      lis[i].classList.",[252,55938,5474],{"class":2102},[252,55940,263],{"class":262},[252,55942,55929],{"class":367},[252,55944,269],{"class":262},[252,55946,55947],{"class":254,"line":32869},[252,55948,2539],{"emptyLinePlaceholder":181},[252,55950,55951,55954,55956,55958,55960,55962,55964,55966,55969],{"class":254,"line":32875},[252,55952,55953],{"class":262},"      i ",[252,55955,308],{"class":258},[252,55957,54623],{"class":262},[252,55959,744],{"class":258},[252,55961,25258],{"class":311},[252,55963,13854],{"class":262},[252,55965,591],{"class":258},[252,55967,55968],{"class":262}," arrImage.",[252,55970,55971],{"class":311},"length\n",[252,55973,55974],{"class":254,"line":32881},[252,55975,2539],{"emptyLinePlaceholder":181},[252,55977,55978,55980,55982],{"class":254,"line":32887},[252,55979,54675],{"class":262},[252,55981,6550],{"class":311},[252,55983,269],{"class":262},[252,55985,55986,55988,55990],{"class":254,"line":32893},[252,55987,52557],{"class":262},[252,55989,51953],{"class":51440},[252,55991,51447],{"class":262},[252,55993,55994,55996,55998],{"class":254,"line":32913},[252,55995,51925],{"class":262},[252,55997,51940],{"class":51440},[252,55999,51447],{"class":262},[252,56001,56002],{"class":254,"line":32919},[252,56003,2539],{"emptyLinePlaceholder":181},[252,56005,56006,56008,56010],{"class":254,"line":32935},[252,56007,51925],{"class":262},[252,56009,50775],{"class":51440},[252,56011,51447],{"class":262},[19,56013,56014],{},[1601,56015],{"alt":169,"src":56016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56018,56019],{},"?.就是短路保护,确保输出正常进行",[19,56021,56022],{},"不要忘记取余%,有时候可以用",[19,56024,56025],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[207,56027,56028],{"start":170},[210,56029,56030],{},"法2",[244,56032,56034],{"className":50773,"code":56033,"language":50775,"meta":169,"style":169},"\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",[22,56035,56036,56046,56060,56064,56072,56086,56106,56118,56126,56132,56142,56152,56156,56160,56166,56176,56180,56184,56190,56200,56212,56224,56238,56242,56246,56252,56262,56272,56282,56294,56306,56316,56320,56324,56332,56342,56354,56366,56378,56382,56386,56392,56402,56414,56426,56436,56446,56456,56468,56480,56484,56488,56496,56508,56520,56546,56558,56562,56566,56572,56582,56586,56594,56602,56606,56614,56628,56642,56662,56670,56684,56696,56704,56722,56734,56746,56758,56770,56782,56794,56806,56814,56822,56830,56838,56849,56865,56881,56897,56913,56929,56945,56961,56977,56981,56986,57004,57022,57032,57037,57042,57053,57059,57074,57083,57087,57092,57101,57106,57115,57120,57125,57130,57153,57183,57187,57195,57199,57207,57215,57219],{"__ignoreMap":169},[252,56037,56038,56040,56042,56044],{"class":254,"line":255},[252,56039,51437],{"class":262},[252,56041,51441],{"class":51440},[252,56043,51444],{"class":2102},[252,56045,51447],{"class":262},[252,56047,56048,56050,56052,56054,56056,56058],{"class":254,"line":170},[252,56049,1173],{"class":262},[252,56051,50775],{"class":51440},[252,56053,51456],{"class":2102},[252,56055,308],{"class":262},[252,56057,51461],{"class":367},[252,56059,51447],{"class":262},[252,56061,56062],{"class":254,"line":1318},[252,56063,2539],{"emptyLinePlaceholder":181},[252,56065,56066,56068,56070],{"class":254,"line":1333},[252,56067,1173],{"class":262},[252,56069,51474],{"class":51440},[252,56071,51447],{"class":262},[252,56073,56074,56076,56078,56080,56082,56084],{"class":254,"line":1339},[252,56075,52284],{"class":262},[252,56077,51484],{"class":51440},[252,56079,51487],{"class":2102},[252,56081,308],{"class":262},[252,56083,51492],{"class":367},[252,56085,51447],{"class":262},[252,56087,56088,56090,56092,56094,56096,56098,56100,56102,56104],{"class":254,"line":1353},[252,56089,52284],{"class":262},[252,56091,51484],{"class":51440},[252,56093,15060],{"class":2102},[252,56095,308],{"class":262},[252,56097,51531],{"class":367},[252,56099,51511],{"class":2102},[252,56101,308],{"class":262},[252,56103,51538],{"class":367},[252,56105,51447],{"class":262},[252,56107,56108,56110,56112,56114,56116],{"class":254,"line":1359},[252,56109,52284],{"class":262},[252,56111,51547],{"class":51440},[252,56113,51550],{"class":262},[252,56115,51547],{"class":51440},[252,56117,51447],{"class":262},[252,56119,56120,56122,56124],{"class":254,"line":1450},[252,56121,52284],{"class":262},[252,56123,5266],{"class":51440},[252,56125,51447],{"class":262},[252,56127,56128,56130],{"class":254,"line":1456},[252,56129,6543],{"class":51440},[252,56131,15712],{"class":262},[252,56133,56134,56136,56138,56140],{"class":254,"line":1468},[252,56135,54835],{"class":311},[252,56137,51577],{"class":262},[252,56139,454],{"class":311},[252,56141,1429],{"class":262},[252,56143,56144,56146,56148,56150],{"class":254,"line":1751},[252,56145,54846],{"class":311},[252,56147,51577],{"class":262},[252,56149,454],{"class":311},[252,56151,1429],{"class":262},[252,56153,56154],{"class":254,"line":1756},[252,56155,2326],{"class":262},[252,56157,56158],{"class":254,"line":1762},[252,56159,2539],{"emptyLinePlaceholder":181},[252,56161,56162,56164],{"class":254,"line":1767},[252,56163,54865],{"class":51440},[252,56165,15712],{"class":262},[252,56167,56168,56170,56172,56174],{"class":254,"line":1781},[252,56169,54872],{"class":311},[252,56171,51577],{"class":262},[252,56173,54877],{"class":311},[252,56175,1429],{"class":262},[252,56177,56178],{"class":254,"line":1786},[252,56179,2326],{"class":262},[252,56181,56182],{"class":254,"line":1792},[252,56183,2539],{"emptyLinePlaceholder":181},[252,56185,56186,56188],{"class":254,"line":1813},[252,56187,54892],{"class":2102},[252,56189,15712],{"class":262},[252,56191,56192,56194,56196,56198],{"class":254,"line":1818},[252,56193,54899],{"class":311},[252,56195,51577],{"class":262},[252,56197,54904],{"class":311},[252,56199,1429],{"class":262},[252,56201,56202,56204,56206,56208,56210],{"class":254,"line":1832},[252,56203,54911],{"class":311},[252,56205,51577],{"class":262},[252,56207,54916],{"class":311},[252,56209,51632],{"class":258},[252,56211,1429],{"class":262},[252,56213,56214,56216,56218,56220,56222],{"class":254,"line":1837},[252,56215,54925],{"class":311},[252,56217,51577],{"class":262},[252,56219,1678],{"class":311},[252,56221,51632],{"class":258},[252,56223,1429],{"class":262},[252,56225,56226,56228,56230,56232,56234,56236],{"class":254,"line":1866},[252,56227,54846],{"class":311},[252,56229,51577],{"class":262},[252,56231,574],{"class":311},[252,56233,51632],{"class":258},[252,56235,51696],{"class":311},[252,56237,1429],{"class":262},[252,56239,56240],{"class":254,"line":1871},[252,56241,2326],{"class":262},[252,56243,56244],{"class":254,"line":1888},[252,56245,2539],{"emptyLinePlaceholder":181},[252,56247,56248,56250],{"class":254,"line":1893},[252,56249,54960],{"class":2102},[252,56251,15712],{"class":262},[252,56253,56254,56256,56258,56260],{"class":254,"line":1898},[252,56255,54899],{"class":311},[252,56257,51577],{"class":262},[252,56259,54971],{"class":311},[252,56261,1429],{"class":262},[252,56263,56264,56266,56268,56270],{"class":254,"line":1903},[252,56265,54978],{"class":311},[252,56267,51577],{"class":262},[252,56269,454],{"class":311},[252,56271,1429],{"class":262},[252,56273,56274,56276,56278,56280],{"class":254,"line":1917},[252,56275,54989],{"class":311},[252,56277,51577],{"class":262},[252,56279,454],{"class":311},[252,56281,1429],{"class":262},[252,56283,56284,56286,56288,56290,56292],{"class":254,"line":1922},[252,56285,54911],{"class":311},[252,56287,51577],{"class":262},[252,56289,574],{"class":311},[252,56291,591],{"class":258},[252,56293,1429],{"class":262},[252,56295,56296,56298,56300,56302,56304],{"class":254,"line":2716},[252,56297,54925],{"class":311},[252,56299,51577],{"class":262},[252,56301,838],{"class":311},[252,56303,591],{"class":258},[252,56305,1429],{"class":262},[252,56307,56308,56310,56312,56314],{"class":254,"line":2730},[252,56309,55024],{"class":311},[252,56311,51577],{"class":262},[252,56313,55029],{"class":311},[252,56315,1429],{"class":262},[252,56317,56318],{"class":254,"line":2738},[252,56319,2326],{"class":262},[252,56321,56322],{"class":254,"line":2743},[252,56323,2539],{"emptyLinePlaceholder":181},[252,56325,56326,56328,56330],{"class":254,"line":2749},[252,56327,54960],{"class":2102},[252,56329,6965],{"class":51440},[252,56331,15712],{"class":262},[252,56333,56334,56336,56338,56340],{"class":254,"line":2755},[252,56335,54899],{"class":311},[252,56337,51577],{"class":262},[252,56339,54971],{"class":311},[252,56341,1429],{"class":262},[252,56343,56344,56346,56348,56350,56352],{"class":254,"line":2760},[252,56345,55062],{"class":311},[252,56347,51577],{"class":262},[252,56349,1164],{"class":311},[252,56351,51632],{"class":258},[252,56353,1429],{"class":262},[252,56355,56356,56358,56360,56362,56364],{"class":254,"line":8088},[252,56357,54978],{"class":311},[252,56359,51577],{"class":262},[252,56361,963],{"class":311},[252,56363,51632],{"class":258},[252,56365,1429],{"class":262},[252,56367,56368,56370,56372,56374,56376],{"class":254,"line":8112},[252,56369,55087],{"class":311},[252,56371,51577],{"class":262},[252,56373,582],{"class":311},[252,56375,51632],{"class":258},[252,56377,1429],{"class":262},[252,56379,56380],{"class":254,"line":8117},[252,56381,2326],{"class":262},[252,56383,56384],{"class":254,"line":8123},[252,56385,2539],{"emptyLinePlaceholder":181},[252,56387,56388,56390],{"class":254,"line":8150},[252,56389,55108],{"class":51440},[252,56391,15712],{"class":262},[252,56393,56394,56396,56398,56400],{"class":254,"line":8155},[252,56395,54899],{"class":311},[252,56397,51577],{"class":262},[252,56399,54971],{"class":311},[252,56401,1429],{"class":262},[252,56403,56404,56406,56408,56410,56412],{"class":254,"line":8161},[252,56405,55087],{"class":311},[252,56407,51577],{"class":262},[252,56409,1044],{"class":311},[252,56411,51632],{"class":258},[252,56413,1429],{"class":262},[252,56415,56416,56418,56420,56422,56424],{"class":254,"line":8173},[252,56417,54978],{"class":311},[252,56419,51577],{"class":262},[252,56421,963],{"class":311},[252,56423,51632],{"class":258},[252,56425,1429],{"class":262},[252,56427,56428,56430,56432,56434],{"class":254,"line":8185},[252,56429,55149],{"class":311},[252,56431,51577],{"class":262},[252,56433,51617],{"class":311},[252,56435,1429],{"class":262},[252,56437,56438,56440,56442,56444],{"class":254,"line":8197},[252,56439,55160],{"class":311},[252,56441,51577],{"class":262},[252,56443,51808],{"class":311},[252,56445,1429],{"class":262},[252,56447,56448,56450,56452,56454],{"class":254,"line":9856},[252,56449,54899],{"class":311},[252,56451,51577],{"class":262},[252,56453,54971],{"class":311},[252,56455,1429],{"class":262},[252,56457,56458,56460,56462,56464,56466],{"class":254,"line":9881},[252,56459,54911],{"class":311},[252,56461,51577],{"class":262},[252,56463,4131],{"class":311},[252,56465,51632],{"class":258},[252,56467,1429],{"class":262},[252,56469,56470,56472,56474,56476,56478],{"class":254,"line":9904},[252,56471,54925],{"class":311},[252,56473,51577],{"class":262},[252,56475,963],{"class":311},[252,56477,51632],{"class":258},[252,56479,1429],{"class":262},[252,56481,56482],{"class":254,"line":9928},[252,56483,2326],{"class":262},[252,56485,56486],{"class":254,"line":9933},[252,56487,2539],{"emptyLinePlaceholder":181},[252,56489,56490,56492,56494],{"class":254,"line":9938},[252,56491,55108],{"class":51440},[252,56493,55215],{"class":51440},[252,56495,15712],{"class":262},[252,56497,56498,56500,56502,56504,56506],{"class":254,"line":9943},[252,56499,54911],{"class":311},[252,56501,51577],{"class":262},[252,56503,963],{"class":311},[252,56505,51632],{"class":258},[252,56507,1429],{"class":262},[252,56509,56510,56512,56514,56516,56518],{"class":254,"line":9952},[252,56511,54925],{"class":311},[252,56513,51577],{"class":262},[252,56515,963],{"class":311},[252,56517,51632],{"class":258},[252,56519,1429],{"class":262},[252,56521,56522,56524,56526,56528,56530,56532,56534,56536,56538,56540,56542,56544],{"class":254,"line":9957},[252,56523,55024],{"class":311},[252,56525,51577],{"class":262},[252,56527,55250],{"class":311},[252,56529,263],{"class":262},[252,56531,454],{"class":311},[252,56533,12575],{"class":262},[252,56535,454],{"class":311},[252,56537,12575],{"class":262},[252,56539,454],{"class":311},[252,56541,12575],{"class":262},[252,56543,55267],{"class":311},[252,56545,2858],{"class":262},[252,56547,56548,56550,56552,56554,56556],{"class":254,"line":9963},[252,56549,55274],{"class":311},[252,56551,51577],{"class":262},[252,56553,709],{"class":311},[252,56555,51632],{"class":258},[252,56557,1429],{"class":262},[252,56559,56560],{"class":254,"line":9984},[252,56561,2326],{"class":262},[252,56563,56564],{"class":254,"line":9990},[252,56565,2539],{"emptyLinePlaceholder":181},[252,56567,56568,56570],{"class":254,"line":10004},[252,56569,55295],{"class":2102},[252,56571,15712],{"class":262},[252,56573,56574,56576,56578,56580],{"class":254,"line":10010},[252,56575,55024],{"class":311},[252,56577,51577],{"class":262},[252,56579,55306],{"class":311},[252,56581,1429],{"class":262},[252,56583,56584],{"class":254,"line":10037},[252,56585,2326],{"class":262},[252,56587,56588,56590,56592],{"class":254,"line":10046},[252,56589,52557],{"class":262},[252,56591,5266],{"class":51440},[252,56593,51447],{"class":262},[252,56595,56596,56598,56600],{"class":254,"line":10052},[252,56597,51925],{"class":262},[252,56599,51474],{"class":51440},[252,56601,51447],{"class":262},[252,56603,56604],{"class":254,"line":10060},[252,56605,2539],{"emptyLinePlaceholder":181},[252,56607,56608,56610,56612],{"class":254,"line":10065},[252,56609,1173],{"class":262},[252,56611,51940],{"class":51440},[252,56613,51447],{"class":262},[252,56615,56616,56618,56620,56622,56624,56626],{"class":254,"line":16744},[252,56617,52284],{"class":262},[252,56619,51751],{"class":51440},[252,56621,53626],{"class":2102},[252,56623,308],{"class":262},[252,56625,53631],{"class":367},[252,56627,51447],{"class":262},[252,56629,56630,56632,56634,56636,56638,56640],{"class":254,"line":16750},[252,56631,51481],{"class":262},[252,56633,51751],{"class":51440},[252,56635,53626],{"class":2102},[252,56637,308],{"class":262},[252,56639,55367],{"class":367},[252,56641,51447],{"class":262},[252,56643,56644,56646,56648,56650,56652,56654,56656,56658,56660],{"class":254,"line":16773},[252,56645,55374],{"class":262},[252,56647,1601],{"class":51440},[252,56649,55379],{"class":2102},[252,56651,308],{"class":262},[252,56653,55384],{"class":367},[252,56655,55387],{"class":2102},[252,56657,308],{"class":262},[252,56659,7792],{"class":367},[252,56661,51447],{"class":262},[252,56663,56664,56666,56668],{"class":254,"line":16779},[252,56665,51916],{"class":262},[252,56667,51751],{"class":51440},[252,56669,51447],{"class":262},[252,56671,56672,56674,56676,56678,56680,56682],{"class":254,"line":16802},[252,56673,51481],{"class":262},[252,56675,51751],{"class":51440},[252,56677,53626],{"class":2102},[252,56679,308],{"class":262},[252,56681,55414],{"class":367},[252,56683,51447],{"class":262},[252,56685,56686,56688,56690,56692,56694],{"class":254,"line":16816},[252,56687,55374],{"class":262},[252,56689,19],{"class":51440},[252,56691,55425],{"class":262},[252,56693,19],{"class":51440},[252,56695,51447],{"class":262},[252,56697,56698,56700,56702],{"class":254,"line":16836},[252,56699,55374],{"class":262},[252,56701,1270],{"class":51440},[252,56703,51447],{"class":262},[252,56705,56706,56708,56710,56712,56714,56716,56718,56720],{"class":254,"line":16842},[252,56707,55442],{"class":262},[252,56709,210],{"class":51440},[252,56711,53626],{"class":2102},[252,56713,308],{"class":262},[252,56715,55451],{"class":367},[252,56717,55454],{"class":262},[252,56719,210],{"class":51440},[252,56721,51447],{"class":262},[252,56723,56724,56726,56728,56730,56732],{"class":254,"line":16853},[252,56725,55442],{"class":262},[252,56727,210],{"class":51440},[252,56729,55454],{"class":262},[252,56731,210],{"class":51440},[252,56733,51447],{"class":262},[252,56735,56736,56738,56740,56742,56744],{"class":254,"line":16876},[252,56737,55442],{"class":262},[252,56739,210],{"class":51440},[252,56741,55454],{"class":262},[252,56743,210],{"class":51440},[252,56745,51447],{"class":262},[252,56747,56748,56750,56752,56754,56756],{"class":254,"line":16898},[252,56749,55442],{"class":262},[252,56751,210],{"class":51440},[252,56753,55454],{"class":262},[252,56755,210],{"class":51440},[252,56757,51447],{"class":262},[252,56759,56760,56762,56764,56766,56768],{"class":254,"line":16903},[252,56761,55442],{"class":262},[252,56763,210],{"class":51440},[252,56765,55454],{"class":262},[252,56767,210],{"class":51440},[252,56769,51447],{"class":262},[252,56771,56772,56774,56776,56778,56780],{"class":254,"line":16909},[252,56773,55442],{"class":262},[252,56775,210],{"class":51440},[252,56777,55454],{"class":262},[252,56779,210],{"class":51440},[252,56781,51447],{"class":262},[252,56783,56784,56786,56788,56790,56792],{"class":254,"line":16923},[252,56785,55442],{"class":262},[252,56787,210],{"class":51440},[252,56789,55454],{"class":262},[252,56791,210],{"class":51440},[252,56793,51447],{"class":262},[252,56795,56796,56798,56800,56802,56804],{"class":254,"line":16936},[252,56797,55442],{"class":262},[252,56799,210],{"class":51440},[252,56801,55454],{"class":262},[252,56803,210],{"class":51440},[252,56805,51447],{"class":262},[252,56807,56808,56810,56812],{"class":254,"line":16941},[252,56809,55547],{"class":262},[252,56811,1270],{"class":51440},[252,56813,51447],{"class":262},[252,56815,56816,56818,56820],{"class":254,"line":16955},[252,56817,51916],{"class":262},[252,56819,51751],{"class":51440},[252,56821,51447],{"class":262},[252,56823,56824,56826,56828],{"class":254,"line":16960},[252,56825,52557],{"class":262},[252,56827,51751],{"class":51440},[252,56829,51447],{"class":262},[252,56831,56832,56834,56836],{"class":254,"line":16966},[252,56833,52284],{"class":262},[252,56835,51953],{"class":51440},[252,56837,51447],{"class":262},[252,56839,56840,56842,56845,56847],{"class":254,"line":16971},[252,56841,11361],{"class":258},[252,56843,56844],{"class":311}," sliderData",[252,56846,13704],{"class":258},[252,56848,55587],{"class":262},[252,56850,56851,56853,56855,56857,56859,56861,56863],{"class":254,"line":16985},[252,56852,55592],{"class":262},[252,56854,55595],{"class":367},[252,56856,55598],{"class":262},[252,56858,55601],{"class":367},[252,56860,55604],{"class":262},[252,56862,55607],{"class":367},[252,56864,55610],{"class":262},[252,56866,56867,56869,56871,56873,56875,56877,56879],{"class":254,"line":16990},[252,56868,55592],{"class":262},[252,56870,55617],{"class":367},[252,56872,55598],{"class":262},[252,56874,55622],{"class":367},[252,56876,55604],{"class":262},[252,56878,55627],{"class":367},[252,56880,55610],{"class":262},[252,56882,56883,56885,56887,56889,56891,56893,56895],{"class":254,"line":16995},[252,56884,55592],{"class":262},[252,56886,55636],{"class":367},[252,56888,55598],{"class":262},[252,56890,55641],{"class":367},[252,56892,55604],{"class":262},[252,56894,55646],{"class":367},[252,56896,55610],{"class":262},[252,56898,56899,56901,56903,56905,56907,56909,56911],{"class":254,"line":17009},[252,56900,55592],{"class":262},[252,56902,55655],{"class":367},[252,56904,55598],{"class":262},[252,56906,55660],{"class":367},[252,56908,55604],{"class":262},[252,56910,55665],{"class":367},[252,56912,55610],{"class":262},[252,56914,56915,56917,56919,56921,56923,56925,56927],{"class":254,"line":17021},[252,56916,55592],{"class":262},[252,56918,55674],{"class":367},[252,56920,55598],{"class":262},[252,56922,55679],{"class":367},[252,56924,55604],{"class":262},[252,56926,55684],{"class":367},[252,56928,55610],{"class":262},[252,56930,56931,56933,56935,56937,56939,56941,56943],{"class":254,"line":17026},[252,56932,55592],{"class":262},[252,56934,55693],{"class":367},[252,56936,55598],{"class":262},[252,56938,55698],{"class":367},[252,56940,55604],{"class":262},[252,56942,55703],{"class":367},[252,56944,55610],{"class":262},[252,56946,56947,56949,56951,56953,56955,56957,56959],{"class":254,"line":17039},[252,56948,55592],{"class":262},[252,56950,55712],{"class":367},[252,56952,55598],{"class":262},[252,56954,55717],{"class":367},[252,56956,55604],{"class":262},[252,56958,55722],{"class":367},[252,56960,55610],{"class":262},[252,56962,56963,56965,56967,56969,56971,56973,56975],{"class":254,"line":17044},[252,56964,55592],{"class":262},[252,56966,55731],{"class":367},[252,56968,55598],{"class":262},[252,56970,55736],{"class":367},[252,56972,55604],{"class":262},[252,56974,55741],{"class":367},[252,56976,55744],{"class":262},[252,56978,56979],{"class":254,"line":17049},[252,56980,53249],{"class":262},[252,56982,56983],{"class":254,"line":17054},[252,56984,56985],{"class":321},"    \u002F\u002F 1.获取元素\n",[252,56987,56988,56990,56992,56994,56996,56998,57000,57002],{"class":254,"line":17067},[252,56989,11361],{"class":258},[252,56991,55755],{"class":311},[252,56993,13704],{"class":258},[252,56995,54536],{"class":262},[252,56997,54539],{"class":2102},[252,56999,263],{"class":262},[252,57001,55766],{"class":367},[252,57003,269],{"class":262},[252,57005,57006,57008,57010,57012,57014,57016,57018,57020],{"class":254,"line":17072},[252,57007,11361],{"class":258},[252,57009,6965],{"class":311},[252,57011,13704],{"class":258},[252,57013,54536],{"class":262},[252,57015,54539],{"class":2102},[252,57017,263],{"class":262},[252,57019,55785],{"class":367},[252,57021,269],{"class":262},[252,57023,57024,57026,57028,57030],{"class":254,"line":32773},[252,57025,52359],{"class":258},[252,57027,9578],{"class":262},[252,57029,308],{"class":258},[252,57031,47473],{"class":311},[252,57033,57034],{"class":254,"line":32779},[252,57035,57036],{"class":321},"    \u002F\u002F 2.开启定时器\n",[252,57038,57039],{"class":254,"line":32785},[252,57040,57041],{"class":321},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[252,57043,57044,57047,57049,57051],{"class":254,"line":32791},[252,57045,57046],{"class":2102},"    setInterval",[252,57048,263],{"class":262},[252,57050,54589],{"class":258},[252,57052,54592],{"class":262},[252,57054,57055,57057],{"class":254,"line":32797},[252,57056,54597],{"class":262},[252,57058,2841],{"class":258},[252,57060,57061,57063,57065,57067,57070,57072],{"class":254,"line":32808},[252,57062,54620],{"class":258},[252,57064,54623],{"class":262},[252,57066,1849],{"class":258},[252,57068,57069],{"class":262}," sliderData.",[252,57071,52108],{"class":311},[252,57073,12582],{"class":262},[252,57075,57076,57079,57081],{"class":254,"line":32814},[252,57077,57078],{"class":262},"        i ",[252,57080,308],{"class":258},[252,57082,47473],{"class":311},[252,57084,57085],{"class":254,"line":32834},[252,57086,52538],{"class":262},[252,57088,57089],{"class":254,"line":32840},[252,57090,57091],{"class":321},"      \u002F\u002F 更换图片路径\n",[252,57093,57094,57096,57098],{"class":254,"line":32851},[252,57095,55861],{"class":262},[252,57097,308],{"class":258},[252,57099,57100],{"class":262}," sliderData[i].url\n",[252,57102,57103],{"class":254,"line":32857},[252,57104,57105],{"class":321},"      \u002F\u002F 把文字写到p里面\n",[252,57107,57108,57110,57112],{"class":254,"line":32863},[252,57109,55871],{"class":262},[252,57111,308],{"class":258},[252,57113,57114],{"class":262}," sliderData[i].title\n",[252,57116,57117],{"class":254,"line":32869},[252,57118,57119],{"class":321},"      \u002F\u002F 小圆点\n",[252,57121,57122],{"class":254,"line":32875},[252,57123,57124],{"class":321},"      \u002F\u002F 先删除以前的active\n",[252,57126,57127],{"class":254,"line":32881},[252,57128,57129],{"class":321},"      \u002F\u002F 只让当前li添加active\n",[252,57131,57132,57134,57136,57138,57141,57144,57147,57149,57151],{"class":254,"line":32887},[252,57133,55911],{"class":262},[252,57135,54539],{"class":2102},[252,57137,263],{"class":262},[252,57139,57140],{"class":367},"'.slider-footer .activate'",[252,57142,57143],{"class":262},").classList.",[252,57145,57146],{"class":2102},"remove",[252,57148,263],{"class":262},[252,57150,55929],{"class":367},[252,57152,269],{"class":262},[252,57154,57155,57157,57159,57161,57164,57166,57168,57170,57173,57175,57177,57179,57181],{"class":254,"line":32893},[252,57156,55911],{"class":262},[252,57158,54539],{"class":2102},[252,57160,263],{"class":262},[252,57162,57163],{"class":367},"`.slider-footer ul li:nth-child(${",[252,57165,704],{"class":262},[252,57167,45706],{"class":258},[252,57169,25258],{"class":311},[252,57171,57172],{"class":367},"})`",[252,57174,57143],{"class":262},[252,57176,5474],{"class":2102},[252,57178,263],{"class":262},[252,57180,55929],{"class":367},[252,57182,269],{"class":262},[252,57184,57185],{"class":254,"line":32913},[252,57186,2539],{"emptyLinePlaceholder":181},[252,57188,57189,57191,57193],{"class":254,"line":32919},[252,57190,54675],{"class":262},[252,57192,6550],{"class":311},[252,57194,269],{"class":262},[252,57196,57197],{"class":254,"line":32935},[252,57198,2539],{"emptyLinePlaceholder":181},[252,57200,57201,57203,57205],{"class":254,"line":32941},[252,57202,52557],{"class":262},[252,57204,51953],{"class":51440},[252,57206,51447],{"class":262},[252,57208,57209,57211,57213],{"class":254,"line":32955},[252,57210,51925],{"class":262},[252,57212,51940],{"class":51440},[252,57214,51447],{"class":262},[252,57216,57217],{"class":254,"line":32961},[252,57218,2539],{"emptyLinePlaceholder":181},[252,57220,57221,57223,57225],{"class":254,"line":32976},[252,57222,51925],{"class":262},[252,57224,50775],{"class":51440},[252,57226,51447],{"class":262},[224,57228,57230],{"id":57229},"_317-重要知识点","3.1.7 重要知识点",[19,57232,57233,57234],{},"浏览器在渲染文本时， ",[412,57235,57236],{},"没有空格或换行符就没有“断行点”",[19,57238,57239],{},[1601,57240],{"alt":169,"src":57241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57243,57244],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57246,57247],{},[1601,57248],{"alt":169,"src":57249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57251,57252],{},[1601,57253],{"alt":169,"src":57254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57256,57258],{"id":57257},"_32-dom事件基础","3.2 DOM事件基础",[224,57260,57262],{"id":57261},"_321-事件监听","3.2.1 事件监听",[19,57264,57265],{},[1601,57266],{"alt":169,"src":57267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57269,57270],{},"事件监听有响应的发生",[19,57272,57273],{},[1601,57274],{"alt":169,"src":57275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57277,57278],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57280,57281],{},"对于有名函数,要执行的函数名后边不要加()",[224,57283,57285],{"id":57284},"_322-随机点名案例","3.2.2 随机点名案例",[244,57287,57289],{"className":50773,"code":57288,"language":50775,"meta":169,"style":169},"\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",[22,57290,57291,57301,57315,57319,57327,57341,57361,57373,57381,57387,57397,57407,57411,57415,57422,57433,57437,57441,57447,57459,57473,57483,57495,57508,57512,57516,57523,57527,57540,57552,57564,57568,57572,57576,57583,57593,57597,57601,57610,57622,57634,57649,57653,57661,57669,57673,57681,57694,57708,57721,57741,57749,57764,57784,57804,57812,57816,57824,57829,57865,57885,57890,57909,57914,57925,57930,57941,57946,57965,57980,57985,58011,58021,58030,58035,58051,58056,58061,58066,58081,58085,58089,58094,58113,58130,58138,58143,58158,58162,58166,58174,58182,58186],{"__ignoreMap":169},[252,57292,57293,57295,57297,57299],{"class":254,"line":255},[252,57294,51437],{"class":262},[252,57296,51441],{"class":51440},[252,57298,51444],{"class":2102},[252,57300,51447],{"class":262},[252,57302,57303,57305,57307,57309,57311,57313],{"class":254,"line":170},[252,57304,1173],{"class":262},[252,57306,50775],{"class":51440},[252,57308,51456],{"class":2102},[252,57310,308],{"class":262},[252,57312,51461],{"class":367},[252,57314,51447],{"class":262},[252,57316,57317],{"class":254,"line":1318},[252,57318,2539],{"emptyLinePlaceholder":181},[252,57320,57321,57323,57325],{"class":254,"line":1333},[252,57322,1173],{"class":262},[252,57324,51474],{"class":51440},[252,57326,51447],{"class":262},[252,57328,57329,57331,57333,57335,57337,57339],{"class":254,"line":1339},[252,57330,52284],{"class":262},[252,57332,51484],{"class":51440},[252,57334,51487],{"class":2102},[252,57336,308],{"class":262},[252,57338,51492],{"class":367},[252,57340,51447],{"class":262},[252,57342,57343,57345,57347,57349,57351,57353,57355,57357,57359],{"class":254,"line":1353},[252,57344,52284],{"class":262},[252,57346,51484],{"class":51440},[252,57348,15060],{"class":2102},[252,57350,308],{"class":262},[252,57352,51531],{"class":367},[252,57354,51511],{"class":2102},[252,57356,308],{"class":262},[252,57358,51538],{"class":367},[252,57360,51447],{"class":262},[252,57362,57363,57365,57367,57369,57371],{"class":254,"line":1359},[252,57364,52284],{"class":262},[252,57366,51547],{"class":51440},[252,57368,51550],{"class":262},[252,57370,51547],{"class":51440},[252,57372,51447],{"class":262},[252,57374,57375,57377,57379],{"class":254,"line":1450},[252,57376,52284],{"class":262},[252,57378,5266],{"class":51440},[252,57380,51447],{"class":262},[252,57382,57383,57385],{"class":254,"line":1456},[252,57384,6543],{"class":51440},[252,57386,15712],{"class":262},[252,57388,57389,57391,57393,57395],{"class":254,"line":1468},[252,57390,54846],{"class":311},[252,57392,51577],{"class":262},[252,57394,454],{"class":311},[252,57396,1429],{"class":262},[252,57398,57399,57401,57403,57405],{"class":254,"line":1751},[252,57400,54835],{"class":311},[252,57402,51577],{"class":262},[252,57404,454],{"class":311},[252,57406,1429],{"class":262},[252,57408,57409],{"class":254,"line":1756},[252,57410,2326],{"class":262},[252,57412,57413],{"class":254,"line":1762},[252,57414,2539],{"emptyLinePlaceholder":181},[252,57416,57417,57420],{"class":254,"line":1767},[252,57418,57419],{"class":51440},"    h2",[252,57421,15712],{"class":262},[252,57423,57424,57427,57429,57431],{"class":254,"line":1781},[252,57425,57426],{"class":311},"      text-align",[252,57428,51577],{"class":262},[252,57430,51732],{"class":311},[252,57432,1429],{"class":262},[252,57434,57435],{"class":254,"line":1786},[252,57436,2326],{"class":262},[252,57438,57439],{"class":254,"line":1792},[252,57440,2539],{"emptyLinePlaceholder":181},[252,57442,57443,57445],{"class":254,"line":1813},[252,57444,54892],{"class":2102},[252,57446,15712],{"class":262},[252,57448,57449,57451,57453,57455,57457],{"class":254,"line":1818},[252,57450,54911],{"class":311},[252,57452,51577],{"class":262},[252,57454,1678],{"class":311},[252,57456,51632],{"class":258},[252,57458,1429],{"class":262},[252,57460,57461,57463,57465,57467,57469,57471],{"class":254,"line":1832},[252,57462,54846],{"class":311},[252,57464,51577],{"class":262},[252,57466,919],{"class":311},[252,57468,51632],{"class":258},[252,57470,51696],{"class":311},[252,57472,1429],{"class":262},[252,57474,57475,57477,57479,57481],{"class":254,"line":1837},[252,57476,55149],{"class":311},[252,57478,51577],{"class":262},[252,57480,51617],{"class":311},[252,57482,1429],{"class":262},[252,57484,57485,57487,57489,57491,57493],{"class":254,"line":1866},[252,57486,55062],{"class":311},[252,57488,51577],{"class":262},[252,57490,1088],{"class":311},[252,57492,51632],{"class":258},[252,57494,1429],{"class":262},[252,57496,57497,57500,57502,57504,57506],{"class":254,"line":1871},[252,57498,57499],{"class":311},"      line-height",[252,57501,51577],{"class":262},[252,57503,664],{"class":311},[252,57505,51632],{"class":258},[252,57507,1429],{"class":262},[252,57509,57510],{"class":254,"line":1888},[252,57511,2326],{"class":262},[252,57513,57514],{"class":254,"line":1893},[252,57515,2539],{"emptyLinePlaceholder":181},[252,57517,57518,57521],{"class":254,"line":1898},[252,57519,57520],{"class":2102},"    .qs",[252,57522,15712],{"class":262},[252,57524,57525],{"class":254,"line":1903},[252,57526,2539],{"emptyLinePlaceholder":181},[252,57528,57529,57531,57533,57536,57538],{"class":254,"line":1917},[252,57530,54911],{"class":311},[252,57532,51577],{"class":262},[252,57534,57535],{"class":311},"450",[252,57537,51632],{"class":258},[252,57539,1429],{"class":262},[252,57541,57542,57544,57546,57548,57550],{"class":254,"line":1922},[252,57543,54925],{"class":311},[252,57545,51577],{"class":262},[252,57547,664],{"class":311},[252,57549,51632],{"class":258},[252,57551,1429],{"class":262},[252,57553,57554,57557,57559,57562],{"class":254,"line":2716},[252,57555,57556],{"class":311},"      color",[252,57558,51577],{"class":262},[252,57560,57561],{"class":311},"red",[252,57563,1429],{"class":262},[252,57565,57566],{"class":254,"line":2730},[252,57567,2539],{"emptyLinePlaceholder":181},[252,57569,57570],{"class":254,"line":2738},[252,57571,2326],{"class":262},[252,57573,57574],{"class":254,"line":2743},[252,57575,2539],{"emptyLinePlaceholder":181},[252,57577,57578,57581],{"class":254,"line":2749},[252,57579,57580],{"class":2102},"    .btns",[252,57582,15712],{"class":262},[252,57584,57585,57587,57589,57591],{"class":254,"line":2755},[252,57586,57426],{"class":311},[252,57588,51577],{"class":262},[252,57590,51732],{"class":311},[252,57592,1429],{"class":262},[252,57594,57595],{"class":254,"line":2760},[252,57596,2326],{"class":262},[252,57598,57599],{"class":254,"line":8088},[252,57600,2539],{"emptyLinePlaceholder":181},[252,57602,57603,57605,57608],{"class":254,"line":8112},[252,57604,57580],{"class":2102},[252,57606,57607],{"class":51440}," button",[252,57609,15712],{"class":262},[252,57611,57612,57614,57616,57618,57620],{"class":254,"line":8117},[252,57613,54911],{"class":311},[252,57615,51577],{"class":262},[252,57617,1080],{"class":311},[252,57619,51632],{"class":258},[252,57621,1429],{"class":262},[252,57623,57624,57626,57628,57630,57632],{"class":254,"line":8123},[252,57625,54925],{"class":311},[252,57627,51577],{"class":262},[252,57629,536],{"class":311},[252,57631,51632],{"class":258},[252,57633,1429],{"class":262},[252,57635,57636,57638,57640,57642,57645,57647],{"class":254,"line":8150},[252,57637,54846],{"class":311},[252,57639,51577],{"class":262},[252,57641,454],{"class":311},[252,57643,57644],{"class":311}," 50",[252,57646,51632],{"class":258},[252,57648,1429],{"class":262},[252,57650,57651],{"class":254,"line":8155},[252,57652,2326],{"class":262},[252,57654,57655,57657,57659],{"class":254,"line":8161},[252,57656,52557],{"class":262},[252,57658,5266],{"class":51440},[252,57660,51447],{"class":262},[252,57662,57663,57665,57667],{"class":254,"line":8173},[252,57664,51925],{"class":262},[252,57666,51474],{"class":51440},[252,57668,51447],{"class":262},[252,57670,57671],{"class":254,"line":8185},[252,57672,2539],{"emptyLinePlaceholder":181},[252,57674,57675,57677,57679],{"class":254,"line":8197},[252,57676,1173],{"class":262},[252,57678,51940],{"class":51440},[252,57680,51447],{"class":262},[252,57682,57683,57685,57687,57690,57692],{"class":254,"line":9856},[252,57684,52284],{"class":262},[252,57686,14],{"class":51440},[252,57688,57689],{"class":262},">随机点名\u003C\u002F",[252,57691,14],{"class":51440},[252,57693,51447],{"class":262},[252,57695,57696,57698,57700,57702,57704,57706],{"class":254,"line":9881},[252,57697,52284],{"class":262},[252,57699,51751],{"class":51440},[252,57701,53626],{"class":2102},[252,57703,308],{"class":262},[252,57705,53631],{"class":367},[252,57707,51447],{"class":262},[252,57709,57710,57712,57714,57717,57719],{"class":254,"line":9904},[252,57711,51481],{"class":262},[252,57713,252],{"class":51440},[252,57715,57716],{"class":262},">名字是：\u003C\u002F",[252,57718,252],{"class":51440},[252,57720,51447],{"class":262},[252,57722,57723,57725,57727,57729,57731,57734,57737,57739],{"class":254,"line":9928},[252,57724,51481],{"class":262},[252,57726,51751],{"class":51440},[252,57728,53626],{"class":2102},[252,57730,308],{"class":262},[252,57732,57733],{"class":367},"\"qs\"",[252,57735,57736],{"class":262},">这里显示姓名\u003C\u002F",[252,57738,51751],{"class":51440},[252,57740,51447],{"class":262},[252,57742,57743,57745,57747],{"class":254,"line":9933},[252,57744,52557],{"class":262},[252,57746,51751],{"class":51440},[252,57748,51447],{"class":262},[252,57750,57751,57753,57755,57757,57759,57762],{"class":254,"line":9938},[252,57752,52284],{"class":262},[252,57754,51751],{"class":51440},[252,57756,53626],{"class":2102},[252,57758,308],{"class":262},[252,57760,57761],{"class":367},"\"btns\"",[252,57763,51447],{"class":262},[252,57765,57766,57768,57770,57772,57774,57777,57780,57782],{"class":254,"line":9943},[252,57767,51481],{"class":262},[252,57769,54027],{"class":51440},[252,57771,53626],{"class":2102},[252,57773,308],{"class":262},[252,57775,57776],{"class":367},"\"start\"",[252,57778,57779],{"class":262},">开始\u003C\u002F",[252,57781,54027],{"class":51440},[252,57783,51447],{"class":262},[252,57785,57786,57788,57790,57792,57794,57797,57800,57802],{"class":254,"line":9952},[252,57787,51481],{"class":262},[252,57789,54027],{"class":51440},[252,57791,53626],{"class":2102},[252,57793,308],{"class":262},[252,57795,57796],{"class":367},"\"end\"",[252,57798,57799],{"class":262},">结束\u003C\u002F",[252,57801,54027],{"class":51440},[252,57803,51447],{"class":262},[252,57805,57806,57808,57810],{"class":254,"line":9957},[252,57807,52557],{"class":262},[252,57809,51751],{"class":51440},[252,57811,51447],{"class":262},[252,57813,57814],{"class":254,"line":9963},[252,57815,2539],{"emptyLinePlaceholder":181},[252,57817,57818,57820,57822],{"class":254,"line":9984},[252,57819,52284],{"class":262},[252,57821,51953],{"class":51440},[252,57823,51447],{"class":262},[252,57825,57826],{"class":254,"line":9990},[252,57827,57828],{"class":321},"    \u002F\u002F 数据数组\n",[252,57830,57831,57833,57836,57838,57840,57843,57845,57848,57850,57853,57855,57858,57860,57863],{"class":254,"line":10004},[252,57832,11361],{"class":258},[252,57834,57835],{"class":311}," arr",[252,57837,13704],{"class":258},[252,57839,52366],{"class":262},[252,57841,57842],{"class":367},"'马超'",[252,57844,12575],{"class":262},[252,57846,57847],{"class":367},"'黄忠'",[252,57849,12575],{"class":262},[252,57851,57852],{"class":367},"'赵云'",[252,57854,12575],{"class":262},[252,57856,57857],{"class":367},"'关羽'",[252,57859,12575],{"class":262},[252,57861,57862],{"class":367},"'张飞'",[252,57864,33386],{"class":262},[252,57866,57867,57869,57872,57874,57876,57878,57880,57883],{"class":254,"line":10010},[252,57868,11361],{"class":258},[252,57870,57871],{"class":311}," qs",[252,57873,13704],{"class":258},[252,57875,54536],{"class":262},[252,57877,54539],{"class":2102},[252,57879,263],{"class":262},[252,57881,57882],{"class":367},"'.qs'",[252,57884,269],{"class":262},[252,57886,57887],{"class":254,"line":10037},[252,57888,57889],{"class":321},"    \u002F\u002F 1.业务1.开始按钮模块\n",[252,57891,57892,57894,57896,57898,57900,57902,57904,57907],{"class":254,"line":10046},[252,57893,11361],{"class":258},[252,57895,4323],{"class":311},[252,57897,13704],{"class":258},[252,57899,54536],{"class":262},[252,57901,54539],{"class":2102},[252,57903,263],{"class":262},[252,57905,57906],{"class":367},"'.start'",[252,57908,269],{"class":262},[252,57910,57911],{"class":254,"line":10052},[252,57912,57913],{"class":321},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[252,57915,57916,57918,57921,57923],{"class":254,"line":10060},[252,57917,52359],{"class":258},[252,57919,57920],{"class":262}," timerId ",[252,57922,308],{"class":258},[252,57924,47473],{"class":311},[252,57926,57927],{"class":254,"line":10065},[252,57928,57929],{"class":321},"    \u002F\u002F 随机号要全局变量\n",[252,57931,57932,57934,57937,57939],{"class":254,"line":16744},[252,57933,52359],{"class":258},[252,57935,57936],{"class":262}," random ",[252,57938,308],{"class":258},[252,57940,47473],{"class":311},[252,57942,57943],{"class":254,"line":16750},[252,57944,57945],{"class":321},"    \u002F\u002F 1.1 添加点击事件\n",[252,57947,57948,57951,57954,57956,57959,57961,57963],{"class":254,"line":16773},[252,57949,57950],{"class":262},"    start.",[252,57952,57953],{"class":2102},"addEventListener",[252,57955,263],{"class":262},[252,57957,57958],{"class":367},"'click'",[252,57960,12575],{"class":262},[252,57962,54589],{"class":258},[252,57964,54592],{"class":262},[252,57966,57967,57970,57972,57974,57976,57978],{"class":254,"line":16779},[252,57968,57969],{"class":262},"      timerId ",[252,57971,308],{"class":258},[252,57973,54584],{"class":2102},[252,57975,263],{"class":262},[252,57977,54589],{"class":258},[252,57979,54592],{"class":262},[252,57981,57982],{"class":254,"line":16802},[252,57983,57984],{"class":321},"        \u002F\u002F 随机数\n",[252,57986,57987,57990,57992,57995,57998,58001,58003,58005,58007,58009],{"class":254,"line":16816},[252,57988,57989],{"class":262},"        random ",[252,57991,308],{"class":258},[252,57993,57994],{"class":2102}," parseInt",[252,57996,57997],{"class":262},"(Math.",[252,57999,58000],{"class":2102},"random",[252,58002,13190],{"class":262},[252,58004,718],{"class":258},[252,58006,52105],{"class":262},[252,58008,52108],{"class":311},[252,58010,269],{"class":262},[252,58012,58013,58016,58018],{"class":254,"line":16836},[252,58014,58015],{"class":262},"        qs.innerHTML ",[252,58017,308],{"class":258},[252,58019,58020],{"class":262}," arr[random]\n",[252,58022,58023,58026,58028],{"class":254,"line":16842},[252,58024,58025],{"class":262},"      }, ",[252,58027,536],{"class":311},[252,58029,269],{"class":262},[252,58031,58032],{"class":254,"line":16853},[252,58033,58034],{"class":321},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[252,58036,58037,58039,58042,58044,58047,58049],{"class":254,"line":16876},[252,58038,54620],{"class":258},[252,58040,58041],{"class":262}," (arr.",[252,58043,52108],{"class":311},[252,58045,58046],{"class":258}," ===",[252,58048,25258],{"class":311},[252,58050,12582],{"class":262},[252,58052,58053],{"class":254,"line":16898},[252,58054,58055],{"class":321},"        \u002F\u002F start.disabled = true\n",[252,58057,58058],{"class":254,"line":16903},[252,58059,58060],{"class":321},"        \u002F\u002F end.disabled = true\n",[252,58062,58063],{"class":254,"line":16909},[252,58064,58065],{"class":321},"        \u002F\u002F 可以合起来写\n",[252,58067,58068,58071,58073,58076,58078],{"class":254,"line":16923},[252,58069,58070],{"class":262},"        start.disabled ",[252,58072,308],{"class":258},[252,58074,58075],{"class":262}," end.disabled ",[252,58077,308],{"class":258},[252,58079,58080],{"class":311}," true\n",[252,58082,58083],{"class":254,"line":16936},[252,58084,52538],{"class":262},[252,58086,58087],{"class":254,"line":16941},[252,58088,33601],{"class":262},[252,58090,58091],{"class":254,"line":16955},[252,58092,58093],{"class":321},"    \u002F\u002F 1.2 关闭按钮模块\n",[252,58095,58096,58098,58100,58102,58104,58106,58108,58111],{"class":254,"line":16960},[252,58097,11361],{"class":258},[252,58099,4339],{"class":311},[252,58101,13704],{"class":258},[252,58103,54536],{"class":262},[252,58105,54539],{"class":2102},[252,58107,263],{"class":262},[252,58109,58110],{"class":367},"'.end'",[252,58112,269],{"class":262},[252,58114,58115,58118,58120,58122,58124,58126,58128],{"class":254,"line":16966},[252,58116,58117],{"class":262},"    end.",[252,58119,57953],{"class":2102},[252,58121,263],{"class":262},[252,58123,57958],{"class":367},[252,58125,12575],{"class":262},[252,58127,54589],{"class":258},[252,58129,54592],{"class":262},[252,58131,58132,58135],{"class":254,"line":16971},[252,58133,58134],{"class":2102},"      clearInterval",[252,58136,58137],{"class":262},"(timerId)\n",[252,58139,58140],{"class":254,"line":16985},[252,58141,58142],{"class":321},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[252,58144,58145,58148,58151,58154,58156],{"class":254,"line":16990},[252,58146,58147],{"class":262},"      arr.",[252,58149,58150],{"class":2102},"splice",[252,58152,58153],{"class":262},"(random, ",[252,58155,480],{"class":311},[252,58157,269],{"class":262},[252,58159,58160],{"class":254,"line":16995},[252,58161,33601],{"class":262},[252,58163,58164],{"class":254,"line":17009},[252,58165,2539],{"emptyLinePlaceholder":181},[252,58167,58168,58170,58172],{"class":254,"line":17021},[252,58169,52557],{"class":262},[252,58171,51953],{"class":51440},[252,58173,51447],{"class":262},[252,58175,58176,58178,58180],{"class":254,"line":17026},[252,58177,51925],{"class":262},[252,58179,51940],{"class":51440},[252,58181,51447],{"class":262},[252,58183,58184],{"class":254,"line":17039},[252,58185,2539],{"emptyLinePlaceholder":181},[252,58187,58188,58190,58192],{"class":254,"line":17044},[252,58189,51925],{"class":262},[252,58191,50775],{"class":51440},[252,58193,51447],{"class":262},[19,58195,58196],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[224,58198,58200],{"id":58199},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[244,58202,58204],{"className":50773,"code":58203,"language":50775,"meta":169,"style":169},"\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",[22,58205,58206,58216,58230,58234,58242,58256,58276,58288,58296,58300,58308,58320,58328,58347,58364,58380,58390,58394,58402,58410,58414],{"__ignoreMap":169},[252,58207,58208,58210,58212,58214],{"class":254,"line":255},[252,58209,51437],{"class":262},[252,58211,51441],{"class":51440},[252,58213,51444],{"class":2102},[252,58215,51447],{"class":262},[252,58217,58218,58220,58222,58224,58226,58228],{"class":254,"line":170},[252,58219,1173],{"class":262},[252,58221,50775],{"class":51440},[252,58223,51456],{"class":2102},[252,58225,308],{"class":262},[252,58227,51461],{"class":367},[252,58229,51447],{"class":262},[252,58231,58232],{"class":254,"line":1318},[252,58233,2539],{"emptyLinePlaceholder":181},[252,58235,58236,58238,58240],{"class":254,"line":1333},[252,58237,1173],{"class":262},[252,58239,51474],{"class":51440},[252,58241,51447],{"class":262},[252,58243,58244,58246,58248,58250,58252,58254],{"class":254,"line":1339},[252,58245,52284],{"class":262},[252,58247,51484],{"class":51440},[252,58249,51487],{"class":2102},[252,58251,308],{"class":262},[252,58253,51492],{"class":367},[252,58255,51447],{"class":262},[252,58257,58258,58260,58262,58264,58266,58268,58270,58272,58274],{"class":254,"line":1353},[252,58259,52284],{"class":262},[252,58261,51484],{"class":51440},[252,58263,15060],{"class":2102},[252,58265,308],{"class":262},[252,58267,51531],{"class":367},[252,58269,51511],{"class":2102},[252,58271,308],{"class":262},[252,58273,51538],{"class":367},[252,58275,51447],{"class":262},[252,58277,58278,58280,58282,58284,58286],{"class":254,"line":1359},[252,58279,52284],{"class":262},[252,58281,51547],{"class":51440},[252,58283,51550],{"class":262},[252,58285,51547],{"class":51440},[252,58287,51447],{"class":262},[252,58289,58290,58292,58294],{"class":254,"line":1450},[252,58291,51925],{"class":262},[252,58293,51474],{"class":51440},[252,58295,51447],{"class":262},[252,58297,58298],{"class":254,"line":1456},[252,58299,2539],{"emptyLinePlaceholder":181},[252,58301,58302,58304,58306],{"class":254,"line":1468},[252,58303,1173],{"class":262},[252,58305,51940],{"class":51440},[252,58307,51447],{"class":262},[252,58309,58310,58312,58314,58316,58318],{"class":254,"line":1751},[252,58311,52284],{"class":262},[252,58313,54027],{"class":51440},[252,58315,54033],{"class":262},[252,58317,54027],{"class":51440},[252,58319,51447],{"class":262},[252,58321,58322,58324,58326],{"class":254,"line":1756},[252,58323,52284],{"class":262},[252,58325,51953],{"class":51440},[252,58327,51447],{"class":262},[252,58329,58330,58332,58334,58336,58338,58340,58342,58345],{"class":254,"line":1762},[252,58331,11361],{"class":258},[252,58333,54531],{"class":311},[252,58335,13704],{"class":258},[252,58337,54536],{"class":262},[252,58339,54539],{"class":2102},[252,58341,263],{"class":262},[252,58343,58344],{"class":367},"'button'",[252,58346,269],{"class":262},[252,58348,58349,58352,58354,58356,58358,58360,58362],{"class":254,"line":1767},[252,58350,58351],{"class":262},"    btn.",[252,58353,57953],{"class":2102},[252,58355,263],{"class":262},[252,58357,57958],{"class":367},[252,58359,12575],{"class":262},[252,58361,54589],{"class":258},[252,58363,54592],{"class":262},[252,58365,58366,58369,58371,58373,58376,58378],{"class":254,"line":1781},[252,58367,58368],{"class":258},"      const",[252,58370,2379],{"class":311},[252,58372,13704],{"class":258},[252,58374,58375],{"class":262}," Math.",[252,58377,58000],{"class":2102},[252,58379,2115],{"class":262},[252,58381,58382,58385,58388],{"class":254,"line":1786},[252,58383,58384],{"class":262},"      console.",[252,58386,58387],{"class":2102},"log",[252,58389,276],{"class":262},[252,58391,58392],{"class":254,"line":1792},[252,58393,33601],{"class":262},[252,58395,58396,58398,58400],{"class":254,"line":1813},[252,58397,52557],{"class":262},[252,58399,51953],{"class":51440},[252,58401,51447],{"class":262},[252,58403,58404,58406,58408],{"class":254,"line":1818},[252,58405,51925],{"class":262},[252,58407,51940],{"class":51440},[252,58409,51447],{"class":262},[252,58411,58412],{"class":254,"line":1832},[252,58413,2539],{"emptyLinePlaceholder":181},[252,58415,58416,58418,58420],{"class":254,"line":1837},[252,58417,51925],{"class":262},[252,58419,50775],{"class":51440},[252,58421,51447],{"class":262},[19,58423,58424],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58426,58427],{},"常量不可以重新赋值",[19,58429,58430],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[244,58432,58434],{"className":50773,"code":58433,"language":50775,"meta":169,"style":169},"\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",[22,58435,58436,58446,58460,58464,58472,58486,58506,58518,58526,58530,58538,58550,58558,58569,58587,58603,58617,58625,58629,58637,58645,58649],{"__ignoreMap":169},[252,58437,58438,58440,58442,58444],{"class":254,"line":255},[252,58439,51437],{"class":262},[252,58441,51441],{"class":51440},[252,58443,51444],{"class":2102},[252,58445,51447],{"class":262},[252,58447,58448,58450,58452,58454,58456,58458],{"class":254,"line":170},[252,58449,1173],{"class":262},[252,58451,50775],{"class":51440},[252,58453,51456],{"class":2102},[252,58455,308],{"class":262},[252,58457,51461],{"class":367},[252,58459,51447],{"class":262},[252,58461,58462],{"class":254,"line":1318},[252,58463,2539],{"emptyLinePlaceholder":181},[252,58465,58466,58468,58470],{"class":254,"line":1333},[252,58467,1173],{"class":262},[252,58469,51474],{"class":51440},[252,58471,51447],{"class":262},[252,58473,58474,58476,58478,58480,58482,58484],{"class":254,"line":1339},[252,58475,52284],{"class":262},[252,58477,51484],{"class":51440},[252,58479,51487],{"class":2102},[252,58481,308],{"class":262},[252,58483,51492],{"class":367},[252,58485,51447],{"class":262},[252,58487,58488,58490,58492,58494,58496,58498,58500,58502,58504],{"class":254,"line":1353},[252,58489,52284],{"class":262},[252,58491,51484],{"class":51440},[252,58493,15060],{"class":2102},[252,58495,308],{"class":262},[252,58497,51531],{"class":367},[252,58499,51511],{"class":2102},[252,58501,308],{"class":262},[252,58503,51538],{"class":367},[252,58505,51447],{"class":262},[252,58507,58508,58510,58512,58514,58516],{"class":254,"line":1359},[252,58509,52284],{"class":262},[252,58511,51547],{"class":51440},[252,58513,51550],{"class":262},[252,58515,51547],{"class":51440},[252,58517,51447],{"class":262},[252,58519,58520,58522,58524],{"class":254,"line":1450},[252,58521,51925],{"class":262},[252,58523,51474],{"class":51440},[252,58525,51447],{"class":262},[252,58527,58528],{"class":254,"line":1456},[252,58529,2539],{"emptyLinePlaceholder":181},[252,58531,58532,58534,58536],{"class":254,"line":1468},[252,58533,1173],{"class":262},[252,58535,51940],{"class":51440},[252,58537,51447],{"class":262},[252,58539,58540,58542,58544,58546,58548],{"class":254,"line":1751},[252,58541,52284],{"class":262},[252,58543,54027],{"class":51440},[252,58545,54033],{"class":262},[252,58547,54027],{"class":51440},[252,58549,51447],{"class":262},[252,58551,58552,58554,58556],{"class":254,"line":1756},[252,58553,52284],{"class":262},[252,58555,51953],{"class":51440},[252,58557,51447],{"class":262},[252,58559,58560,58562,58564,58566],{"class":254,"line":1762},[252,58561,11361],{"class":258},[252,58563,2379],{"class":311},[252,58565,13704],{"class":258},[252,58567,58568],{"class":311}," 10\n",[252,58570,58571,58573,58575,58577,58579,58581,58583,58585],{"class":254,"line":1767},[252,58572,11361],{"class":258},[252,58574,54531],{"class":311},[252,58576,13704],{"class":258},[252,58578,54536],{"class":262},[252,58580,54539],{"class":2102},[252,58582,263],{"class":262},[252,58584,58344],{"class":367},[252,58586,269],{"class":262},[252,58588,58589,58591,58593,58595,58597,58599,58601],{"class":254,"line":1781},[252,58590,58351],{"class":262},[252,58592,57953],{"class":2102},[252,58594,263],{"class":262},[252,58596,57958],{"class":367},[252,58598,12575],{"class":262},[252,58600,54589],{"class":258},[252,58602,54592],{"class":262},[252,58604,58605,58607,58609,58611,58613,58615],{"class":254,"line":1786},[252,58606,58368],{"class":258},[252,58608,2379],{"class":311},[252,58610,13704],{"class":258},[252,58612,58375],{"class":262},[252,58614,58000],{"class":2102},[252,58616,2115],{"class":262},[252,58618,58619,58621,58623],{"class":254,"line":1792},[252,58620,58384],{"class":262},[252,58622,58387],{"class":2102},[252,58624,276],{"class":262},[252,58626,58627],{"class":254,"line":1813},[252,58628,33601],{"class":262},[252,58630,58631,58633,58635],{"class":254,"line":1818},[252,58632,52557],{"class":262},[252,58634,51953],{"class":51440},[252,58636,51447],{"class":262},[252,58638,58639,58641,58643],{"class":254,"line":1832},[252,58640,51925],{"class":262},[252,58642,51940],{"class":51440},[252,58644,51447],{"class":262},[252,58646,58647],{"class":254,"line":1837},[252,58648,2539],{"emptyLinePlaceholder":181},[252,58650,58651,58653,58655],{"class":254,"line":1866},[252,58652,51925],{"class":262},[252,58654,50775],{"class":51440},[252,58656,51447],{"class":262},[19,58658,58659],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[244,58661,58663],{"className":50773,"code":58662,"language":50775,"meta":169,"style":169},"\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",[22,58664,58665,58675,58689,58693,58701,58715,58735,58747,58755,58759,58767,58779,58787,58797,58815,58831,58844,58852,58856,58864,58872,58876],{"__ignoreMap":169},[252,58666,58667,58669,58671,58673],{"class":254,"line":255},[252,58668,51437],{"class":262},[252,58670,51441],{"class":51440},[252,58672,51444],{"class":2102},[252,58674,51447],{"class":262},[252,58676,58677,58679,58681,58683,58685,58687],{"class":254,"line":170},[252,58678,1173],{"class":262},[252,58680,50775],{"class":51440},[252,58682,51456],{"class":2102},[252,58684,308],{"class":262},[252,58686,51461],{"class":367},[252,58688,51447],{"class":262},[252,58690,58691],{"class":254,"line":1318},[252,58692,2539],{"emptyLinePlaceholder":181},[252,58694,58695,58697,58699],{"class":254,"line":1333},[252,58696,1173],{"class":262},[252,58698,51474],{"class":51440},[252,58700,51447],{"class":262},[252,58702,58703,58705,58707,58709,58711,58713],{"class":254,"line":1339},[252,58704,52284],{"class":262},[252,58706,51484],{"class":51440},[252,58708,51487],{"class":2102},[252,58710,308],{"class":262},[252,58712,51492],{"class":367},[252,58714,51447],{"class":262},[252,58716,58717,58719,58721,58723,58725,58727,58729,58731,58733],{"class":254,"line":1353},[252,58718,52284],{"class":262},[252,58720,51484],{"class":51440},[252,58722,15060],{"class":2102},[252,58724,308],{"class":262},[252,58726,51531],{"class":367},[252,58728,51511],{"class":2102},[252,58730,308],{"class":262},[252,58732,51538],{"class":367},[252,58734,51447],{"class":262},[252,58736,58737,58739,58741,58743,58745],{"class":254,"line":1359},[252,58738,52284],{"class":262},[252,58740,51547],{"class":51440},[252,58742,51550],{"class":262},[252,58744,51547],{"class":51440},[252,58746,51447],{"class":262},[252,58748,58749,58751,58753],{"class":254,"line":1450},[252,58750,51925],{"class":262},[252,58752,51474],{"class":51440},[252,58754,51447],{"class":262},[252,58756,58757],{"class":254,"line":1456},[252,58758,2539],{"emptyLinePlaceholder":181},[252,58760,58761,58763,58765],{"class":254,"line":1468},[252,58762,1173],{"class":262},[252,58764,51940],{"class":51440},[252,58766,51447],{"class":262},[252,58768,58769,58771,58773,58775,58777],{"class":254,"line":1751},[252,58770,52284],{"class":262},[252,58772,54027],{"class":51440},[252,58774,54033],{"class":262},[252,58776,54027],{"class":51440},[252,58778,51447],{"class":262},[252,58780,58781,58783,58785],{"class":254,"line":1756},[252,58782,52284],{"class":262},[252,58784,51953],{"class":51440},[252,58786,51447],{"class":262},[252,58788,58789,58791,58793,58795],{"class":254,"line":1762},[252,58790,11361],{"class":258},[252,58792,2379],{"class":311},[252,58794,13704],{"class":258},[252,58796,58568],{"class":311},[252,58798,58799,58801,58803,58805,58807,58809,58811,58813],{"class":254,"line":1767},[252,58800,11361],{"class":258},[252,58802,54531],{"class":311},[252,58804,13704],{"class":258},[252,58806,54536],{"class":262},[252,58808,54539],{"class":2102},[252,58810,263],{"class":262},[252,58812,58344],{"class":367},[252,58814,269],{"class":262},[252,58816,58817,58819,58821,58823,58825,58827,58829],{"class":254,"line":1781},[252,58818,58351],{"class":262},[252,58820,57953],{"class":2102},[252,58822,263],{"class":262},[252,58824,57958],{"class":367},[252,58826,12575],{"class":262},[252,58828,54589],{"class":258},[252,58830,54592],{"class":262},[252,58832,58833,58836,58838,58840,58842],{"class":254,"line":1786},[252,58834,58835],{"class":262},"      num ",[252,58837,308],{"class":258},[252,58839,58375],{"class":262},[252,58841,58000],{"class":2102},[252,58843,2115],{"class":262},[252,58845,58846,58848,58850],{"class":254,"line":1792},[252,58847,58384],{"class":262},[252,58849,58387],{"class":2102},[252,58851,276],{"class":262},[252,58853,58854],{"class":254,"line":1813},[252,58855,33601],{"class":262},[252,58857,58858,58860,58862],{"class":254,"line":1818},[252,58859,52557],{"class":262},[252,58861,51953],{"class":51440},[252,58863,51447],{"class":262},[252,58865,58866,58868,58870],{"class":254,"line":1832},[252,58867,51925],{"class":262},[252,58869,51940],{"class":51440},[252,58871,51447],{"class":262},[252,58873,58874],{"class":254,"line":1837},[252,58875,2539],{"emptyLinePlaceholder":181},[252,58877,58878,58880,58882],{"class":254,"line":1866},[252,58879,51925],{"class":262},[252,58881,50775],{"class":51440},[252,58883,51447],{"class":262},[19,58885,58886],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[224,58888,58890],{"id":58889},"_324-事件监听版本","3.2.4 事件监听版本",[19,58892,58893],{},[1601,58894],{"alt":169,"src":58895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,58897,58898],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,58900,58901],{},"这种方式会覆盖前边的事件监听:",[244,58903,58905],{"className":50773,"code":58904,"language":50775,"meta":169,"style":169},"\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",[22,58906,58907,58917,58931,58935,58943,58957,58977,58989,58997,59001,59009,59021,59029,59047,59061,59072,59076,59088,59098,59102,59110,59118,59122],{"__ignoreMap":169},[252,58908,58909,58911,58913,58915],{"class":254,"line":255},[252,58910,51437],{"class":262},[252,58912,51441],{"class":51440},[252,58914,51444],{"class":2102},[252,58916,51447],{"class":262},[252,58918,58919,58921,58923,58925,58927,58929],{"class":254,"line":170},[252,58920,1173],{"class":262},[252,58922,50775],{"class":51440},[252,58924,51456],{"class":2102},[252,58926,308],{"class":262},[252,58928,51461],{"class":367},[252,58930,51447],{"class":262},[252,58932,58933],{"class":254,"line":1318},[252,58934,2539],{"emptyLinePlaceholder":181},[252,58936,58937,58939,58941],{"class":254,"line":1333},[252,58938,1173],{"class":262},[252,58940,51474],{"class":51440},[252,58942,51447],{"class":262},[252,58944,58945,58947,58949,58951,58953,58955],{"class":254,"line":1339},[252,58946,52284],{"class":262},[252,58948,51484],{"class":51440},[252,58950,51487],{"class":2102},[252,58952,308],{"class":262},[252,58954,51492],{"class":367},[252,58956,51447],{"class":262},[252,58958,58959,58961,58963,58965,58967,58969,58971,58973,58975],{"class":254,"line":1353},[252,58960,52284],{"class":262},[252,58962,51484],{"class":51440},[252,58964,15060],{"class":2102},[252,58966,308],{"class":262},[252,58968,51531],{"class":367},[252,58970,51511],{"class":2102},[252,58972,308],{"class":262},[252,58974,51538],{"class":367},[252,58976,51447],{"class":262},[252,58978,58979,58981,58983,58985,58987],{"class":254,"line":1359},[252,58980,52284],{"class":262},[252,58982,51547],{"class":51440},[252,58984,51550],{"class":262},[252,58986,51547],{"class":51440},[252,58988,51447],{"class":262},[252,58990,58991,58993,58995],{"class":254,"line":1450},[252,58992,51925],{"class":262},[252,58994,51474],{"class":51440},[252,58996,51447],{"class":262},[252,58998,58999],{"class":254,"line":1456},[252,59000,2539],{"emptyLinePlaceholder":181},[252,59002,59003,59005,59007],{"class":254,"line":1468},[252,59004,1173],{"class":262},[252,59006,51940],{"class":51440},[252,59008,51447],{"class":262},[252,59010,59011,59013,59015,59017,59019],{"class":254,"line":1751},[252,59012,52284],{"class":262},[252,59014,54027],{"class":51440},[252,59016,54033],{"class":262},[252,59018,54027],{"class":51440},[252,59020,51447],{"class":262},[252,59022,59023,59025,59027],{"class":254,"line":1756},[252,59024,52284],{"class":262},[252,59026,51953],{"class":51440},[252,59028,51447],{"class":262},[252,59030,59031,59033,59035,59037,59039,59041,59043,59045],{"class":254,"line":1762},[252,59032,11361],{"class":258},[252,59034,54531],{"class":311},[252,59036,13704],{"class":258},[252,59038,54536],{"class":262},[252,59040,54539],{"class":2102},[252,59042,263],{"class":262},[252,59044,58344],{"class":367},[252,59046,269],{"class":262},[252,59048,59049,59051,59054,59056,59059],{"class":254,"line":1767},[252,59050,58351],{"class":262},[252,59052,59053],{"class":2102},"onclick",[252,59055,13704],{"class":258},[252,59057,59058],{"class":258}," function",[252,59060,54592],{"class":262},[252,59062,59063,59066,59068,59070],{"class":254,"line":1781},[252,59064,59065],{"class":2102},"      alert",[252,59067,263],{"class":262},[252,59069,735],{"class":311},[252,59071,269],{"class":262},[252,59073,59074],{"class":254,"line":1786},[252,59075,2326],{"class":262},[252,59077,59078,59080,59082,59084,59086],{"class":254,"line":1792},[252,59079,58351],{"class":262},[252,59081,59053],{"class":2102},[252,59083,13704],{"class":258},[252,59085,59058],{"class":258},[252,59087,54592],{"class":262},[252,59089,59090,59092,59094,59096],{"class":254,"line":1813},[252,59091,59065],{"class":2102},[252,59093,263],{"class":262},[252,59095,1013],{"class":311},[252,59097,269],{"class":262},[252,59099,59100],{"class":254,"line":1818},[252,59101,2326],{"class":262},[252,59103,59104,59106,59108],{"class":254,"line":1832},[252,59105,52557],{"class":262},[252,59107,51953],{"class":51440},[252,59109,51447],{"class":262},[252,59111,59112,59114,59116],{"class":254,"line":1837},[252,59113,51925],{"class":262},[252,59115,51940],{"class":51440},[252,59117,51447],{"class":262},[252,59119,59120],{"class":254,"line":1866},[252,59121,2539],{"emptyLinePlaceholder":181},[252,59123,59124,59126,59128],{"class":254,"line":1871},[252,59125,51925],{"class":262},[252,59127,50775],{"class":51440},[252,59129,51447],{"class":262},[19,59131,59132],{},"只要点击就输出结果为22,前边11被覆盖了",[244,59134,59136],{"className":50773,"code":59135,"language":50775,"meta":169,"style":169},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[22,59137,59138,59143,59148,59152,59157,59162],{"__ignoreMap":169},[252,59139,59140],{"class":254,"line":255},[252,59141,59142],{"class":262},"  btn.addEventListener('click', function () {\n",[252,59144,59145],{"class":254,"line":170},[252,59146,59147],{"class":262},"      alert(11)\n",[252,59149,59150],{"class":254,"line":1318},[252,59151,33601],{"class":262},[252,59153,59154],{"class":254,"line":1333},[252,59155,59156],{"class":262},"    btn.addEventListener('click', function () {\n",[252,59158,59159],{"class":254,"line":1339},[252,59160,59161],{"class":262},"      alert(22)\n",[252,59163,59164],{"class":254,"line":1353},[252,59165,33601],{"class":262},[19,59167,59168],{},"点击第一次输出11,第二次点击为22",[224,59170,59172],{"id":59171},"_325-事件类型","3.2.5 事件类型",[19,59174,59175],{},[1601,59176],{"alt":169,"src":59177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22137,59179,59181],{"id":59180},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59183,59184],{},"补充知识:",[19,59186,59187],{},"轮播图自动播放模块,可以使用",[19,59189,59190],{},"let timerId = setInterval(function () {",[19,59192,59193],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59195,59196],{},"用js方法模拟进行点击事件,click必须加()",[19,59198,59199],{},"next.click()",[19,59201,59202],{},"}, 1000)",[19,59204,59205],{},[1601,59206],{"alt":169,"src":59207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[244,59209,59211],{"className":53207,"code":59210,"language":53209,"meta":169,"style":169},"\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",[22,59212,59213,59217,59227,59241,59245,59253,59268,59288,59308,59321,59329,59334,59339,59343,59347,59352,59357,59362,59367,59371,59375,59380,59385,59390,59394,59398,59403,59407,59412,59417,59421,59425,59430,59435,59440,59445,59450,59454,59458,59463,59468,59473,59478,59483,59487,59491,59496,59501,59506,59511,59516,59521,59526,59531,59536,59541,59545,59549,59554,59559,59563,59567,59572,59577,59581,59586,59591,59595,59599,59604,59608,59613,59618,59622,59627,59631,59635,59640,59645,59650,59655,59660,59665,59670,59674,59678,59682,59687,59692,59697,59702,59706,59714,59722,59726,59734,59749,59763,59784,59792,59806,59819,59834,59853,59865,59877,59889,59901,59913,59925,59937,59945,59960,59984,60008,60016,60024,60032,60040,60045,60050,60055,60060,60065,60070,60075,60080,60085,60090,60094,60099,60104,60109,60114,60119,60124,60129,60134,60139,60143,60148,60153,60158,60163,60168,60173,60178,60183,60188,60193,60198,60203,60207,60211,60216,60221,60226,60230,60235,60240,60245,60250,60255,60259,60264,60268,60272,60276,60280,60284,60288,60293,60298,60303,60308,60313,60318,60323,60328,60333,60337,60341,60346,60351,60356,60361,60366,60370,60375,60380,60385,60390,60395,60400,60404,60408,60413,60417,60422,60426,60431,60436,60441,60446,60451,60456,60460,60468,60476,60480],{"__ignoreMap":169},[252,59214,59215],{"class":254,"line":255},[252,59216,2539],{"emptyLinePlaceholder":181},[252,59218,59219,59221,59223,59225],{"class":254,"line":170},[252,59220,51437],{"class":262},[252,59222,51441],{"class":258},[252,59224,51444],{"class":311},[252,59226,51447],{"class":262},[252,59228,59229,59231,59233,59235,59237,59239],{"class":254,"line":1318},[252,59230,1173],{"class":262},[252,59232,50775],{"class":51440},[252,59234,51456],{"class":2102},[252,59236,308],{"class":262},[252,59238,51461],{"class":367},[252,59240,51447],{"class":262},[252,59242,59243],{"class":254,"line":1333},[252,59244,2539],{"emptyLinePlaceholder":181},[252,59246,59247,59249,59251],{"class":254,"line":1339},[252,59248,1173],{"class":262},[252,59250,51474],{"class":51440},[252,59252,51447],{"class":262},[252,59254,59255,59257,59259,59261,59263,59265],{"class":254,"line":1353},[252,59256,52284],{"class":262},[252,59258,51484],{"class":51440},[252,59260,51487],{"class":2102},[252,59262,308],{"class":262},[252,59264,51492],{"class":367},[252,59266,59267],{"class":262}," \u002F>\n",[252,59269,59270,59272,59274,59276,59278,59280,59282,59284,59286],{"class":254,"line":1359},[252,59271,52284],{"class":262},[252,59273,51484],{"class":51440},[252,59275,51503],{"class":2102},[252,59277,308],{"class":262},[252,59279,51508],{"class":367},[252,59281,51511],{"class":2102},[252,59283,308],{"class":262},[252,59285,51516],{"class":367},[252,59287,59267],{"class":262},[252,59289,59290,59292,59294,59296,59298,59300,59302,59304,59306],{"class":254,"line":1450},[252,59291,52284],{"class":262},[252,59293,51484],{"class":51440},[252,59295,15060],{"class":2102},[252,59297,308],{"class":262},[252,59299,51531],{"class":367},[252,59301,51511],{"class":2102},[252,59303,308],{"class":262},[252,59305,51538],{"class":367},[252,59307,59267],{"class":262},[252,59309,59310,59312,59314,59317,59319],{"class":254,"line":1456},[252,59311,52284],{"class":262},[252,59313,51547],{"class":51440},[252,59315,59316],{"class":262},">轮播图点击切换\u003C\u002F",[252,59318,51547],{"class":51440},[252,59320,51447],{"class":262},[252,59322,59323,59325,59327],{"class":254,"line":1468},[252,59324,52284],{"class":262},[252,59326,5266],{"class":51440},[252,59328,51447],{"class":262},[252,59330,59331],{"class":254,"line":1751},[252,59332,59333],{"class":262},"    * {\n",[252,59335,59336],{"class":254,"line":1756},[252,59337,59338],{"class":262},"      box-sizing: border-box;\n",[252,59340,59341],{"class":254,"line":1762},[252,59342,2326],{"class":262},[252,59344,59345],{"class":254,"line":1767},[252,59346,2539],{"emptyLinePlaceholder":181},[252,59348,59349],{"class":254,"line":1781},[252,59350,59351],{"class":262},"    .slider {\n",[252,59353,59354],{"class":254,"line":1786},[252,59355,59356],{"class":262},"      width: 560px;\n",[252,59358,59359],{"class":254,"line":1792},[252,59360,59361],{"class":262},"      height: 400px;\n",[252,59363,59364],{"class":254,"line":1813},[252,59365,59366],{"class":262},"      overflow: hidden;\n",[252,59368,59369],{"class":254,"line":1818},[252,59370,2326],{"class":262},[252,59372,59373],{"class":254,"line":1832},[252,59374,2539],{"emptyLinePlaceholder":181},[252,59376,59377],{"class":254,"line":1837},[252,59378,59379],{"class":262},"    .slider-wrapper {\n",[252,59381,59382],{"class":254,"line":1866},[252,59383,59384],{"class":262},"      width: 100%;\n",[252,59386,59387],{"class":254,"line":1871},[252,59388,59389],{"class":262},"      height: 320px;\n",[252,59391,59392],{"class":254,"line":1888},[252,59393,2326],{"class":262},[252,59395,59396],{"class":254,"line":1893},[252,59397,2539],{"emptyLinePlaceholder":181},[252,59399,59400],{"class":254,"line":1898},[252,59401,59402],{"class":262},"    .slider-wrapper img {\n",[252,59404,59405],{"class":254,"line":1903},[252,59406,59384],{"class":262},[252,59408,59409],{"class":254,"line":1917},[252,59410,59411],{"class":262},"      height: 100%;\n",[252,59413,59414],{"class":254,"line":1922},[252,59415,59416],{"class":262},"      display: block;\n",[252,59418,59419],{"class":254,"line":2716},[252,59420,2326],{"class":262},[252,59422,59423],{"class":254,"line":2730},[252,59424,2539],{"emptyLinePlaceholder":181},[252,59426,59427],{"class":254,"line":2738},[252,59428,59429],{"class":262},"    .slider-footer {\n",[252,59431,59432],{"class":254,"line":2743},[252,59433,59434],{"class":262},"      height: 80px;\n",[252,59436,59437],{"class":254,"line":2749},[252,59438,59439],{"class":262},"      background-color: rgb(100, 67, 68);\n",[252,59441,59442],{"class":254,"line":2755},[252,59443,59444],{"class":262},"      padding: 12px 12px 0 12px;\n",[252,59446,59447],{"class":254,"line":2760},[252,59448,59449],{"class":262},"      position: relative;\n",[252,59451,59452],{"class":254,"line":8088},[252,59453,2326],{"class":262},[252,59455,59456],{"class":254,"line":8112},[252,59457,2539],{"emptyLinePlaceholder":181},[252,59459,59460],{"class":254,"line":8117},[252,59461,59462],{"class":262},"    .slider-footer .toggle {\n",[252,59464,59465],{"class":254,"line":8123},[252,59466,59467],{"class":262},"      position: absolute;\n",[252,59469,59470],{"class":254,"line":8150},[252,59471,59472],{"class":262},"      right: 0;\n",[252,59474,59475],{"class":254,"line":8155},[252,59476,59477],{"class":262},"      top: 12px;\n",[252,59479,59480],{"class":254,"line":8161},[252,59481,59482],{"class":262},"      display: flex;\n",[252,59484,59485],{"class":254,"line":8173},[252,59486,2326],{"class":262},[252,59488,59489],{"class":254,"line":8185},[252,59490,2539],{"emptyLinePlaceholder":181},[252,59492,59493],{"class":254,"line":8197},[252,59494,59495],{"class":262},"    .slider-footer .toggle button {\n",[252,59497,59498],{"class":254,"line":9856},[252,59499,59500],{"class":262},"      margin-right: 12px;\n",[252,59502,59503],{"class":254,"line":9881},[252,59504,59505],{"class":262},"      width: 28px;\n",[252,59507,59508],{"class":254,"line":9904},[252,59509,59510],{"class":262},"      height: 28px;\n",[252,59512,59513],{"class":254,"line":9928},[252,59514,59515],{"class":262},"      appearance: none;\n",[252,59517,59518],{"class":254,"line":9933},[252,59519,59520],{"class":262},"      border: none;\n",[252,59522,59523],{"class":254,"line":9938},[252,59524,59525],{"class":262},"      background: rgba(255, 255, 255, 0.1);\n",[252,59527,59528],{"class":254,"line":9943},[252,59529,59530],{"class":262},"      color: #fff;\n",[252,59532,59533],{"class":254,"line":9952},[252,59534,59535],{"class":262},"      border-radius: 4px;\n",[252,59537,59538],{"class":254,"line":9957},[252,59539,59540],{"class":262},"      cursor: pointer;\n",[252,59542,59543],{"class":254,"line":9963},[252,59544,2326],{"class":262},[252,59546,59547],{"class":254,"line":9984},[252,59548,2539],{"emptyLinePlaceholder":181},[252,59550,59551],{"class":254,"line":9990},[252,59552,59553],{"class":262},"    .slider-footer .toggle button:hover {\n",[252,59555,59556],{"class":254,"line":10004},[252,59557,59558],{"class":262},"      background: rgba(255, 255, 255, 0.2);\n",[252,59560,59561],{"class":254,"line":10010},[252,59562,2326],{"class":262},[252,59564,59565],{"class":254,"line":10037},[252,59566,2539],{"emptyLinePlaceholder":181},[252,59568,59569],{"class":254,"line":10046},[252,59570,59571],{"class":262},"    .slider-footer p {\n",[252,59573,59574],{"class":254,"line":10052},[252,59575,59576],{"class":262},"      margin: 0;\n",[252,59578,59579],{"class":254,"line":10060},[252,59580,59530],{"class":262},[252,59582,59583],{"class":254,"line":10065},[252,59584,59585],{"class":262},"      font-size: 18px;\n",[252,59587,59588],{"class":254,"line":16744},[252,59589,59590],{"class":262},"      margin-bottom: 10px;\n",[252,59592,59593],{"class":254,"line":16750},[252,59594,2326],{"class":262},[252,59596,59597],{"class":254,"line":16773},[252,59598,2539],{"emptyLinePlaceholder":181},[252,59600,59601],{"class":254,"line":16779},[252,59602,59603],{"class":262},"    .slider-indicator {\n",[252,59605,59606],{"class":254,"line":16802},[252,59607,59576],{"class":262},[252,59609,59610],{"class":254,"line":16816},[252,59611,59612],{"class":262},"      padding: 0;\n",[252,59614,59615],{"class":254,"line":16836},[252,59616,59617],{"class":262},"      list-style: none;\n",[252,59619,59620],{"class":254,"line":16842},[252,59621,59482],{"class":262},[252,59623,59624],{"class":254,"line":16853},[252,59625,59626],{"class":262},"      align-items: center;\n",[252,59628,59629],{"class":254,"line":16876},[252,59630,2326],{"class":262},[252,59632,59633],{"class":254,"line":16898},[252,59634,2539],{"emptyLinePlaceholder":181},[252,59636,59637],{"class":254,"line":16903},[252,59638,59639],{"class":262},"    .slider-indicator li {\n",[252,59641,59642],{"class":254,"line":16909},[252,59643,59644],{"class":262},"      width: 8px;\n",[252,59646,59647],{"class":254,"line":16923},[252,59648,59649],{"class":262},"      height: 8px;\n",[252,59651,59652],{"class":254,"line":16936},[252,59653,59654],{"class":262},"      margin: 4px;\n",[252,59656,59657],{"class":254,"line":16941},[252,59658,59659],{"class":262},"      border-radius: 50%;\n",[252,59661,59662],{"class":254,"line":16955},[252,59663,59664],{"class":262},"      background: #fff;\n",[252,59666,59667],{"class":254,"line":16960},[252,59668,59669],{"class":262},"      opacity: 0.4;\n",[252,59671,59672],{"class":254,"line":16966},[252,59673,59540],{"class":262},[252,59675,59676],{"class":254,"line":16971},[252,59677,2326],{"class":262},[252,59679,59680],{"class":254,"line":16985},[252,59681,2539],{"emptyLinePlaceholder":181},[252,59683,59684],{"class":254,"line":16990},[252,59685,59686],{"class":262},"    .slider-indicator li.active {\n",[252,59688,59689],{"class":254,"line":16995},[252,59690,59691],{"class":262},"      width: 12px;\n",[252,59693,59694],{"class":254,"line":17009},[252,59695,59696],{"class":262},"      height: 12px;\n",[252,59698,59699],{"class":254,"line":17021},[252,59700,59701],{"class":262},"      opacity: 1;\n",[252,59703,59704],{"class":254,"line":17026},[252,59705,2326],{"class":262},[252,59707,59708,59710,59712],{"class":254,"line":17039},[252,59709,52557],{"class":262},[252,59711,5266],{"class":51440},[252,59713,51447],{"class":262},[252,59715,59716,59718,59720],{"class":254,"line":17044},[252,59717,51925],{"class":262},[252,59719,51474],{"class":51440},[252,59721,51447],{"class":262},[252,59723,59724],{"class":254,"line":17049},[252,59725,2539],{"emptyLinePlaceholder":181},[252,59727,59728,59730,59732],{"class":254,"line":17054},[252,59729,1173],{"class":262},[252,59731,51940],{"class":51440},[252,59733,51447],{"class":262},[252,59735,59736,59738,59740,59742,59744,59747],{"class":254,"line":17067},[252,59737,52284],{"class":262},[252,59739,51751],{"class":51440},[252,59741,53626],{"class":2102},[252,59743,308],{"class":262},[252,59745,59746],{"class":367},"\"slider\"",[252,59748,51447],{"class":262},[252,59750,59751,59753,59755,59757,59759,59761],{"class":254,"line":17072},[252,59752,51481],{"class":262},[252,59754,51751],{"class":51440},[252,59756,53626],{"class":2102},[252,59758,308],{"class":262},[252,59760,55367],{"class":367},[252,59762,51447],{"class":262},[252,59764,59765,59767,59769,59771,59773,59776,59778,59780,59782],{"class":254,"line":32773},[252,59766,55374],{"class":262},[252,59768,1601],{"class":51440},[252,59770,55379],{"class":2102},[252,59772,308],{"class":262},[252,59774,59775],{"class":367},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[252,59777,55387],{"class":2102},[252,59779,308],{"class":262},[252,59781,7792],{"class":367},[252,59783,59267],{"class":262},[252,59785,59786,59788,59790],{"class":254,"line":32779},[252,59787,51916],{"class":262},[252,59789,51751],{"class":51440},[252,59791,51447],{"class":262},[252,59793,59794,59796,59798,59800,59802,59804],{"class":254,"line":32785},[252,59795,51481],{"class":262},[252,59797,51751],{"class":51440},[252,59799,53626],{"class":2102},[252,59801,308],{"class":262},[252,59803,55414],{"class":367},[252,59805,51447],{"class":262},[252,59807,59808,59810,59812,59815,59817],{"class":254,"line":32791},[252,59809,55374],{"class":262},[252,59811,19],{"class":51440},[252,59813,59814],{"class":262},">对人类来说会不会太超前了？\u003C\u002F",[252,59816,19],{"class":51440},[252,59818,51447],{"class":262},[252,59820,59821,59823,59825,59827,59829,59832],{"class":254,"line":32797},[252,59822,55374],{"class":262},[252,59824,1270],{"class":51440},[252,59826,53626],{"class":2102},[252,59828,308],{"class":262},[252,59830,59831],{"class":367},"\"slider-indicator\"",[252,59833,51447],{"class":262},[252,59835,59836,59838,59840,59842,59844,59847,59849,59851],{"class":254,"line":32808},[252,59837,55442],{"class":262},[252,59839,210],{"class":51440},[252,59841,53626],{"class":2102},[252,59843,308],{"class":262},[252,59845,59846],{"class":367},"\"active\"",[252,59848,55454],{"class":262},[252,59850,210],{"class":51440},[252,59852,51447],{"class":262},[252,59854,59855,59857,59859,59861,59863],{"class":254,"line":32814},[252,59856,55442],{"class":262},[252,59858,210],{"class":51440},[252,59860,55454],{"class":262},[252,59862,210],{"class":51440},[252,59864,51447],{"class":262},[252,59866,59867,59869,59871,59873,59875],{"class":254,"line":32834},[252,59868,55442],{"class":262},[252,59870,210],{"class":51440},[252,59872,55454],{"class":262},[252,59874,210],{"class":51440},[252,59876,51447],{"class":262},[252,59878,59879,59881,59883,59885,59887],{"class":254,"line":32840},[252,59880,55442],{"class":262},[252,59882,210],{"class":51440},[252,59884,55454],{"class":262},[252,59886,210],{"class":51440},[252,59888,51447],{"class":262},[252,59890,59891,59893,59895,59897,59899],{"class":254,"line":32851},[252,59892,55442],{"class":262},[252,59894,210],{"class":51440},[252,59896,55454],{"class":262},[252,59898,210],{"class":51440},[252,59900,51447],{"class":262},[252,59902,59903,59905,59907,59909,59911],{"class":254,"line":32857},[252,59904,55442],{"class":262},[252,59906,210],{"class":51440},[252,59908,55454],{"class":262},[252,59910,210],{"class":51440},[252,59912,51447],{"class":262},[252,59914,59915,59917,59919,59921,59923],{"class":254,"line":32863},[252,59916,55442],{"class":262},[252,59918,210],{"class":51440},[252,59920,55454],{"class":262},[252,59922,210],{"class":51440},[252,59924,51447],{"class":262},[252,59926,59927,59929,59931,59933,59935],{"class":254,"line":32869},[252,59928,55442],{"class":262},[252,59930,210],{"class":51440},[252,59932,55454],{"class":262},[252,59934,210],{"class":51440},[252,59936,51447],{"class":262},[252,59938,59939,59941,59943],{"class":254,"line":32875},[252,59940,55547],{"class":262},[252,59942,1270],{"class":51440},[252,59944,51447],{"class":262},[252,59946,59947,59949,59951,59953,59955,59958],{"class":254,"line":32881},[252,59948,55374],{"class":262},[252,59950,51751],{"class":51440},[252,59952,53626],{"class":2102},[252,59954,308],{"class":262},[252,59956,59957],{"class":367},"\"toggle\"",[252,59959,51447],{"class":262},[252,59961,59962,59964,59966,59968,59970,59973,59975,59978,59980,59982],{"class":254,"line":32887},[252,59963,55442],{"class":262},[252,59965,54027],{"class":51440},[252,59967,53626],{"class":2102},[252,59969,308],{"class":262},[252,59971,59972],{"class":367},"\"prev\"",[252,59974,1223],{"class":262},[252,59976,59977],{"class":311},"&lt;",[252,59979,51925],{"class":262},[252,59981,54027],{"class":51440},[252,59983,51447],{"class":262},[252,59985,59986,59988,59990,59992,59994,59997,59999,60002,60004,60006],{"class":254,"line":32893},[252,59987,55442],{"class":262},[252,59989,54027],{"class":51440},[252,59991,53626],{"class":2102},[252,59993,308],{"class":262},[252,59995,59996],{"class":367},"\"next\"",[252,59998,1223],{"class":262},[252,60000,60001],{"class":311},"&gt;",[252,60003,51925],{"class":262},[252,60005,54027],{"class":51440},[252,60007,51447],{"class":262},[252,60009,60010,60012,60014],{"class":254,"line":32913},[252,60011,55547],{"class":262},[252,60013,51751],{"class":51440},[252,60015,51447],{"class":262},[252,60017,60018,60020,60022],{"class":254,"line":32919},[252,60019,51916],{"class":262},[252,60021,51751],{"class":51440},[252,60023,51447],{"class":262},[252,60025,60026,60028,60030],{"class":254,"line":32935},[252,60027,52557],{"class":262},[252,60029,51751],{"class":51440},[252,60031,51447],{"class":262},[252,60033,60034,60036,60038],{"class":254,"line":32941},[252,60035,52284],{"class":262},[252,60037,51953],{"class":51440},[252,60039,51447],{"class":262},[252,60041,60042],{"class":254,"line":32955},[252,60043,60044],{"class":262},"    \u002F\u002F 1. 初始数据\n",[252,60046,60047],{"class":254,"line":32961},[252,60048,60049],{"class":262},"    const data = [\n",[252,60051,60052],{"class":254,"line":32976},[252,60053,60054],{"class":262},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[252,60056,60057],{"class":254,"line":32982},[252,60058,60059],{"class":262},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[252,60061,60062],{"class":254,"line":32991},[252,60063,60064],{"class":262},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[252,60066,60067],{"class":254,"line":32997},[252,60068,60069],{"class":262},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[252,60071,60072],{"class":254,"line":33006},[252,60073,60074],{"class":262},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[252,60076,60077],{"class":254,"line":33012},[252,60078,60079],{"class":262},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[252,60081,60082],{"class":254,"line":33018},[252,60083,60084],{"class":262},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[252,60086,60087],{"class":254,"line":33027},[252,60088,60089],{"class":262},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[252,60091,60092],{"class":254,"line":33033},[252,60093,53249],{"class":262},[252,60095,60096],{"class":254,"line":33044},[252,60097,60098],{"class":262},"    \u002F\u002F 获取元素\n",[252,60100,60101],{"class":254,"line":33050},[252,60102,60103],{"class":262},"    const img = document.querySelector('.slider-wrapper img')\n",[252,60105,60106],{"class":254,"line":33069},[252,60107,60108],{"class":262},"    const p = document.querySelector('.slider-footer p')\n",[252,60110,60111],{"class":254,"line":33075},[252,60112,60113],{"class":262},"    const footer = document.querySelector('.slider-footer')\n",[252,60115,60116],{"class":254,"line":33086},[252,60117,60118],{"class":262},"    \u002F\u002F 1. 右按钮业务\n",[252,60120,60121],{"class":254,"line":33092},[252,60122,60123],{"class":262},"    \u002F\u002F 1.1 获取右侧按钮 \n",[252,60125,60126],{"class":254,"line":33112},[252,60127,60128],{"class":262},"    const next = document.querySelector('.next')\n",[252,60130,60131],{"class":254,"line":33128},[252,60132,60133],{"class":262},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[252,60135,60136],{"class":254,"line":33134},[252,60137,60138],{"class":262},"    \u002F\u002F 1.2 注册点击事件\n",[252,60140,60141],{"class":254,"line":33148},[252,60142,2539],{"emptyLinePlaceholder":181},[252,60144,60145],{"class":254,"line":33154},[252,60146,60147],{"class":262},"    next.addEventListener('click', function () {\n",[252,60149,60150],{"class":254,"line":33160},[252,60151,60152],{"class":262},"      \u002F\u002F console.log(11)\n",[252,60154,60155],{"class":254,"line":33171},[252,60156,60157],{"class":262},"      i++\n",[252,60159,60160],{"class":254,"line":33177},[252,60161,60162],{"class":262},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[252,60164,60165],{"class":254,"line":33183},[252,60166,60167],{"class":262},"      \u002F\u002F if (i >= 8) {\n",[252,60169,60170],{"class":254,"line":33193},[252,60171,60172],{"class":262},"      \u002F\u002F   i = 0\n",[252,60174,60175],{"class":254,"line":33199},[252,60176,60177],{"class":262},"      \u002F\u002F }\n",[252,60179,60180],{"class":254,"line":33210},[252,60181,60182],{"class":262},"      i = i >= data.length ? 0 : i\n",[252,60184,60185],{"class":254,"line":33216},[252,60186,60187],{"class":262},"      \u002F\u002F 1.3 得到对应的对象\n",[252,60189,60190],{"class":254,"line":33226},[252,60191,60192],{"class":262},"      \u002F\u002F console.log(data[i])\n",[252,60194,60195],{"class":254,"line":33231},[252,60196,60197],{"class":262},"      \u002F\u002F 调用函数\n",[252,60199,60200],{"class":254,"line":33237},[252,60201,60202],{"class":262},"      toggle()\n",[252,60204,60205],{"class":254,"line":33286},[252,60206,33601],{"class":262},[252,60208,60209],{"class":254,"line":33333},[252,60210,2539],{"emptyLinePlaceholder":181},[252,60212,60213],{"class":254,"line":33338},[252,60214,60215],{"class":262},"    \u002F\u002F 2. 左侧按钮业务\n",[252,60217,60218],{"class":254,"line":33344},[252,60219,60220],{"class":262},"    \u002F\u002F 2.1 获取左侧按钮 \n",[252,60222,60223],{"class":254,"line":33363},[252,60224,60225],{"class":262},"    const prev = document.querySelector('.prev')\n",[252,60227,60228],{"class":254,"line":33369},[252,60229,60138],{"class":262},[252,60231,60232],{"class":254,"line":33389},[252,60233,60234],{"class":262},"    prev.addEventListener('click', function () {\n",[252,60236,60237],{"class":254,"line":33395},[252,60238,60239],{"class":262},"      i--\n",[252,60241,60242],{"class":254,"line":33401},[252,60243,60244],{"class":262},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[252,60246,60247],{"class":254,"line":33411},[252,60248,60249],{"class":262},"      \u002F\u002F if (i \u003C 0) {\n",[252,60251,60252],{"class":254,"line":33416},[252,60253,60254],{"class":262},"      \u002F\u002F   i = 7\n",[252,60256,60257],{"class":254,"line":33422},[252,60258,60177],{"class":262},[252,60260,60261],{"class":254,"line":33438},[252,60262,60263],{"class":262},"      i = i \u003C 0 ? data.length - 1 : i\n",[252,60265,60266],{"class":254,"line":33483},[252,60267,60187],{"class":262},[252,60269,60270],{"class":254,"line":33489},[252,60271,60192],{"class":262},[252,60273,60274],{"class":254,"line":33495},[252,60275,60197],{"class":262},[252,60277,60278],{"class":254,"line":33501},[252,60279,60202],{"class":262},[252,60281,60282],{"class":254,"line":33512},[252,60283,33601],{"class":262},[252,60285,60286],{"class":254,"line":33518},[252,60287,2539],{"emptyLinePlaceholder":181},[252,60289,60290],{"class":254,"line":33524},[252,60291,60292],{"class":262},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[252,60294,60295],{"class":254,"line":33530},[252,60296,60297],{"class":262},"    function toggle() {\n",[252,60299,60300],{"class":254,"line":33548},[252,60301,60302],{"class":262},"      \u002F\u002F 1.4 渲染对应的数据\n",[252,60304,60305],{"class":254,"line":33562},[252,60306,60307],{"class":262},"      img.src = data[i].url\n",[252,60309,60310],{"class":254,"line":33571},[252,60311,60312],{"class":262},"      p.innerHTML = data[i].title\n",[252,60314,60315],{"class":254,"line":33580},[252,60316,60317],{"class":262},"      footer.style.backgroundColor = data[i].color\n",[252,60319,60320],{"class":254,"line":33589},[252,60321,60322],{"class":262},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[252,60324,60325],{"class":254,"line":33598},[252,60326,60327],{"class":262},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[252,60329,60330],{"class":254,"line":33604},[252,60331,60332],{"class":262},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[252,60334,60335],{"class":254,"line":33610},[252,60336,2326],{"class":262},[252,60338,60339],{"class":254,"line":33618},[252,60340,2539],{"emptyLinePlaceholder":181},[252,60342,60343],{"class":254,"line":33623},[252,60344,60345],{"class":262},"    \u002F\u002F 3. 自动播放模块\n",[252,60347,60348],{"class":254,"line":33629},[252,60349,60350],{"class":262},"    let timerId = setInterval(function () {\n",[252,60352,60353],{"class":254,"line":33640},[252,60354,60355],{"class":262},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[252,60357,60358],{"class":254,"line":33646},[252,60359,60360],{"class":262},"      next.click()\n",[252,60362,60363],{"class":254,"line":33666},[252,60364,60365],{"class":262},"    }, 1000)\n",[252,60367,60368],{"class":254,"line":33672},[252,60369,2539],{"emptyLinePlaceholder":181},[252,60371,60372],{"class":254,"line":33678},[252,60373,60374],{"class":262},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[252,60376,60377],{"class":254,"line":33684},[252,60378,60379],{"class":262},"    const slider = document.querySelector('.slider')\n",[252,60381,60382],{"class":254,"line":33701},[252,60383,60384],{"class":262},"    \u002F\u002F 注册事件\n",[252,60386,60387],{"class":254,"line":33707},[252,60388,60389],{"class":262},"    slider.addEventListener('mouseenter', function () {\n",[252,60391,60392],{"class":254,"line":33713},[252,60393,60394],{"class":262},"      \u002F\u002F 停止定时器\n",[252,60396,60397],{"class":254,"line":33719},[252,60398,60399],{"class":262},"      clearInterval(timerId)\n",[252,60401,60402],{"class":254,"line":33725},[252,60403,33601],{"class":262},[252,60405,60406],{"class":254,"line":33731},[252,60407,2539],{"emptyLinePlaceholder":181},[252,60409,60410],{"class":254,"line":33758},[252,60411,60412],{"class":262},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[252,60414,60415],{"class":254,"line":33782},[252,60416,60384],{"class":262},[252,60418,60419],{"class":254,"line":33788},[252,60420,60421],{"class":262},"    slider.addEventListener('mouseleave', function () {\n",[252,60423,60424],{"class":254,"line":33794},[252,60425,60394],{"class":262},[252,60427,60428],{"class":254,"line":33800},[252,60429,60430],{"class":262},"      if (timerId) clearInterval(timerId)\n",[252,60432,60433],{"class":254,"line":33811},[252,60434,60435],{"class":262},"      \u002F\u002F 开启定时器\n",[252,60437,60438],{"class":254,"line":33822},[252,60439,60440],{"class":262},"      timerId = setInterval(function () {\n",[252,60442,60443],{"class":254,"line":33828},[252,60444,60445],{"class":262},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[252,60447,60448],{"class":254,"line":33845},[252,60449,60450],{"class":262},"        next.click()\n",[252,60452,60453],{"class":254,"line":33868},[252,60454,60455],{"class":262},"      }, 1000)\n",[252,60457,60458],{"class":254,"line":33891},[252,60459,33601],{"class":262},[252,60461,60462,60464,60466],{"class":254,"line":33897},[252,60463,52557],{"class":262},[252,60465,51953],{"class":51440},[252,60467,51447],{"class":262},[252,60469,60470,60472,60474],{"class":254,"line":33902},[252,60471,51925],{"class":262},[252,60473,51940],{"class":51440},[252,60475,51447],{"class":262},[252,60477,60478],{"class":254,"line":33911},[252,60479,2539],{"emptyLinePlaceholder":181},[252,60481,60482,60484,60486],{"class":254,"line":33921},[252,60483,51925],{"class":262},[252,60485,50775],{"class":51440},[252,60487,51447],{"class":262},[22137,60489,60491],{"id":60490},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60493,60494],{},"小米搜索框案例：",[244,60496,60498],{"className":50773,"code":60497,"language":50775,"meta":169,"style":169},"\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",[22,60499,60500,60510,60524,60528,60536,60550,60570,60590,60602,60610,60616,60626,60636,60648,60652,60656,60663,60667,60678,60682,60686,60693,60704,60717,60731,60735,60739,60748,60760,60772,60786,60799,60812,60830,60841,60845,60849,60858,60875,60879,60883,60890,60900,60910,60921,60934,60946,60962,60973,60985,60989,60993,61001,61012,61029,61041,61053,61064,61068,61072,61083,61094,61098,61106,61110,61118,61122,61130,61145,61168,61183,61214,61241,61268,61295,61322,61349,61376,61385,61393,61401,61406,61426,61446,61451,61456,61474,61479,61489,61494,61508,61513,61518,61535,61544,61556,61560,61568,61576,61580],{"__ignoreMap":169},[252,60501,60502,60504,60506,60508],{"class":254,"line":255},[252,60503,51437],{"class":262},[252,60505,51441],{"class":51440},[252,60507,51444],{"class":2102},[252,60509,51447],{"class":262},[252,60511,60512,60514,60516,60518,60520,60522],{"class":254,"line":170},[252,60513,1173],{"class":262},[252,60515,50775],{"class":51440},[252,60517,51456],{"class":2102},[252,60519,308],{"class":262},[252,60521,51461],{"class":367},[252,60523,51447],{"class":262},[252,60525,60526],{"class":254,"line":1318},[252,60527,2539],{"emptyLinePlaceholder":181},[252,60529,60530,60532,60534],{"class":254,"line":1333},[252,60531,1173],{"class":262},[252,60533,51474],{"class":51440},[252,60535,51447],{"class":262},[252,60537,60538,60540,60542,60544,60546,60548],{"class":254,"line":1339},[252,60539,51481],{"class":262},[252,60541,51484],{"class":51440},[252,60543,51487],{"class":2102},[252,60545,308],{"class":262},[252,60547,51492],{"class":367},[252,60549,51447],{"class":262},[252,60551,60552,60554,60556,60558,60560,60562,60564,60566,60568],{"class":254,"line":1353},[252,60553,51481],{"class":262},[252,60555,51484],{"class":51440},[252,60557,51503],{"class":2102},[252,60559,308],{"class":262},[252,60561,51508],{"class":367},[252,60563,51511],{"class":2102},[252,60565,308],{"class":262},[252,60567,51516],{"class":367},[252,60569,51447],{"class":262},[252,60571,60572,60574,60576,60578,60580,60582,60584,60586,60588],{"class":254,"line":1359},[252,60573,51481],{"class":262},[252,60575,51484],{"class":51440},[252,60577,15060],{"class":2102},[252,60579,308],{"class":262},[252,60581,51531],{"class":367},[252,60583,51511],{"class":2102},[252,60585,308],{"class":262},[252,60587,51538],{"class":367},[252,60589,51447],{"class":262},[252,60591,60592,60594,60596,60598,60600],{"class":254,"line":1450},[252,60593,51481],{"class":262},[252,60595,51547],{"class":51440},[252,60597,51550],{"class":262},[252,60599,51547],{"class":51440},[252,60601,51447],{"class":262},[252,60603,60604,60606,60608],{"class":254,"line":1456},[252,60605,51481],{"class":262},[252,60607,5266],{"class":51440},[252,60609,51447],{"class":262},[252,60611,60612,60614],{"class":254,"line":1468},[252,60613,51567],{"class":51440},[252,60615,15712],{"class":262},[252,60617,60618,60620,60622,60624],{"class":254,"line":1751},[252,60619,51574],{"class":311},[252,60621,51577],{"class":262},[252,60623,454],{"class":311},[252,60625,1429],{"class":262},[252,60627,60628,60630,60632,60634],{"class":254,"line":1756},[252,60629,51586],{"class":311},[252,60631,51577],{"class":262},[252,60633,454],{"class":311},[252,60635,1429],{"class":262},[252,60637,60638,60641,60643,60646],{"class":254,"line":1762},[252,60639,60640],{"class":311},"            box-sizing",[252,60642,51577],{"class":262},[252,60644,60645],{"class":311},"border-box",[252,60647,1429],{"class":262},[252,60649,60650],{"class":254,"line":1767},[252,60651,2668],{"class":262},[252,60653,60654],{"class":254,"line":1781},[252,60655,2539],{"emptyLinePlaceholder":181},[252,60657,60658,60661],{"class":254,"line":1786},[252,60659,60660],{"class":51440},"        ul",[252,60662,15712],{"class":262},[252,60664,60665],{"class":254,"line":1792},[252,60666,2539],{"emptyLinePlaceholder":181},[252,60668,60669,60672,60674,60676],{"class":254,"line":1813},[252,60670,60671],{"class":311},"            list-style",[252,60673,51577],{"class":262},[252,60675,54877],{"class":311},[252,60677,1429],{"class":262},[252,60679,60680],{"class":254,"line":1818},[252,60681,2668],{"class":262},[252,60683,60684],{"class":254,"line":1832},[252,60685,2539],{"emptyLinePlaceholder":181},[252,60687,60688,60691],{"class":254,"line":1837},[252,60689,60690],{"class":2102},"        .mi",[252,60692,15712],{"class":262},[252,60694,60695,60698,60700,60702],{"class":254,"line":1866},[252,60696,60697],{"class":311},"            position",[252,60699,51577],{"class":262},[252,60701,54904],{"class":311},[252,60703,1429],{"class":262},[252,60705,60706,60708,60710,60713,60715],{"class":254,"line":1871},[252,60707,51624],{"class":311},[252,60709,51577],{"class":262},[252,60711,60712],{"class":311},"223",[252,60714,51632],{"class":258},[252,60716,1429],{"class":262},[252,60718,60719,60721,60723,60725,60727,60729],{"class":254,"line":1888},[252,60720,51574],{"class":311},[252,60722,51577],{"class":262},[252,60724,574],{"class":311},[252,60726,51632],{"class":258},[252,60728,51696],{"class":311},[252,60730,1429],{"class":262},[252,60732,60733],{"class":254,"line":1893},[252,60734,2668],{"class":262},[252,60736,60737],{"class":254,"line":1898},[252,60738,2539],{"emptyLinePlaceholder":181},[252,60740,60741,60743,60746],{"class":254,"line":1903},[252,60742,60690],{"class":2102},[252,60744,60745],{"class":51440}," input",[252,60747,15712],{"class":262},[252,60749,60750,60752,60754,60756,60758],{"class":254,"line":1917},[252,60751,51624],{"class":311},[252,60753,51577],{"class":262},[252,60755,60712],{"class":311},[252,60757,51632],{"class":258},[252,60759,1429],{"class":262},[252,60761,60762,60764,60766,60768,60770],{"class":254,"line":1922},[252,60763,51639],{"class":311},[252,60765,51577],{"class":262},[252,60767,870],{"class":311},[252,60769,51632],{"class":258},[252,60771,1429],{"class":262},[252,60773,60774,60776,60778,60780,60782,60784],{"class":254,"line":2716},[252,60775,51586],{"class":311},[252,60777,51577],{"class":262},[252,60779,454],{"class":311},[252,60781,2177],{"class":311},[252,60783,51632],{"class":258},[252,60785,1429],{"class":262},[252,60787,60788,60791,60793,60795,60797],{"class":254,"line":2730},[252,60789,60790],{"class":311},"            font-size",[252,60792,51577],{"class":262},[252,60794,812],{"class":311},[252,60796,51632],{"class":258},[252,60798,1429],{"class":262},[252,60800,60801,60804,60806,60808,60810],{"class":254,"line":2738},[252,60802,60803],{"class":311},"            line-height",[252,60805,51577],{"class":262},[252,60807,870],{"class":311},[252,60809,51632],{"class":258},[252,60811,1429],{"class":262},[252,60813,60814,60817,60819,60821,60823,60825,60828],{"class":254,"line":2743},[252,60815,60816],{"class":311},"            border",[252,60818,51577],{"class":262},[252,60820,480],{"class":311},[252,60822,51632],{"class":258},[252,60824,51661],{"class":311},[252,60826,60827],{"class":311}," #e0e0e0",[252,60829,1429],{"class":262},[252,60831,60832,60835,60837,60839],{"class":254,"line":2749},[252,60833,60834],{"class":311},"            outline",[252,60836,51577],{"class":262},[252,60838,54877],{"class":311},[252,60840,1429],{"class":262},[252,60842,60843],{"class":254,"line":2755},[252,60844,2668],{"class":262},[252,60846,60847],{"class":254,"line":2760},[252,60848,2539],{"emptyLinePlaceholder":181},[252,60850,60851,60853,60856],{"class":254,"line":8088},[252,60852,60690],{"class":2102},[252,60854,60855],{"class":2102}," .search",[252,60857,15712],{"class":262},[252,60859,60860,60862,60864,60866,60868,60870,60873],{"class":254,"line":8112},[252,60861,60816],{"class":311},[252,60863,51577],{"class":262},[252,60865,480],{"class":311},[252,60867,51632],{"class":258},[252,60869,51661],{"class":311},[252,60871,60872],{"class":311}," #ff6700",[252,60874,1429],{"class":262},[252,60876,60877],{"class":254,"line":8117},[252,60878,2668],{"class":262},[252,60880,60881],{"class":254,"line":8123},[252,60882,2539],{"emptyLinePlaceholder":181},[252,60884,60885,60888],{"class":254,"line":8150},[252,60886,60887],{"class":2102},"        .result-list",[252,60889,15712],{"class":262},[252,60891,60892,60894,60896,60898],{"class":254,"line":8155},[252,60893,51612],{"class":311},[252,60895,51577],{"class":262},[252,60897,54877],{"class":311},[252,60899,1429],{"class":262},[252,60901,60902,60904,60906,60908],{"class":254,"line":8161},[252,60903,60697],{"class":311},[252,60905,51577],{"class":262},[252,60907,54971],{"class":311},[252,60909,1429],{"class":262},[252,60911,60912,60915,60917,60919],{"class":254,"line":8173},[252,60913,60914],{"class":311},"            left",[252,60916,51577],{"class":262},[252,60918,454],{"class":311},[252,60920,1429],{"class":262},[252,60922,60923,60926,60928,60930,60932],{"class":254,"line":8185},[252,60924,60925],{"class":311},"            top",[252,60927,51577],{"class":262},[252,60929,870],{"class":311},[252,60931,51632],{"class":258},[252,60933,1429],{"class":262},[252,60935,60936,60938,60940,60942,60944],{"class":254,"line":8197},[252,60937,51624],{"class":311},[252,60939,51577],{"class":262},[252,60941,60712],{"class":311},[252,60943,51632],{"class":258},[252,60945,1429],{"class":262},[252,60947,60948,60950,60952,60954,60956,60958,60960],{"class":254,"line":9856},[252,60949,60816],{"class":311},[252,60951,51577],{"class":262},[252,60953,480],{"class":311},[252,60955,51632],{"class":258},[252,60957,51661],{"class":311},[252,60959,60872],{"class":311},[252,60961,1429],{"class":262},[252,60963,60964,60967,60969,60971],{"class":254,"line":9881},[252,60965,60966],{"class":311},"            border-top",[252,60968,51577],{"class":262},[252,60970,454],{"class":311},[252,60972,1429],{"class":262},[252,60974,60975,60978,60980,60983],{"class":254,"line":9904},[252,60976,60977],{"class":311},"            background",[252,60979,51577],{"class":262},[252,60981,60982],{"class":311},"#fff",[252,60984,1429],{"class":262},[252,60986,60987],{"class":254,"line":9928},[252,60988,2668],{"class":262},[252,60990,60991],{"class":254,"line":9933},[252,60992,2539],{"emptyLinePlaceholder":181},[252,60994,60995,60997,60999],{"class":254,"line":9938},[252,60996,60887],{"class":2102},[252,60998,1537],{"class":51440},[252,61000,15712],{"class":262},[252,61002,61003,61005,61007,61010],{"class":254,"line":9943},[252,61004,51612],{"class":311},[252,61006,51577],{"class":262},[252,61008,61009],{"class":311},"block",[252,61011,1429],{"class":262},[252,61013,61014,61016,61018,61020,61022,61025,61027],{"class":254,"line":9952},[252,61015,51586],{"class":311},[252,61017,51577],{"class":262},[252,61019,607],{"class":311},[252,61021,51632],{"class":258},[252,61023,61024],{"class":311}," 15",[252,61026,51632],{"class":258},[252,61028,1429],{"class":262},[252,61030,61031,61033,61035,61037,61039],{"class":254,"line":9957},[252,61032,60790],{"class":311},[252,61034,51577],{"class":262},[252,61036,761],{"class":311},[252,61038,51632],{"class":258},[252,61040,1429],{"class":262},[252,61042,61043,61046,61048,61051],{"class":254,"line":9963},[252,61044,61045],{"class":311},"            color",[252,61047,51577],{"class":262},[252,61049,61050],{"class":311},"#424242",[252,61052,1429],{"class":262},[252,61054,61055,61058,61060,61062],{"class":254,"line":9984},[252,61056,61057],{"class":311},"            text-decoration",[252,61059,51577],{"class":262},[252,61061,54877],{"class":311},[252,61063,1429],{"class":262},[252,61065,61066],{"class":254,"line":9990},[252,61067,2668],{"class":262},[252,61069,61070],{"class":254,"line":10004},[252,61071,2539],{"emptyLinePlaceholder":181},[252,61073,61074,61076,61078,61081],{"class":254,"line":10010},[252,61075,60887],{"class":2102},[252,61077,1537],{"class":51440},[252,61079,61080],{"class":2102},":hover",[252,61082,15712],{"class":262},[252,61084,61085,61087,61089,61092],{"class":254,"line":10037},[252,61086,51780],{"class":311},[252,61088,51577],{"class":262},[252,61090,61091],{"class":311},"#eee",[252,61093,1429],{"class":262},[252,61095,61096],{"class":254,"line":10046},[252,61097,2668],{"class":262},[252,61099,61100,61102,61104],{"class":254,"line":10052},[252,61101,51916],{"class":262},[252,61103,5266],{"class":51440},[252,61105,51447],{"class":262},[252,61107,61108],{"class":254,"line":10060},[252,61109,2539],{"emptyLinePlaceholder":181},[252,61111,61112,61114,61116],{"class":254,"line":10065},[252,61113,51925],{"class":262},[252,61115,51474],{"class":51440},[252,61117,51447],{"class":262},[252,61119,61120],{"class":254,"line":16744},[252,61121,2539],{"emptyLinePlaceholder":181},[252,61123,61124,61126,61128],{"class":254,"line":16750},[252,61125,1173],{"class":262},[252,61127,51940],{"class":51440},[252,61129,51447],{"class":262},[252,61131,61132,61134,61136,61138,61140,61143],{"class":254,"line":16773},[252,61133,51481],{"class":262},[252,61135,51751],{"class":51440},[252,61137,53626],{"class":2102},[252,61139,308],{"class":262},[252,61141,61142],{"class":367},"\"mi\"",[252,61144,51447],{"class":262},[252,61146,61147,61149,61151,61153,61155,61158,61161,61163,61166],{"class":254,"line":16779},[252,61148,55442],{"class":262},[252,61150,53961],{"class":51440},[252,61152,53964],{"class":2102},[252,61154,308],{"class":262},[252,61156,61157],{"class":367},"\"search\"",[252,61159,61160],{"class":2102}," placeholder",[252,61162,308],{"class":262},[252,61164,61165],{"class":367},"\"小米笔记本\"",[252,61167,51447],{"class":262},[252,61169,61170,61172,61174,61176,61178,61181],{"class":254,"line":16802},[252,61171,55442],{"class":262},[252,61173,1270],{"class":51440},[252,61175,53626],{"class":2102},[252,61177,308],{"class":262},[252,61179,61180],{"class":367},"\"result-list\"",[252,61182,51447],{"class":262},[252,61184,61185,61188,61190,61193,61195,61198,61200,61203,61206,61208,61210,61212],{"class":254,"line":16816},[252,61186,61187],{"class":262},"            \u003C",[252,61189,210],{"class":51440},[252,61191,61192],{"class":262},">\u003C",[252,61194,501],{"class":51440},[252,61196,61197],{"class":2102}," href",[252,61199,308],{"class":262},[252,61201,61202],{"class":367},"\"#\"",[252,61204,61205],{"class":262},">全部商品\u003C\u002F",[252,61207,501],{"class":51440},[252,61209,55454],{"class":262},[252,61211,210],{"class":51440},[252,61213,51447],{"class":262},[252,61215,61216,61218,61220,61222,61224,61226,61228,61230,61233,61235,61237,61239],{"class":254,"line":16836},[252,61217,61187],{"class":262},[252,61219,210],{"class":51440},[252,61221,61192],{"class":262},[252,61223,501],{"class":51440},[252,61225,61197],{"class":2102},[252,61227,308],{"class":262},[252,61229,61202],{"class":367},[252,61231,61232],{"class":262},">小米11\u003C\u002F",[252,61234,501],{"class":51440},[252,61236,55454],{"class":262},[252,61238,210],{"class":51440},[252,61240,51447],{"class":262},[252,61242,61243,61245,61247,61249,61251,61253,61255,61257,61260,61262,61264,61266],{"class":254,"line":16842},[252,61244,61187],{"class":262},[252,61246,210],{"class":51440},[252,61248,61192],{"class":262},[252,61250,501],{"class":51440},[252,61252,61197],{"class":2102},[252,61254,308],{"class":262},[252,61256,61202],{"class":367},[252,61258,61259],{"class":262},">小米10S\u003C\u002F",[252,61261,501],{"class":51440},[252,61263,55454],{"class":262},[252,61265,210],{"class":51440},[252,61267,51447],{"class":262},[252,61269,61270,61272,61274,61276,61278,61280,61282,61284,61287,61289,61291,61293],{"class":254,"line":16853},[252,61271,61187],{"class":262},[252,61273,210],{"class":51440},[252,61275,61192],{"class":262},[252,61277,501],{"class":51440},[252,61279,61197],{"class":2102},[252,61281,308],{"class":262},[252,61283,61202],{"class":367},[252,61285,61286],{"class":262},">小米笔记本\u003C\u002F",[252,61288,501],{"class":51440},[252,61290,55454],{"class":262},[252,61292,210],{"class":51440},[252,61294,51447],{"class":262},[252,61296,61297,61299,61301,61303,61305,61307,61309,61311,61314,61316,61318,61320],{"class":254,"line":16876},[252,61298,61187],{"class":262},[252,61300,210],{"class":51440},[252,61302,61192],{"class":262},[252,61304,501],{"class":51440},[252,61306,61197],{"class":2102},[252,61308,308],{"class":262},[252,61310,61202],{"class":367},[252,61312,61313],{"class":262},">小米手机\u003C\u002F",[252,61315,501],{"class":51440},[252,61317,55454],{"class":262},[252,61319,210],{"class":51440},[252,61321,51447],{"class":262},[252,61323,61324,61326,61328,61330,61332,61334,61336,61338,61341,61343,61345,61347],{"class":254,"line":16898},[252,61325,61187],{"class":262},[252,61327,210],{"class":51440},[252,61329,61192],{"class":262},[252,61331,501],{"class":51440},[252,61333,61197],{"class":2102},[252,61335,308],{"class":262},[252,61337,61202],{"class":367},[252,61339,61340],{"class":262},">黑鲨4\u003C\u002F",[252,61342,501],{"class":51440},[252,61344,55454],{"class":262},[252,61346,210],{"class":51440},[252,61348,51447],{"class":262},[252,61350,61351,61353,61355,61357,61359,61361,61363,61365,61368,61370,61372,61374],{"class":254,"line":16903},[252,61352,61187],{"class":262},[252,61354,210],{"class":51440},[252,61356,61192],{"class":262},[252,61358,501],{"class":51440},[252,61360,61197],{"class":2102},[252,61362,308],{"class":262},[252,61364,61202],{"class":367},[252,61366,61367],{"class":262},">空调\u003C\u002F",[252,61369,501],{"class":51440},[252,61371,55454],{"class":262},[252,61373,210],{"class":51440},[252,61375,51447],{"class":262},[252,61377,61378,61381,61383],{"class":254,"line":16909},[252,61379,61380],{"class":262},"        \u003C\u002F",[252,61382,1270],{"class":51440},[252,61384,51447],{"class":262},[252,61386,61387,61389,61391],{"class":254,"line":16923},[252,61388,51916],{"class":262},[252,61390,51751],{"class":51440},[252,61392,51447],{"class":262},[252,61394,61395,61397,61399],{"class":254,"line":16936},[252,61396,51481],{"class":262},[252,61398,51953],{"class":51440},[252,61400,51447],{"class":262},[252,61402,61403],{"class":254,"line":16941},[252,61404,61405],{"class":321},"        \u002F\u002F 1. 获取元素\n",[252,61407,61408,61411,61413,61415,61417,61419,61421,61424],{"class":254,"line":16955},[252,61409,61410],{"class":258},"        const",[252,61412,60745],{"class":311},[252,61414,13704],{"class":258},[252,61416,54536],{"class":262},[252,61418,54539],{"class":2102},[252,61420,263],{"class":262},[252,61422,61423],{"class":367},"'[type=search]'",[252,61425,269],{"class":262},[252,61427,61428,61430,61433,61435,61437,61439,61441,61444],{"class":254,"line":16960},[252,61429,61410],{"class":258},[252,61431,61432],{"class":311}," ul",[252,61434,13704],{"class":258},[252,61436,54536],{"class":262},[252,61438,54539],{"class":2102},[252,61440,263],{"class":262},[252,61442,61443],{"class":367},"'.result-list'",[252,61445,269],{"class":262},[252,61447,61448],{"class":254,"line":16966},[252,61449,61450],{"class":321},"        \u002F\u002F console.log(input)\n",[252,61452,61453],{"class":254,"line":16971},[252,61454,61455],{"class":321},"        \u002F\u002F 2. 监听事件 获得焦点\n",[252,61457,61458,61461,61463,61465,61468,61470,61472],{"class":254,"line":16985},[252,61459,61460],{"class":262},"        input.",[252,61462,57953],{"class":2102},[252,61464,263],{"class":262},[252,61466,61467],{"class":367},"'focus'",[252,61469,12575],{"class":262},[252,61471,54589],{"class":258},[252,61473,54592],{"class":262},[252,61475,61476],{"class":254,"line":16990},[252,61477,61478],{"class":321},"            \u002F\u002F ul显示\n",[252,61480,61481,61484,61486],{"class":254,"line":16995},[252,61482,61483],{"class":262},"            ul.style.display ",[252,61485,308],{"class":258},[252,61487,61488],{"class":367}," 'block'\n",[252,61490,61491],{"class":254,"line":17009},[252,61492,61493],{"class":321},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[252,61495,61496,61499,61501,61503,61506],{"class":254,"line":17021},[252,61497,61498],{"class":262},"            input.classList.",[252,61500,5474],{"class":2102},[252,61502,263],{"class":262},[252,61504,61505],{"class":367},"'search'",[252,61507,269],{"class":262},[252,61509,61510],{"class":254,"line":17026},[252,61511,61512],{"class":262},"        })\n",[252,61514,61515],{"class":254,"line":17039},[252,61516,61517],{"class":321},"        \u002F\u002F 3. 监听事件 失去焦点\n",[252,61519,61520,61522,61524,61526,61529,61531,61533],{"class":254,"line":17044},[252,61521,61460],{"class":262},[252,61523,57953],{"class":2102},[252,61525,263],{"class":262},[252,61527,61528],{"class":367},"'blur'",[252,61530,12575],{"class":262},[252,61532,54589],{"class":258},[252,61534,54592],{"class":262},[252,61536,61537,61539,61541],{"class":254,"line":17049},[252,61538,61483],{"class":262},[252,61540,308],{"class":258},[252,61542,61543],{"class":367}," 'none'\n",[252,61545,61546,61548,61550,61552,61554],{"class":254,"line":17054},[252,61547,61498],{"class":262},[252,61549,57146],{"class":2102},[252,61551,263],{"class":262},[252,61553,61505],{"class":367},[252,61555,269],{"class":262},[252,61557,61558],{"class":254,"line":17067},[252,61559,61512],{"class":262},[252,61561,61562,61564,61566],{"class":254,"line":17072},[252,61563,51916],{"class":262},[252,61565,51953],{"class":51440},[252,61567,51447],{"class":262},[252,61569,61570,61572,61574],{"class":254,"line":32773},[252,61571,51925],{"class":262},[252,61573,51940],{"class":51440},[252,61575,51447],{"class":262},[252,61577,61578],{"class":254,"line":32779},[252,61579,2539],{"emptyLinePlaceholder":181},[252,61581,61582,61584,61586],{"class":254,"line":32785},[252,61583,51925],{"class":262},[252,61585,50775],{"class":51440},[252,61587,51447],{"class":262},[22137,61589,61591],{"id":61590},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61593,61594],{},"评论字数统计案例",[19,61596,61597],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61599,61600],{},"牢记focus伪类选择器",[51484,61602],{"charSet":61603},"UTF-8",[51484,61605],{"name":61606,"content":61607},"viewport","width=device-width, initial-scale=1.0",[51547,61609,61610],{},"Document",[5266,61612,61613],{},"\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",[53961,61615],{"type":5327},[1270,61617,61618,61621],{},[210,61619,61620],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[210,61622,61623],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[244,61625,61627],{"className":50773,"code":61626,"language":50775,"meta":169,"style":169},"\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",[22,61628,61629,61639,61653,61657,61665,61679,61699,61719,61732,61740,61747,61760,61774,61784,61794,61798,61802,61809,61821,61833,61845,61857,61886,61899,61903,61907,61916,61927,61939,61950,61961,61973,61984,61996,62012,62024,62028,62032,62043,62054,62064,62076,62080,62084,62092,62103,62113,62124,62136,62149,62161,62173,62177,62181,62190,62202,62213,62226,62237,62251,62255,62259,62266,62278,62290,62300,62304,62308,62317,62329,62339,62343,62347,62358,62368,62387,62400,62404,62408,62418,62428,62432,62436,62447,62458,62470,62482,62486,62490,62501,62512,62526,62530,62534,62545,62555,62567,62571,62579,62587,62591,62599,62614,62633,62673,62686,62694,62708,62728,62736,62751,62774,62792,62807,62827,62847,62867,62875,62883,62891,62899,62919,62939,62944,62961,62970,62974,62979,62995,63003,63007,63012,63029,63034,63059,63063,63067,63072,63077,63085,63093,63097],{"__ignoreMap":169},[252,61630,61631,61633,61635,61637],{"class":254,"line":255},[252,61632,51437],{"class":262},[252,61634,51441],{"class":51440},[252,61636,51444],{"class":2102},[252,61638,51447],{"class":262},[252,61640,61641,61643,61645,61647,61649,61651],{"class":254,"line":170},[252,61642,1173],{"class":262},[252,61644,50775],{"class":51440},[252,61646,51456],{"class":2102},[252,61648,308],{"class":262},[252,61650,51461],{"class":367},[252,61652,51447],{"class":262},[252,61654,61655],{"class":254,"line":1318},[252,61656,2539],{"emptyLinePlaceholder":181},[252,61658,61659,61661,61663],{"class":254,"line":1333},[252,61660,1173],{"class":262},[252,61662,51474],{"class":51440},[252,61664,51447],{"class":262},[252,61666,61667,61669,61671,61673,61675,61677],{"class":254,"line":1339},[252,61668,52284],{"class":262},[252,61670,51484],{"class":51440},[252,61672,51487],{"class":2102},[252,61674,308],{"class":262},[252,61676,51492],{"class":367},[252,61678,51447],{"class":262},[252,61680,61681,61683,61685,61687,61689,61691,61693,61695,61697],{"class":254,"line":1353},[252,61682,52284],{"class":262},[252,61684,51484],{"class":51440},[252,61686,51503],{"class":2102},[252,61688,308],{"class":262},[252,61690,51508],{"class":367},[252,61692,51511],{"class":2102},[252,61694,308],{"class":262},[252,61696,51516],{"class":367},[252,61698,51447],{"class":262},[252,61700,61701,61703,61705,61707,61709,61711,61713,61715,61717],{"class":254,"line":1359},[252,61702,52284],{"class":262},[252,61704,51484],{"class":51440},[252,61706,15060],{"class":2102},[252,61708,308],{"class":262},[252,61710,51531],{"class":367},[252,61712,51511],{"class":2102},[252,61714,308],{"class":262},[252,61716,51538],{"class":367},[252,61718,51447],{"class":262},[252,61720,61721,61723,61725,61728,61730],{"class":254,"line":1450},[252,61722,52284],{"class":262},[252,61724,51547],{"class":51440},[252,61726,61727],{"class":262},">评论回车发布\u003C\u002F",[252,61729,51547],{"class":51440},[252,61731,51447],{"class":262},[252,61733,61734,61736,61738],{"class":254,"line":1456},[252,61735,52284],{"class":262},[252,61737,5266],{"class":51440},[252,61739,51447],{"class":262},[252,61741,61742,61745],{"class":254,"line":1468},[252,61743,61744],{"class":2102},"    .wrapper",[252,61746,15712],{"class":262},[252,61748,61749,61752,61754,61756,61758],{"class":254,"line":1751},[252,61750,61751],{"class":311},"      min-width",[252,61753,51577],{"class":262},[252,61755,4126],{"class":311},[252,61757,51632],{"class":258},[252,61759,1429],{"class":262},[252,61761,61762,61765,61767,61770,61772],{"class":254,"line":1756},[252,61763,61764],{"class":311},"      max-width",[252,61766,51577],{"class":262},[252,61768,61769],{"class":311},"800",[252,61771,51632],{"class":258},[252,61773,1429],{"class":262},[252,61775,61776,61778,61780,61782],{"class":254,"line":1762},[252,61777,55149],{"class":311},[252,61779,51577],{"class":262},[252,61781,51617],{"class":311},[252,61783,1429],{"class":262},[252,61785,61786,61788,61790,61792],{"class":254,"line":1767},[252,61787,55160],{"class":311},[252,61789,51577],{"class":262},[252,61791,51720],{"class":311},[252,61793,1429],{"class":262},[252,61795,61796],{"class":254,"line":1781},[252,61797,2326],{"class":262},[252,61799,61800],{"class":254,"line":1786},[252,61801,2539],{"emptyLinePlaceholder":181},[252,61803,61804,61807],{"class":254,"line":1792},[252,61805,61806],{"class":2102},"    .avatar",[252,61808,15712],{"class":262},[252,61810,61811,61813,61815,61817,61819],{"class":254,"line":1813},[252,61812,54911],{"class":311},[252,61814,51577],{"class":262},[252,61816,870],{"class":311},[252,61818,51632],{"class":258},[252,61820,1429],{"class":262},[252,61822,61823,61825,61827,61829,61831],{"class":254,"line":1818},[252,61824,54925],{"class":311},[252,61826,51577],{"class":262},[252,61828,870],{"class":311},[252,61830,51632],{"class":258},[252,61832,1429],{"class":262},[252,61834,61835,61837,61839,61841,61843],{"class":254,"line":1832},[252,61836,55274],{"class":311},[252,61838,51577],{"class":262},[252,61840,919],{"class":311},[252,61842,591],{"class":258},[252,61844,1429],{"class":262},[252,61846,61847,61850,61852,61855],{"class":254,"line":1837},[252,61848,61849],{"class":311},"      overflow",[252,61851,51577],{"class":262},[252,61853,61854],{"class":311},"hidden",[252,61856,1429],{"class":262},[252,61858,61859,61862,61864,61867,61869,61872,61874,61877,61879,61881,61884],{"class":254,"line":1866},[252,61860,61861],{"class":311},"      background",[252,61863,51577],{"class":262},[252,61865,61866],{"class":311},"url",[252,61868,263],{"class":262},[252,61870,61871],{"class":5356},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[252,61873,13854],{"class":262},[252,61875,61876],{"class":311},"no-repeat",[252,61878,17284],{"class":311},[252,61880,25118],{"class":262},[252,61882,61883],{"class":311},"cover",[252,61885,1429],{"class":262},[252,61887,61888,61891,61893,61895,61897],{"class":254,"line":1871},[252,61889,61890],{"class":311},"      margin-right",[252,61892,51577],{"class":262},[252,61894,963],{"class":311},[252,61896,51632],{"class":258},[252,61898,1429],{"class":262},[252,61900,61901],{"class":254,"line":1888},[252,61902,2326],{"class":262},[252,61904,61905],{"class":254,"line":1893},[252,61906,2539],{"emptyLinePlaceholder":181},[252,61908,61909,61911,61914],{"class":254,"line":1898},[252,61910,61744],{"class":2102},[252,61912,61913],{"class":51440}," textarea",[252,61915,15712],{"class":262},[252,61917,61918,61921,61923,61925],{"class":254,"line":1903},[252,61919,61920],{"class":311},"      outline",[252,61922,51577],{"class":262},[252,61924,54877],{"class":311},[252,61926,1429],{"class":262},[252,61928,61929,61932,61934,61937],{"class":254,"line":1917},[252,61930,61931],{"class":311},"      border-color",[252,61933,51577],{"class":262},[252,61935,61936],{"class":311},"transparent",[252,61938,1429],{"class":262},[252,61940,61941,61944,61946,61948],{"class":254,"line":1922},[252,61942,61943],{"class":311},"      resize",[252,61945,51577],{"class":262},[252,61947,54877],{"class":311},[252,61949,1429],{"class":262},[252,61951,61952,61954,61956,61959],{"class":254,"line":2716},[252,61953,61861],{"class":311},[252,61955,51577],{"class":262},[252,61957,61958],{"class":311},"#f5f5f5",[252,61960,1429],{"class":262},[252,61962,61963,61965,61967,61969,61971],{"class":254,"line":2730},[252,61964,55274],{"class":311},[252,61966,51577],{"class":262},[252,61968,556],{"class":311},[252,61970,51632],{"class":258},[252,61972,1429],{"class":262},[252,61974,61975,61978,61980,61982],{"class":254,"line":2738},[252,61976,61977],{"class":311},"      flex",[252,61979,51577],{"class":262},[252,61981,480],{"class":311},[252,61983,1429],{"class":262},[252,61985,61986,61988,61990,61992,61994],{"class":254,"line":2743},[252,61987,54835],{"class":311},[252,61989,51577],{"class":262},[252,61991,709],{"class":311},[252,61993,51632],{"class":258},[252,61995,1429],{"class":262},[252,61997,61998,62001,62003,62005,62008,62010],{"class":254,"line":2749},[252,61999,62000],{"class":311},"      transition",[252,62002,51577],{"class":262},[252,62004,28261],{"class":311},[252,62006,62007],{"class":311}," 0.5",[252,62009,958],{"class":258},[252,62011,1429],{"class":262},[252,62013,62014,62016,62018,62020,62022],{"class":254,"line":2755},[252,62015,54925],{"class":311},[252,62017,51577],{"class":262},[252,62019,1214],{"class":311},[252,62021,51632],{"class":258},[252,62023,1429],{"class":262},[252,62025,62026],{"class":254,"line":2760},[252,62027,2326],{"class":262},[252,62029,62030],{"class":254,"line":8088},[252,62031,2539],{"emptyLinePlaceholder":181},[252,62033,62034,62036,62038,62041],{"class":254,"line":8112},[252,62035,61744],{"class":2102},[252,62037,61913],{"class":51440},[252,62039,62040],{"class":2102},":focus",[252,62042,15712],{"class":262},[252,62044,62045,62047,62049,62052],{"class":254,"line":8117},[252,62046,61931],{"class":311},[252,62048,51577],{"class":262},[252,62050,62051],{"class":311},"#e4e4e4",[252,62053,1429],{"class":262},[252,62055,62056,62058,62060,62062],{"class":254,"line":8123},[252,62057,61861],{"class":311},[252,62059,51577],{"class":262},[252,62061,60982],{"class":311},[252,62063,1429],{"class":262},[252,62065,62066,62068,62070,62072,62074],{"class":254,"line":8150},[252,62067,54925],{"class":311},[252,62069,51577],{"class":262},[252,62071,919],{"class":311},[252,62073,51632],{"class":258},[252,62075,1429],{"class":262},[252,62077,62078],{"class":254,"line":8155},[252,62079,2326],{"class":262},[252,62081,62082],{"class":254,"line":8161},[252,62083,2539],{"emptyLinePlaceholder":181},[252,62085,62086,62088,62090],{"class":254,"line":8173},[252,62087,61744],{"class":2102},[252,62089,57607],{"class":51440},[252,62091,15712],{"class":262},[252,62093,62094,62096,62098,62101],{"class":254,"line":8185},[252,62095,61861],{"class":311},[252,62097,51577],{"class":262},[252,62099,62100],{"class":311},"#00aeec",[252,62102,1429],{"class":262},[252,62104,62105,62107,62109,62111],{"class":254,"line":8197},[252,62106,57556],{"class":311},[252,62108,51577],{"class":262},[252,62110,60982],{"class":311},[252,62112,1429],{"class":262},[252,62114,62115,62118,62120,62122],{"class":254,"line":9856},[252,62116,62117],{"class":311},"      border",[252,62119,51577],{"class":262},[252,62121,54877],{"class":311},[252,62123,1429],{"class":262},[252,62125,62126,62128,62130,62132,62134],{"class":254,"line":9881},[252,62127,55274],{"class":311},[252,62129,51577],{"class":262},[252,62131,556],{"class":311},[252,62133,51632],{"class":258},[252,62135,1429],{"class":262},[252,62137,62138,62141,62143,62145,62147],{"class":254,"line":9904},[252,62139,62140],{"class":311},"      margin-left",[252,62142,51577],{"class":262},[252,62144,709],{"class":311},[252,62146,51632],{"class":258},[252,62148,1429],{"class":262},[252,62150,62151,62153,62155,62157,62159],{"class":254,"line":9928},[252,62152,54911],{"class":311},[252,62154,51577],{"class":262},[252,62156,619],{"class":311},[252,62158,51632],{"class":258},[252,62160,1429],{"class":262},[252,62162,62163,62166,62168,62171],{"class":254,"line":9933},[252,62164,62165],{"class":311},"      cursor",[252,62167,51577],{"class":262},[252,62169,62170],{"class":311},"pointer",[252,62172,1429],{"class":262},[252,62174,62175],{"class":254,"line":9938},[252,62176,2326],{"class":262},[252,62178,62179],{"class":254,"line":9943},[252,62180,2539],{"emptyLinePlaceholder":181},[252,62182,62183,62185,62188],{"class":254,"line":9952},[252,62184,61744],{"class":2102},[252,62186,62187],{"class":2102}," .total",[252,62189,15712],{"class":262},[252,62191,62192,62194,62196,62198,62200],{"class":254,"line":9957},[252,62193,61890],{"class":311},[252,62195,51577],{"class":262},[252,62197,875],{"class":311},[252,62199,51632],{"class":258},[252,62201,1429],{"class":262},[252,62203,62204,62206,62208,62211],{"class":254,"line":9963},[252,62205,57556],{"class":311},[252,62207,51577],{"class":262},[252,62209,62210],{"class":311},"#999",[252,62212,1429],{"class":262},[252,62214,62215,62218,62220,62222,62224],{"class":254,"line":9984},[252,62216,62217],{"class":311},"      margin-top",[252,62219,51577],{"class":262},[252,62221,582],{"class":311},[252,62223,51632],{"class":258},[252,62225,1429],{"class":262},[252,62227,62228,62231,62233,62235],{"class":254,"line":9990},[252,62229,62230],{"class":311},"      opacity",[252,62232,51577],{"class":262},[252,62234,454],{"class":311},[252,62236,1429],{"class":262},[252,62238,62239,62241,62243,62245,62247,62249],{"class":254,"line":10004},[252,62240,62000],{"class":311},[252,62242,51577],{"class":262},[252,62244,28261],{"class":311},[252,62246,62007],{"class":311},[252,62248,958],{"class":258},[252,62250,1429],{"class":262},[252,62252,62253],{"class":254,"line":10010},[252,62254,2326],{"class":262},[252,62256,62257],{"class":254,"line":10037},[252,62258,2539],{"emptyLinePlaceholder":181},[252,62260,62261,62264],{"class":254,"line":10046},[252,62262,62263],{"class":2102},"    .list",[252,62265,15712],{"class":262},[252,62267,62268,62270,62272,62274,62276],{"class":254,"line":10052},[252,62269,61751],{"class":311},[252,62271,51577],{"class":262},[252,62273,4126],{"class":311},[252,62275,51632],{"class":258},[252,62277,1429],{"class":262},[252,62279,62280,62282,62284,62286,62288],{"class":254,"line":10060},[252,62281,61764],{"class":311},[252,62283,51577],{"class":262},[252,62285,61769],{"class":311},[252,62287,51632],{"class":258},[252,62289,1429],{"class":262},[252,62291,62292,62294,62296,62298],{"class":254,"line":10065},[252,62293,55149],{"class":311},[252,62295,51577],{"class":262},[252,62297,51617],{"class":311},[252,62299,1429],{"class":262},[252,62301,62302],{"class":254,"line":16744},[252,62303,2326],{"class":262},[252,62305,62306],{"class":254,"line":16750},[252,62307,2539],{"emptyLinePlaceholder":181},[252,62309,62310,62312,62315],{"class":254,"line":16773},[252,62311,62263],{"class":2102},[252,62313,62314],{"class":2102}," .item",[252,62316,15712],{"class":262},[252,62318,62319,62321,62323,62325,62327],{"class":254,"line":16779},[252,62320,54911],{"class":311},[252,62322,51577],{"class":262},[252,62324,574],{"class":311},[252,62326,591],{"class":258},[252,62328,1429],{"class":262},[252,62330,62331,62333,62335,62337],{"class":254,"line":16802},[252,62332,55149],{"class":311},[252,62334,51577],{"class":262},[252,62336,51617],{"class":311},[252,62338,1429],{"class":262},[252,62340,62341],{"class":254,"line":16816},[252,62342,2326],{"class":262},[252,62344,62345],{"class":254,"line":16836},[252,62346,2539],{"emptyLinePlaceholder":181},[252,62348,62349,62351,62353,62356],{"class":254,"line":16842},[252,62350,62263],{"class":2102},[252,62352,62314],{"class":2102},[252,62354,62355],{"class":2102}," .info",[252,62357,15712],{"class":262},[252,62359,62360,62362,62364,62366],{"class":254,"line":16853},[252,62361,61977],{"class":311},[252,62363,51577],{"class":262},[252,62365,480],{"class":311},[252,62367,1429],{"class":262},[252,62369,62370,62373,62375,62377,62379,62382,62385],{"class":254,"line":16876},[252,62371,62372],{"class":311},"      border-bottom",[252,62374,51577],{"class":262},[252,62376,480],{"class":311},[252,62378,51632],{"class":258},[252,62380,62381],{"class":311}," dashed",[252,62383,62384],{"class":311}," #e4e4e4",[252,62386,1429],{"class":262},[252,62388,62389,62392,62394,62396,62398],{"class":254,"line":16898},[252,62390,62391],{"class":311},"      padding-bottom",[252,62393,51577],{"class":262},[252,62395,709],{"class":311},[252,62397,51632],{"class":258},[252,62399,1429],{"class":262},[252,62401,62402],{"class":254,"line":16903},[252,62403,2326],{"class":262},[252,62405,62406],{"class":254,"line":16909},[252,62407,2539],{"emptyLinePlaceholder":181},[252,62409,62410,62412,62414,62416],{"class":254,"line":16923},[252,62411,62263],{"class":2102},[252,62413,62314],{"class":2102},[252,62415,6965],{"class":51440},[252,62417,15712],{"class":262},[252,62419,62420,62422,62424,62426],{"class":254,"line":16936},[252,62421,54846],{"class":311},[252,62423,51577],{"class":262},[252,62425,454],{"class":311},[252,62427,1429],{"class":262},[252,62429,62430],{"class":254,"line":16941},[252,62431,2326],{"class":262},[252,62433,62434],{"class":254,"line":16955},[252,62435,2539],{"emptyLinePlaceholder":181},[252,62437,62438,62440,62442,62445],{"class":254,"line":16960},[252,62439,62263],{"class":2102},[252,62441,62314],{"class":2102},[252,62443,62444],{"class":2102}," .name",[252,62446,15712],{"class":262},[252,62448,62449,62451,62453,62456],{"class":254,"line":16966},[252,62450,57556],{"class":311},[252,62452,51577],{"class":262},[252,62454,62455],{"class":311},"#FB7299",[252,62457,1429],{"class":262},[252,62459,62460,62462,62464,62466,62468],{"class":254,"line":16971},[252,62461,55062],{"class":311},[252,62463,51577],{"class":262},[252,62465,812],{"class":311},[252,62467,51632],{"class":258},[252,62469,1429],{"class":262},[252,62471,62472,62475,62477,62480],{"class":254,"line":16985},[252,62473,62474],{"class":311},"      font-weight",[252,62476,51577],{"class":262},[252,62478,62479],{"class":311},"bold",[252,62481,1429],{"class":262},[252,62483,62484],{"class":254,"line":16990},[252,62485,2326],{"class":262},[252,62487,62488],{"class":254,"line":16995},[252,62489,2539],{"emptyLinePlaceholder":181},[252,62491,62492,62494,62496,62499],{"class":254,"line":17009},[252,62493,62263],{"class":2102},[252,62495,62314],{"class":2102},[252,62497,62498],{"class":2102}," .text",[252,62500,15712],{"class":262},[252,62502,62503,62505,62507,62510],{"class":254,"line":17021},[252,62504,57556],{"class":311},[252,62506,51577],{"class":262},[252,62508,62509],{"class":311},"#333",[252,62511,1429],{"class":262},[252,62513,62514,62516,62518,62520,62522,62524],{"class":254,"line":17026},[252,62515,54835],{"class":311},[252,62517,51577],{"class":262},[252,62519,709],{"class":311},[252,62521,51632],{"class":258},[252,62523,4232],{"class":311},[252,62525,1429],{"class":262},[252,62527,62528],{"class":254,"line":17039},[252,62529,2326],{"class":262},[252,62531,62532],{"class":254,"line":17044},[252,62533,2539],{"emptyLinePlaceholder":181},[252,62535,62536,62538,62540,62543],{"class":254,"line":17049},[252,62537,62263],{"class":2102},[252,62539,62314],{"class":2102},[252,62541,62542],{"class":2102}," .time",[252,62544,15712],{"class":262},[252,62546,62547,62549,62551,62553],{"class":254,"line":17054},[252,62548,57556],{"class":311},[252,62550,51577],{"class":262},[252,62552,62210],{"class":311},[252,62554,1429],{"class":262},[252,62556,62557,62559,62561,62563,62565],{"class":254,"line":17067},[252,62558,55062],{"class":311},[252,62560,51577],{"class":262},[252,62562,761],{"class":311},[252,62564,51632],{"class":258},[252,62566,1429],{"class":262},[252,62568,62569],{"class":254,"line":17072},[252,62570,2326],{"class":262},[252,62572,62573,62575,62577],{"class":254,"line":32773},[252,62574,52557],{"class":262},[252,62576,5266],{"class":51440},[252,62578,51447],{"class":262},[252,62580,62581,62583,62585],{"class":254,"line":32779},[252,62582,51925],{"class":262},[252,62584,51474],{"class":51440},[252,62586,51447],{"class":262},[252,62588,62589],{"class":254,"line":32785},[252,62590,2539],{"emptyLinePlaceholder":181},[252,62592,62593,62595,62597],{"class":254,"line":32791},[252,62594,1173],{"class":262},[252,62596,51940],{"class":51440},[252,62598,51447],{"class":262},[252,62600,62601,62603,62605,62607,62609,62612],{"class":254,"line":32797},[252,62602,52284],{"class":262},[252,62604,51751],{"class":51440},[252,62606,53626],{"class":2102},[252,62608,308],{"class":262},[252,62610,62611],{"class":367},"\"wrapper\"",[252,62613,51447],{"class":262},[252,62615,62616,62618,62620,62622,62624,62627,62629,62631],{"class":254,"line":32808},[252,62617,51481],{"class":262},[252,62619,704],{"class":51440},[252,62621,53626],{"class":2102},[252,62623,308],{"class":262},[252,62625,62626],{"class":367},"\"avatar\"",[252,62628,55454],{"class":262},[252,62630,704],{"class":51440},[252,62632,51447],{"class":262},[252,62634,62635,62637,62639,62641,62643,62646,62648,62650,62653,62655,62657,62659,62662,62664,62667,62669,62671],{"class":254,"line":32814},[252,62636,51481],{"class":262},[252,62638,54428],{"class":51440},[252,62640,15099],{"class":2102},[252,62642,308],{"class":262},[252,62644,62645],{"class":367},"\"tx\"",[252,62647,61160],{"class":2102},[252,62649,308],{"class":262},[252,62651,62652],{"class":367},"\"发一条友善的评论\"",[252,62654,54451],{"class":2102},[252,62656,308],{"class":262},[252,62658,3840],{"class":367},[252,62660,62661],{"class":2102}," maxlength",[252,62663,308],{"class":262},[252,62665,62666],{"class":367},"\"200\"",[252,62668,55454],{"class":262},[252,62670,54428],{"class":51440},[252,62672,51447],{"class":262},[252,62674,62675,62677,62679,62682,62684],{"class":254,"line":32834},[252,62676,51481],{"class":262},[252,62678,54027],{"class":51440},[252,62680,62681],{"class":262},">发布\u003C\u002F",[252,62683,54027],{"class":51440},[252,62685,51447],{"class":262},[252,62687,62688,62690,62692],{"class":254,"line":32840},[252,62689,52557],{"class":262},[252,62691,51751],{"class":51440},[252,62693,51447],{"class":262},[252,62695,62696,62698,62700,62702,62704,62706],{"class":254,"line":32851},[252,62697,52284],{"class":262},[252,62699,51751],{"class":51440},[252,62701,53626],{"class":2102},[252,62703,308],{"class":262},[252,62705,62611],{"class":367},[252,62707,51447],{"class":262},[252,62709,62710,62712,62714,62716,62718,62721,62724,62726],{"class":254,"line":32857},[252,62711,51481],{"class":262},[252,62713,252],{"class":51440},[252,62715,53626],{"class":2102},[252,62717,308],{"class":262},[252,62719,62720],{"class":367},"\"total\"",[252,62722,62723],{"class":262},">0\u002F200字\u003C\u002F",[252,62725,252],{"class":51440},[252,62727,51447],{"class":262},[252,62729,62730,62732,62734],{"class":254,"line":32863},[252,62731,52557],{"class":262},[252,62733,51751],{"class":51440},[252,62735,51447],{"class":262},[252,62737,62738,62740,62742,62744,62746,62749],{"class":254,"line":32869},[252,62739,52284],{"class":262},[252,62741,51751],{"class":51440},[252,62743,53626],{"class":2102},[252,62745,308],{"class":262},[252,62747,62748],{"class":367},"\"list\"",[252,62750,51447],{"class":262},[252,62752,62753,62755,62757,62759,62761,62764,62767,62769,62772],{"class":254,"line":32875},[252,62754,51481],{"class":262},[252,62756,51751],{"class":51440},[252,62758,53626],{"class":2102},[252,62760,308],{"class":262},[252,62762,62763],{"class":367},"\"item\"",[252,62765,62766],{"class":2102}," style",[252,62768,308],{"class":262},[252,62770,62771],{"class":367},"\"display: none;\"",[252,62773,51447],{"class":262},[252,62775,62776,62778,62780,62782,62784,62786,62788,62790],{"class":254,"line":32881},[252,62777,55374],{"class":262},[252,62779,704],{"class":51440},[252,62781,53626],{"class":2102},[252,62783,308],{"class":262},[252,62785,62626],{"class":367},[252,62787,55454],{"class":262},[252,62789,704],{"class":51440},[252,62791,51447],{"class":262},[252,62793,62794,62796,62798,62800,62802,62805],{"class":254,"line":32887},[252,62795,55374],{"class":262},[252,62797,51751],{"class":51440},[252,62799,53626],{"class":2102},[252,62801,308],{"class":262},[252,62803,62804],{"class":367},"\"info\"",[252,62806,51447],{"class":262},[252,62808,62809,62811,62813,62815,62817,62820,62823,62825],{"class":254,"line":32893},[252,62810,55442],{"class":262},[252,62812,19],{"class":51440},[252,62814,53626],{"class":2102},[252,62816,308],{"class":262},[252,62818,62819],{"class":367},"\"name\"",[252,62821,62822],{"class":262},">清风徐来\u003C\u002F",[252,62824,19],{"class":51440},[252,62826,51447],{"class":262},[252,62828,62829,62831,62833,62835,62837,62840,62843,62845],{"class":254,"line":32913},[252,62830,55442],{"class":262},[252,62832,19],{"class":51440},[252,62834,53626],{"class":2102},[252,62836,308],{"class":262},[252,62838,62839],{"class":367},"\"text\"",[252,62841,62842],{"class":262},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[252,62844,19],{"class":51440},[252,62846,51447],{"class":262},[252,62848,62849,62851,62853,62855,62857,62860,62863,62865],{"class":254,"line":32919},[252,62850,55442],{"class":262},[252,62852,19],{"class":51440},[252,62854,53626],{"class":2102},[252,62856,308],{"class":262},[252,62858,62859],{"class":367},"\"time\"",[252,62861,62862],{"class":262},">2022-10-10 20:29:21\u003C\u002F",[252,62864,19],{"class":51440},[252,62866,51447],{"class":262},[252,62868,62869,62871,62873],{"class":254,"line":32935},[252,62870,55547],{"class":262},[252,62872,51751],{"class":51440},[252,62874,51447],{"class":262},[252,62876,62877,62879,62881],{"class":254,"line":32941},[252,62878,51916],{"class":262},[252,62880,51751],{"class":51440},[252,62882,51447],{"class":262},[252,62884,62885,62887,62889],{"class":254,"line":32955},[252,62886,52557],{"class":262},[252,62888,51751],{"class":51440},[252,62890,51447],{"class":262},[252,62892,62893,62895,62897],{"class":254,"line":32961},[252,62894,52284],{"class":262},[252,62896,51953],{"class":51440},[252,62898,51447],{"class":262},[252,62900,62901,62903,62906,62908,62910,62912,62914,62917],{"class":254,"line":32976},[252,62902,11361],{"class":258},[252,62904,62905],{"class":311}," tx",[252,62907,13704],{"class":258},[252,62909,54536],{"class":262},[252,62911,54539],{"class":2102},[252,62913,263],{"class":262},[252,62915,62916],{"class":367},"'#tx'",[252,62918,269],{"class":262},[252,62920,62921,62923,62926,62928,62930,62932,62934,62937],{"class":254,"line":32982},[252,62922,11361],{"class":258},[252,62924,62925],{"class":311}," total",[252,62927,13704],{"class":258},[252,62929,54536],{"class":262},[252,62931,54539],{"class":2102},[252,62933,263],{"class":262},[252,62935,62936],{"class":367},"'.total'",[252,62938,269],{"class":262},[252,62940,62941],{"class":254,"line":32991},[252,62942,62943],{"class":321},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[252,62945,62946,62949,62951,62953,62955,62957,62959],{"class":254,"line":32997},[252,62947,62948],{"class":262},"    tx.",[252,62950,57953],{"class":2102},[252,62952,263],{"class":262},[252,62954,61467],{"class":367},[252,62956,12575],{"class":262},[252,62958,54589],{"class":258},[252,62960,54592],{"class":262},[252,62962,62963,62966,62968],{"class":254,"line":33006},[252,62964,62965],{"class":262},"      total.style.opacity ",[252,62967,308],{"class":258},[252,62969,55839],{"class":311},[252,62971,62972],{"class":254,"line":33012},[252,62973,33601],{"class":262},[252,62975,62976],{"class":254,"line":33018},[252,62977,62978],{"class":321},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[252,62980,62981,62983,62985,62987,62989,62991,62993],{"class":254,"line":33027},[252,62982,62948],{"class":262},[252,62984,57953],{"class":2102},[252,62986,263],{"class":262},[252,62988,61528],{"class":367},[252,62990,12575],{"class":262},[252,62992,54589],{"class":258},[252,62994,54592],{"class":262},[252,62996,62997,62999,63001],{"class":254,"line":33033},[252,62998,62965],{"class":262},[252,63000,308],{"class":258},[252,63002,47473],{"class":311},[252,63004,63005],{"class":254,"line":33044},[252,63006,33601],{"class":262},[252,63008,63009],{"class":254,"line":33050},[252,63010,63011],{"class":321},"    \u002F\u002F 3. 检测用户输入\n",[252,63013,63014,63016,63018,63020,63023,63025,63027],{"class":254,"line":33069},[252,63015,62948],{"class":262},[252,63017,57953],{"class":2102},[252,63019,263],{"class":262},[252,63021,63022],{"class":367},"'input'",[252,63024,12575],{"class":262},[252,63026,54589],{"class":258},[252,63028,54592],{"class":262},[252,63030,63031],{"class":254,"line":33075},[252,63032,63033],{"class":321},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[252,63035,63036,63039,63041,63044,63047,63049,63052,63054,63056],{"class":254,"line":33086},[252,63037,63038],{"class":262},"      total.innerHTML ",[252,63040,308],{"class":258},[252,63042,63043],{"class":367}," `${",[252,63045,63046],{"class":262},"tx",[252,63048,821],{"class":367},[252,63050,63051],{"class":262},"value",[252,63053,821],{"class":367},[252,63055,52108],{"class":311},[252,63057,63058],{"class":367},"}\u002F200字`\n",[252,63060,63061],{"class":254,"line":33092},[252,63062,33601],{"class":262},[252,63064,63065],{"class":254,"line":33112},[252,63066,2539],{"emptyLinePlaceholder":181},[252,63068,63069],{"class":254,"line":33128},[252,63070,63071],{"class":321},"    \u002F\u002F const str = 'andy'\n",[252,63073,63074],{"class":254,"line":33134},[252,63075,63076],{"class":321},"    \u002F\u002F console.log(str.length)\n",[252,63078,63079,63081,63083],{"class":254,"line":33148},[252,63080,52557],{"class":262},[252,63082,51953],{"class":51440},[252,63084,51447],{"class":262},[252,63086,63087,63089,63091],{"class":254,"line":33154},[252,63088,51925],{"class":262},[252,63090,51940],{"class":51440},[252,63092,51447],{"class":262},[252,63094,63095],{"class":254,"line":33160},[252,63096,2539],{"emptyLinePlaceholder":181},[252,63098,63099,63101,63103],{"class":254,"line":33171},[252,63100,51925],{"class":262},[252,63102,50775],{"class":51440},[252,63104,51447],{"class":262},[22137,63106,63108],{"id":63107},"_3254-change事件","3.2.5.4 change事件",[19,63110,63111],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63113,63114],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63116,63117],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[244,63119,63121],{"className":50773,"code":63120,"language":50775,"meta":169,"style":169},"\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",[22,63122,63123,63133,63147,63151,63159,63173,63193,63205,63213,63217,63225,63239,63247,63265,63283,63295,63299,63307,63315,63319],{"__ignoreMap":169},[252,63124,63125,63127,63129,63131],{"class":254,"line":255},[252,63126,51437],{"class":262},[252,63128,51441],{"class":51440},[252,63130,51444],{"class":2102},[252,63132,51447],{"class":262},[252,63134,63135,63137,63139,63141,63143,63145],{"class":254,"line":170},[252,63136,1173],{"class":262},[252,63138,50775],{"class":51440},[252,63140,51456],{"class":2102},[252,63142,308],{"class":262},[252,63144,51461],{"class":367},[252,63146,51447],{"class":262},[252,63148,63149],{"class":254,"line":1318},[252,63150,2539],{"emptyLinePlaceholder":181},[252,63152,63153,63155,63157],{"class":254,"line":1333},[252,63154,1173],{"class":262},[252,63156,51474],{"class":51440},[252,63158,51447],{"class":262},[252,63160,63161,63163,63165,63167,63169,63171],{"class":254,"line":1339},[252,63162,52284],{"class":262},[252,63164,51484],{"class":51440},[252,63166,51487],{"class":2102},[252,63168,308],{"class":262},[252,63170,51492],{"class":367},[252,63172,51447],{"class":262},[252,63174,63175,63177,63179,63181,63183,63185,63187,63189,63191],{"class":254,"line":1353},[252,63176,52284],{"class":262},[252,63178,51484],{"class":51440},[252,63180,15060],{"class":2102},[252,63182,308],{"class":262},[252,63184,51531],{"class":367},[252,63186,51511],{"class":2102},[252,63188,308],{"class":262},[252,63190,51538],{"class":367},[252,63192,51447],{"class":262},[252,63194,63195,63197,63199,63201,63203],{"class":254,"line":1359},[252,63196,52284],{"class":262},[252,63198,51547],{"class":51440},[252,63200,51550],{"class":262},[252,63202,51547],{"class":51440},[252,63204,51447],{"class":262},[252,63206,63207,63209,63211],{"class":254,"line":1450},[252,63208,51925],{"class":262},[252,63210,51474],{"class":51440},[252,63212,51447],{"class":262},[252,63214,63215],{"class":254,"line":1456},[252,63216,2539],{"emptyLinePlaceholder":181},[252,63218,63219,63221,63223],{"class":254,"line":1468},[252,63220,1173],{"class":262},[252,63222,51940],{"class":51440},[252,63224,51447],{"class":262},[252,63226,63227,63229,63231,63233,63235,63237],{"class":254,"line":1751},[252,63228,52284],{"class":262},[252,63230,53961],{"class":51440},[252,63232,53964],{"class":2102},[252,63234,308],{"class":262},[252,63236,62839],{"class":367},[252,63238,51447],{"class":262},[252,63240,63241,63243,63245],{"class":254,"line":1756},[252,63242,52284],{"class":262},[252,63244,51953],{"class":51440},[252,63246,51447],{"class":262},[252,63248,63249,63251,63253,63255,63257,63259,63261,63263],{"class":254,"line":1762},[252,63250,11361],{"class":258},[252,63252,60745],{"class":311},[252,63254,13704],{"class":258},[252,63256,54536],{"class":262},[252,63258,54539],{"class":2102},[252,63260,263],{"class":262},[252,63262,63022],{"class":367},[252,63264,269],{"class":262},[252,63266,63267,63270,63272,63274,63277,63279,63281],{"class":254,"line":1767},[252,63268,63269],{"class":262},"    input.",[252,63271,57953],{"class":2102},[252,63273,263],{"class":262},[252,63275,63276],{"class":367},"'change'",[252,63278,12575],{"class":262},[252,63280,54589],{"class":258},[252,63282,54592],{"class":262},[252,63284,63285,63287,63289,63291,63293],{"class":254,"line":1781},[252,63286,58384],{"class":262},[252,63288,58387],{"class":2102},[252,63290,263],{"class":262},[252,63292,856],{"class":311},[252,63294,269],{"class":262},[252,63296,63297],{"class":254,"line":1786},[252,63298,33601],{"class":262},[252,63300,63301,63303,63305],{"class":254,"line":1792},[252,63302,52557],{"class":262},[252,63304,51953],{"class":51440},[252,63306,51447],{"class":262},[252,63308,63309,63311,63313],{"class":254,"line":1813},[252,63310,51925],{"class":262},[252,63312,51940],{"class":51440},[252,63314,51447],{"class":262},[252,63316,63317],{"class":254,"line":1818},[252,63318,2539],{"emptyLinePlaceholder":181},[252,63320,63321,63323,63325],{"class":254,"line":1832},[252,63322,51925],{"class":262},[252,63324,50775],{"class":51440},[252,63326,51447],{"class":262},[19,63328,63329],{},"总结：内容发生改变才回去触发",[224,63331,63333],{"id":63332},"_326-事件对象","3.2.6 事件对象",[22137,63335,63337],{"id":63336},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63339,63340],{},[1601,63341],{"alt":169,"src":63342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63344,63345],{},[1601,63346],{"alt":169,"src":63347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63349,63350],{},"点击一次，就输出了事件对象，它是个对象",[19,63352,63353],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63355,63356],{},[1601,63357],{"alt":169,"src":63358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22137,63360,63362],{"id":63361},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63364,63365],{},[1601,63366],{"alt":169,"src":63367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63369,63370],{},"实现按特殊字符才是实现打印输出效果：",[244,63372,63374],{"className":53207,"code":63373,"language":53209,"meta":169,"style":169},"\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",[22,63375,63376,63384,63389,63403,63411,63416,63421,63426,63431,63436,63441,63446,63451,63456,63460,63464,63472],{"__ignoreMap":169},[252,63377,63378,63380,63382],{"class":254,"line":255},[252,63379,1173],{"class":262},[252,63381,51940],{"class":51440},[252,63383,51447],{"class":262},[252,63385,63386],{"class":254,"line":170},[252,63387,63388],{"class":321},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[252,63390,63391,63393,63395,63397,63399,63401],{"class":254,"line":1318},[252,63392,52284],{"class":262},[252,63394,53961],{"class":51440},[252,63396,53964],{"class":2102},[252,63398,308],{"class":262},[252,63400,62839],{"class":367},[252,63402,51447],{"class":262},[252,63404,63405,63407,63409],{"class":254,"line":1333},[252,63406,52284],{"class":262},[252,63408,51953],{"class":51440},[252,63410,51447],{"class":262},[252,63412,63413],{"class":254,"line":1339},[252,63414,63415],{"class":262},"    \u002F\u002F const btn = document.querySelector('button')\n",[252,63417,63418],{"class":254,"line":1353},[252,63419,63420],{"class":262},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[252,63422,63423],{"class":254,"line":1359},[252,63424,63425],{"class":262},"    \u002F\u002F   console.log(e);\n",[252,63427,63428],{"class":254,"line":1450},[252,63429,63430],{"class":262},"    \u002F\u002F })\n",[252,63432,63433],{"class":254,"line":1456},[252,63434,63435],{"class":262},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[252,63437,63438],{"class":254,"line":1468},[252,63439,63440],{"class":262},"    const input = document.querySelector('input')\n",[252,63442,63443],{"class":254,"line":1751},[252,63444,63445],{"class":262},"    input.addEventListener('keyup', function (e) {\n",[252,63447,63448],{"class":254,"line":1756},[252,63449,63450],{"class":262},"      if (e.key === 'Enter') {\n",[252,63452,63453],{"class":254,"line":1762},[252,63454,63455],{"class":262},"        console.log('我按下了回车键')\n",[252,63457,63458],{"class":254,"line":1767},[252,63459,52538],{"class":262},[252,63461,63462],{"class":254,"line":1781},[252,63463,33601],{"class":262},[252,63465,63466,63468,63470],{"class":254,"line":1786},[252,63467,52557],{"class":262},[252,63469,51953],{"class":51440},[252,63471,51447],{"class":262},[252,63473,63474,63476,63478],{"class":254,"line":1792},[252,63475,51925],{"class":262},[252,63477,51940],{"class":51440},[252,63479,51447],{"class":262},[22137,63481,63483],{"id":63482},"_3263-trim方法","3.2.6.3 trim方法",[19,63485,63486],{},[1601,63487],{"alt":169,"src":63488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63490,63491],{},[1601,63492],{"alt":169,"src":63493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63495,63496],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63498,63499],{},"str.trim()",[224,63501,63503],{"id":63502},"_327-环境对象","3.2.7 环境对象",[19,63505,63506],{},[1601,63507],{"alt":169,"src":63508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63510,63511],{},[1601,63512],{"alt":169,"src":63513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63515,63516],{},[1601,63517],{"alt":169,"src":63518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63520,63521],{},"实际函数调用是window.fn()",[19,63523,63524],{},"普通函数里面this指向的是window",[1270,63526,63527,63530,63533],{},[210,63528,63529],{},"在普通函数下，this指向的是window",[210,63531,63532],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[210,63534,63535],{},"箭头函数没有this",[19,63537,63538],{},"粗略记法就是：谁调用，this就指向谁",[19,63540,63541],{},[1601,63542],{"alt":169,"src":63543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63545,63546],{},[1601,63547],{"alt":169,"src":63548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63550,63551],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63553,63554],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[244,63556,63558],{"className":53207,"code":63557,"language":53209,"meta":169,"style":169},"\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",[22,63559,63560,63568,63580,63588,63593,63598,63603,63608,63612,63620],{"__ignoreMap":169},[252,63561,63562,63564,63566],{"class":254,"line":255},[252,63563,1173],{"class":262},[252,63565,51940],{"class":51440},[252,63567,51447],{"class":262},[252,63569,63570,63572,63574,63576,63578],{"class":254,"line":170},[252,63571,52284],{"class":262},[252,63573,54027],{"class":51440},[252,63575,54033],{"class":262},[252,63577,54027],{"class":51440},[252,63579,51447],{"class":262},[252,63581,63582,63584,63586],{"class":254,"line":1318},[252,63583,52284],{"class":262},[252,63585,51953],{"class":51440},[252,63587,51447],{"class":262},[252,63589,63590],{"class":254,"line":1333},[252,63591,63592],{"class":262},"    const button = document.querySelector('button')\n",[252,63594,63595],{"class":254,"line":1339},[252,63596,63597],{"class":262},"    button.addEventListener('click', function () {\n",[252,63599,63600],{"class":254,"line":1353},[252,63601,63602],{"class":262},"      \u002F\u002F console.log(this);\n",[252,63604,63605],{"class":254,"line":1359},[252,63606,63607],{"class":262},"      this.style.color = 'pink'\n",[252,63609,63610],{"class":254,"line":1450},[252,63611,33601],{"class":262},[252,63613,63614,63616,63618],{"class":254,"line":1456},[252,63615,52557],{"class":262},[252,63617,51953],{"class":51440},[252,63619,51447],{"class":262},[252,63621,63622,63624,63626],{"class":254,"line":1468},[252,63623,51925],{"class":262},[252,63625,51940],{"class":51440},[252,63627,51447],{"class":262},[224,63629,63631],{"id":63630},"_328-回调函数","3.2.8 回调函数",[19,63633,63634],{},[1601,63635],{"alt":169,"src":63636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63638,63639],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63641,11472],{},[1270,63643,63644,63647,63650],{},[210,63645,63646],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[210,63648,63649],{},"回调函数本质还是函数，只不过把它当成参数使用",[210,63651,63652],{},"使用匿名函数做为回调函数比较常见",[224,63654,63656],{"id":63655},"_329-tab栏切换","3.2.9 tab栏切换",[19,63658,63659],{},[1601,63660],{"alt":169,"src":63661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[244,63663,63665],{"className":50773,"code":63664,"language":50775,"meta":169,"style":169},"\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",[22,63666,63667,63677,63691,63695,63703,63717,63737,63757,63770,63778,63784,63794,63804,63808,63812,63819,63832,63845,63857,63873,63877,63881,63888,63900,63912,63924,63934,63944,63948,63952,63961,63973,63984,63996,64000,64004,64012,64022,64032,64042,64046,64050,64060,64074,64086,64090,64094,64106,64117,64134,64144,64148,64152,64167,64178,64188,64192,64196,64203,64218,64222,64226,64234,64244,64248,64252,64261,64271,64275,64283,64291,64295,64303,64318,64333,64346,64354,64388,64415,64442,64469,64496,64504,64512,64527,64564,64599,64634,64669,64704,64712,64720,64728,64733,64738,64758,64763,64792,64797,64802,64820,64825,64830,64835,64857,64862,64878,64882,64887,64892,64913,64918,64947,64951,64956,64960,64968,64976,64980],{"__ignoreMap":169},[252,63668,63669,63671,63673,63675],{"class":254,"line":255},[252,63670,51437],{"class":262},[252,63672,51441],{"class":51440},[252,63674,51444],{"class":2102},[252,63676,51447],{"class":262},[252,63678,63679,63681,63683,63685,63687,63689],{"class":254,"line":170},[252,63680,1173],{"class":262},[252,63682,50775],{"class":51440},[252,63684,51456],{"class":2102},[252,63686,308],{"class":262},[252,63688,51461],{"class":367},[252,63690,51447],{"class":262},[252,63692,63693],{"class":254,"line":1318},[252,63694,2539],{"emptyLinePlaceholder":181},[252,63696,63697,63699,63701],{"class":254,"line":1333},[252,63698,1173],{"class":262},[252,63700,51474],{"class":51440},[252,63702,51447],{"class":262},[252,63704,63705,63707,63709,63711,63713,63715],{"class":254,"line":1339},[252,63706,52284],{"class":262},[252,63708,51484],{"class":51440},[252,63710,51487],{"class":2102},[252,63712,308],{"class":262},[252,63714,51492],{"class":367},[252,63716,59267],{"class":262},[252,63718,63719,63721,63723,63725,63727,63729,63731,63733,63735],{"class":254,"line":1353},[252,63720,52284],{"class":262},[252,63722,51484],{"class":51440},[252,63724,51503],{"class":2102},[252,63726,308],{"class":262},[252,63728,51508],{"class":367},[252,63730,51511],{"class":2102},[252,63732,308],{"class":262},[252,63734,51516],{"class":367},[252,63736,59267],{"class":262},[252,63738,63739,63741,63743,63745,63747,63749,63751,63753,63755],{"class":254,"line":1359},[252,63740,52284],{"class":262},[252,63742,51484],{"class":51440},[252,63744,15060],{"class":2102},[252,63746,308],{"class":262},[252,63748,51531],{"class":367},[252,63750,51511],{"class":2102},[252,63752,308],{"class":262},[252,63754,51538],{"class":367},[252,63756,59267],{"class":262},[252,63758,63759,63761,63763,63766,63768],{"class":254,"line":1450},[252,63760,52284],{"class":262},[252,63762,51547],{"class":51440},[252,63764,63765],{"class":262},">tab栏切换\u003C\u002F",[252,63767,51547],{"class":51440},[252,63769,51447],{"class":262},[252,63771,63772,63774,63776],{"class":254,"line":1456},[252,63773,52284],{"class":262},[252,63775,5266],{"class":51440},[252,63777,51447],{"class":262},[252,63779,63780,63782],{"class":254,"line":1468},[252,63781,6543],{"class":51440},[252,63783,15712],{"class":262},[252,63785,63786,63788,63790,63792],{"class":254,"line":1751},[252,63787,54846],{"class":311},[252,63789,51577],{"class":262},[252,63791,454],{"class":311},[252,63793,1429],{"class":262},[252,63795,63796,63798,63800,63802],{"class":254,"line":1756},[252,63797,54835],{"class":311},[252,63799,51577],{"class":262},[252,63801,454],{"class":311},[252,63803,1429],{"class":262},[252,63805,63806],{"class":254,"line":1762},[252,63807,2326],{"class":262},[252,63809,63810],{"class":254,"line":1767},[252,63811,2539],{"emptyLinePlaceholder":181},[252,63813,63814,63817],{"class":254,"line":1781},[252,63815,63816],{"class":2102},"    .tab",[252,63818,15712],{"class":262},[252,63820,63821,63823,63825,63828,63830],{"class":254,"line":1786},[252,63822,54911],{"class":311},[252,63824,51577],{"class":262},[252,63826,63827],{"class":311},"590",[252,63829,51632],{"class":258},[252,63831,1429],{"class":262},[252,63833,63834,63836,63838,63841,63843],{"class":254,"line":1792},[252,63835,54925],{"class":311},[252,63837,51577],{"class":262},[252,63839,63840],{"class":311},"340",[252,63842,51632],{"class":258},[252,63844,1429],{"class":262},[252,63846,63847,63849,63851,63853,63855],{"class":254,"line":1813},[252,63848,54846],{"class":311},[252,63850,51577],{"class":262},[252,63852,963],{"class":311},[252,63854,51632],{"class":258},[252,63856,1429],{"class":262},[252,63858,63859,63861,63863,63865,63867,63869,63871],{"class":254,"line":1818},[252,63860,62117],{"class":311},[252,63862,51577],{"class":262},[252,63864,480],{"class":311},[252,63866,51632],{"class":258},[252,63868,51661],{"class":311},[252,63870,62384],{"class":311},[252,63872,1429],{"class":262},[252,63874,63875],{"class":254,"line":1832},[252,63876,2326],{"class":262},[252,63878,63879],{"class":254,"line":1837},[252,63880,2539],{"emptyLinePlaceholder":181},[252,63882,63883,63886],{"class":254,"line":1866},[252,63884,63885],{"class":2102},"    .tab-nav",[252,63887,15712],{"class":262},[252,63889,63890,63892,63894,63896,63898],{"class":254,"line":1871},[252,63891,54911],{"class":311},[252,63893,51577],{"class":262},[252,63895,574],{"class":311},[252,63897,591],{"class":258},[252,63899,1429],{"class":262},[252,63901,63902,63904,63906,63908,63910],{"class":254,"line":1888},[252,63903,54925],{"class":311},[252,63905,51577],{"class":262},[252,63907,1170],{"class":311},[252,63909,51632],{"class":258},[252,63911,1429],{"class":262},[252,63913,63914,63916,63918,63920,63922],{"class":254,"line":1893},[252,63915,57499],{"class":311},[252,63917,51577],{"class":262},[252,63919,1170],{"class":311},[252,63921,51632],{"class":258},[252,63923,1429],{"class":262},[252,63925,63926,63928,63930,63932],{"class":254,"line":1898},[252,63927,55149],{"class":311},[252,63929,51577],{"class":262},[252,63931,51617],{"class":311},[252,63933,1429],{"class":262},[252,63935,63936,63938,63940,63942],{"class":254,"line":1903},[252,63937,55160],{"class":311},[252,63939,51577],{"class":262},[252,63941,51808],{"class":311},[252,63943,1429],{"class":262},[252,63945,63946],{"class":254,"line":1917},[252,63947,2326],{"class":262},[252,63949,63950],{"class":254,"line":1922},[252,63951,2539],{"emptyLinePlaceholder":181},[252,63953,63954,63956,63959],{"class":254,"line":2716},[252,63955,63885],{"class":2102},[252,63957,63958],{"class":51440}," h3",[252,63960,15712],{"class":262},[252,63962,63963,63965,63967,63969,63971],{"class":254,"line":2730},[252,63964,55062],{"class":311},[252,63966,51577],{"class":262},[252,63968,1063],{"class":311},[252,63970,51632],{"class":258},[252,63972,1429],{"class":262},[252,63974,63975,63977,63979,63982],{"class":254,"line":2738},[252,63976,62474],{"class":311},[252,63978,51577],{"class":262},[252,63980,63981],{"class":311},"normal",[252,63983,1429],{"class":262},[252,63985,63986,63988,63990,63992,63994],{"class":254,"line":2743},[252,63987,62140],{"class":311},[252,63989,51577],{"class":262},[252,63991,963],{"class":311},[252,63993,51632],{"class":258},[252,63995,1429],{"class":262},[252,63997,63998],{"class":254,"line":2749},[252,63999,2326],{"class":262},[252,64001,64002],{"class":254,"line":2755},[252,64003,2539],{"emptyLinePlaceholder":181},[252,64005,64006,64008,64010],{"class":254,"line":2760},[252,64007,63885],{"class":2102},[252,64009,61432],{"class":51440},[252,64011,15712],{"class":262},[252,64013,64014,64016,64018,64020],{"class":254,"line":8088},[252,64015,54872],{"class":311},[252,64017,51577],{"class":262},[252,64019,54877],{"class":311},[252,64021,1429],{"class":262},[252,64023,64024,64026,64028,64030],{"class":254,"line":8112},[252,64025,55149],{"class":311},[252,64027,51577],{"class":262},[252,64029,51617],{"class":311},[252,64031,1429],{"class":262},[252,64033,64034,64036,64038,64040],{"class":254,"line":8117},[252,64035,55160],{"class":311},[252,64037,51577],{"class":262},[252,64039,51720],{"class":311},[252,64041,1429],{"class":262},[252,64043,64044],{"class":254,"line":8123},[252,64045,2326],{"class":262},[252,64047,64048],{"class":254,"line":8150},[252,64049,2539],{"emptyLinePlaceholder":181},[252,64051,64052,64054,64056,64058],{"class":254,"line":8155},[252,64053,63885],{"class":2102},[252,64055,61432],{"class":51440},[252,64057,55215],{"class":51440},[252,64059,15712],{"class":262},[252,64061,64062,64064,64066,64068,64070,64072],{"class":254,"line":8161},[252,64063,54846],{"class":311},[252,64065,51577],{"class":262},[252,64067,454],{"class":311},[252,64069,9090],{"class":311},[252,64071,51632],{"class":258},[252,64073,1429],{"class":262},[252,64075,64076,64078,64080,64082,64084],{"class":254,"line":8173},[252,64077,55062],{"class":311},[252,64079,51577],{"class":262},[252,64081,812],{"class":311},[252,64083,51632],{"class":258},[252,64085,1429],{"class":262},[252,64087,64088],{"class":254,"line":8185},[252,64089,2326],{"class":262},[252,64091,64092],{"class":254,"line":8197},[252,64093,2539],{"emptyLinePlaceholder":181},[252,64095,64096,64098,64100,64102,64104],{"class":254,"line":9856},[252,64097,63885],{"class":2102},[252,64099,61432],{"class":51440},[252,64101,55215],{"class":51440},[252,64103,1537],{"class":51440},[252,64105,15712],{"class":262},[252,64107,64108,64111,64113,64115],{"class":254,"line":9881},[252,64109,64110],{"class":311},"      text-decoration",[252,64112,51577],{"class":262},[252,64114,54877],{"class":311},[252,64116,1429],{"class":262},[252,64118,64119,64121,64123,64125,64127,64129,64132],{"class":254,"line":9904},[252,64120,62372],{"class":311},[252,64122,51577],{"class":262},[252,64124,340],{"class":311},[252,64126,51632],{"class":258},[252,64128,51661],{"class":311},[252,64130,64131],{"class":311}," transparent",[252,64133,1429],{"class":262},[252,64135,64136,64138,64140,64142],{"class":254,"line":9928},[252,64137,57556],{"class":311},[252,64139,51577],{"class":262},[252,64141,62509],{"class":311},[252,64143,1429],{"class":262},[252,64145,64146],{"class":254,"line":9933},[252,64147,2326],{"class":262},[252,64149,64150],{"class":254,"line":9938},[252,64151,2539],{"emptyLinePlaceholder":181},[252,64153,64154,64156,64158,64160,64162,64165],{"class":254,"line":9943},[252,64155,63885],{"class":2102},[252,64157,61432],{"class":51440},[252,64159,55215],{"class":51440},[252,64161,1537],{"class":51440},[252,64163,64164],{"class":2102},".active",[252,64166,15712],{"class":262},[252,64168,64169,64171,64173,64176],{"class":254,"line":9952},[252,64170,61931],{"class":311},[252,64172,51577],{"class":262},[252,64174,64175],{"class":311},"#e1251b",[252,64177,1429],{"class":262},[252,64179,64180,64182,64184,64186],{"class":254,"line":9957},[252,64181,57556],{"class":311},[252,64183,51577],{"class":262},[252,64185,64175],{"class":311},[252,64187,1429],{"class":262},[252,64189,64190],{"class":254,"line":9963},[252,64191,2326],{"class":262},[252,64193,64194],{"class":254,"line":9984},[252,64195,2539],{"emptyLinePlaceholder":181},[252,64197,64198,64201],{"class":254,"line":9990},[252,64199,64200],{"class":2102},"    .tab-content",[252,64202,15712],{"class":262},[252,64204,64205,64207,64209,64211,64214,64216],{"class":254,"line":10004},[252,64206,54835],{"class":311},[252,64208,51577],{"class":262},[252,64210,454],{"class":311},[252,64212,64213],{"class":311}," 16",[252,64215,51632],{"class":258},[252,64217,1429],{"class":262},[252,64219,64220],{"class":254,"line":10010},[252,64221,2326],{"class":262},[252,64223,64224],{"class":254,"line":10037},[252,64225,2539],{"emptyLinePlaceholder":181},[252,64227,64228,64230,64232],{"class":254,"line":10046},[252,64229,64200],{"class":2102},[252,64231,62314],{"class":2102},[252,64233,15712],{"class":262},[252,64235,64236,64238,64240,64242],{"class":254,"line":10052},[252,64237,55149],{"class":311},[252,64239,51577],{"class":262},[252,64241,54877],{"class":311},[252,64243,1429],{"class":262},[252,64245,64246],{"class":254,"line":10060},[252,64247,2326],{"class":262},[252,64249,64250],{"class":254,"line":10065},[252,64251,2539],{"emptyLinePlaceholder":181},[252,64253,64254,64256,64259],{"class":254,"line":16744},[252,64255,64200],{"class":2102},[252,64257,64258],{"class":2102}," .item.active",[252,64260,15712],{"class":262},[252,64262,64263,64265,64267,64269],{"class":254,"line":16750},[252,64264,55149],{"class":311},[252,64266,51577],{"class":262},[252,64268,61009],{"class":311},[252,64270,1429],{"class":262},[252,64272,64273],{"class":254,"line":16773},[252,64274,2326],{"class":262},[252,64276,64277,64279,64281],{"class":254,"line":16779},[252,64278,52557],{"class":262},[252,64280,5266],{"class":51440},[252,64282,51447],{"class":262},[252,64284,64285,64287,64289],{"class":254,"line":16802},[252,64286,51925],{"class":262},[252,64288,51474],{"class":51440},[252,64290,51447],{"class":262},[252,64292,64293],{"class":254,"line":16816},[252,64294,2539],{"emptyLinePlaceholder":181},[252,64296,64297,64299,64301],{"class":254,"line":16836},[252,64298,1173],{"class":262},[252,64300,51940],{"class":51440},[252,64302,51447],{"class":262},[252,64304,64305,64307,64309,64311,64313,64316],{"class":254,"line":16842},[252,64306,52284],{"class":262},[252,64308,51751],{"class":51440},[252,64310,53626],{"class":2102},[252,64312,308],{"class":262},[252,64314,64315],{"class":367},"\"tab\"",[252,64317,51447],{"class":262},[252,64319,64320,64322,64324,64326,64328,64331],{"class":254,"line":16853},[252,64321,51481],{"class":262},[252,64323,51751],{"class":51440},[252,64325,53626],{"class":2102},[252,64327,308],{"class":262},[252,64329,64330],{"class":367},"\"tab-nav\"",[252,64332,51447],{"class":262},[252,64334,64335,64337,64339,64342,64344],{"class":254,"line":16876},[252,64336,55374],{"class":262},[252,64338,224],{"class":51440},[252,64340,64341],{"class":262},">每日特价\u003C\u002F",[252,64343,224],{"class":51440},[252,64345,51447],{"class":262},[252,64347,64348,64350,64352],{"class":254,"line":16898},[252,64349,55374],{"class":262},[252,64351,1270],{"class":51440},[252,64353,51447],{"class":262},[252,64355,64356,64358,64360,64362,64364,64366,64368,64370,64372,64374,64377,64380,64382,64384,64386],{"class":254,"line":16903},[252,64357,55442],{"class":262},[252,64359,210],{"class":51440},[252,64361,61192],{"class":262},[252,64363,501],{"class":51440},[252,64365,53626],{"class":2102},[252,64367,308],{"class":262},[252,64369,59846],{"class":367},[252,64371,61197],{"class":2102},[252,64373,308],{"class":262},[252,64375,64376],{"class":367},"\"javascript:;\"",[252,64378,64379],{"class":262},">精选\u003C\u002F",[252,64381,501],{"class":51440},[252,64383,55454],{"class":262},[252,64385,210],{"class":51440},[252,64387,51447],{"class":262},[252,64389,64390,64392,64394,64396,64398,64400,64402,64404,64407,64409,64411,64413],{"class":254,"line":16909},[252,64391,55442],{"class":262},[252,64393,210],{"class":51440},[252,64395,61192],{"class":262},[252,64397,501],{"class":51440},[252,64399,61197],{"class":2102},[252,64401,308],{"class":262},[252,64403,64376],{"class":367},[252,64405,64406],{"class":262},">美食\u003C\u002F",[252,64408,501],{"class":51440},[252,64410,55454],{"class":262},[252,64412,210],{"class":51440},[252,64414,51447],{"class":262},[252,64416,64417,64419,64421,64423,64425,64427,64429,64431,64434,64436,64438,64440],{"class":254,"line":16923},[252,64418,55442],{"class":262},[252,64420,210],{"class":51440},[252,64422,61192],{"class":262},[252,64424,501],{"class":51440},[252,64426,61197],{"class":2102},[252,64428,308],{"class":262},[252,64430,64376],{"class":367},[252,64432,64433],{"class":262},">百货\u003C\u002F",[252,64435,501],{"class":51440},[252,64437,55454],{"class":262},[252,64439,210],{"class":51440},[252,64441,51447],{"class":262},[252,64443,64444,64446,64448,64450,64452,64454,64456,64458,64461,64463,64465,64467],{"class":254,"line":16936},[252,64445,55442],{"class":262},[252,64447,210],{"class":51440},[252,64449,61192],{"class":262},[252,64451,501],{"class":51440},[252,64453,61197],{"class":2102},[252,64455,308],{"class":262},[252,64457,64376],{"class":367},[252,64459,64460],{"class":262},">个护\u003C\u002F",[252,64462,501],{"class":51440},[252,64464,55454],{"class":262},[252,64466,210],{"class":51440},[252,64468,51447],{"class":262},[252,64470,64471,64473,64475,64477,64479,64481,64483,64485,64488,64490,64492,64494],{"class":254,"line":16941},[252,64472,55442],{"class":262},[252,64474,210],{"class":51440},[252,64476,61192],{"class":262},[252,64478,501],{"class":51440},[252,64480,61197],{"class":2102},[252,64482,308],{"class":262},[252,64484,64376],{"class":367},[252,64486,64487],{"class":262},">预告\u003C\u002F",[252,64489,501],{"class":51440},[252,64491,55454],{"class":262},[252,64493,210],{"class":51440},[252,64495,51447],{"class":262},[252,64497,64498,64500,64502],{"class":254,"line":16955},[252,64499,55547],{"class":262},[252,64501,1270],{"class":51440},[252,64503,51447],{"class":262},[252,64505,64506,64508,64510],{"class":254,"line":16960},[252,64507,51916],{"class":262},[252,64509,51751],{"class":51440},[252,64511,51447],{"class":262},[252,64513,64514,64516,64518,64520,64522,64525],{"class":254,"line":16966},[252,64515,51481],{"class":262},[252,64517,51751],{"class":51440},[252,64519,53626],{"class":2102},[252,64521,308],{"class":262},[252,64523,64524],{"class":367},"\"tab-content\"",[252,64526,51447],{"class":262},[252,64528,64529,64531,64533,64535,64537,64540,64542,64544,64546,64548,64551,64553,64555,64557,64560,64562],{"class":254,"line":16971},[252,64530,55374],{"class":262},[252,64532,51751],{"class":51440},[252,64534,53626],{"class":2102},[252,64536,308],{"class":262},[252,64538,64539],{"class":367},"\"item active\"",[252,64541,61192],{"class":262},[252,64543,1601],{"class":51440},[252,64545,55379],{"class":2102},[252,64547,308],{"class":262},[252,64549,64550],{"class":367},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[252,64552,55387],{"class":2102},[252,64554,308],{"class":262},[252,64556,7792],{"class":367},[252,64558,64559],{"class":262}," \u002F>\u003C\u002F",[252,64561,51751],{"class":51440},[252,64563,51447],{"class":262},[252,64565,64566,64568,64570,64572,64574,64576,64578,64580,64582,64584,64587,64589,64591,64593,64595,64597],{"class":254,"line":16985},[252,64567,55374],{"class":262},[252,64569,51751],{"class":51440},[252,64571,53626],{"class":2102},[252,64573,308],{"class":262},[252,64575,62763],{"class":367},[252,64577,61192],{"class":262},[252,64579,1601],{"class":51440},[252,64581,55379],{"class":2102},[252,64583,308],{"class":262},[252,64585,64586],{"class":367},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[252,64588,55387],{"class":2102},[252,64590,308],{"class":262},[252,64592,7792],{"class":367},[252,64594,64559],{"class":262},[252,64596,51751],{"class":51440},[252,64598,51447],{"class":262},[252,64600,64601,64603,64605,64607,64609,64611,64613,64615,64617,64619,64622,64624,64626,64628,64630,64632],{"class":254,"line":16990},[252,64602,55374],{"class":262},[252,64604,51751],{"class":51440},[252,64606,53626],{"class":2102},[252,64608,308],{"class":262},[252,64610,62763],{"class":367},[252,64612,61192],{"class":262},[252,64614,1601],{"class":51440},[252,64616,55379],{"class":2102},[252,64618,308],{"class":262},[252,64620,64621],{"class":367},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[252,64623,55387],{"class":2102},[252,64625,308],{"class":262},[252,64627,7792],{"class":367},[252,64629,64559],{"class":262},[252,64631,51751],{"class":51440},[252,64633,51447],{"class":262},[252,64635,64636,64638,64640,64642,64644,64646,64648,64650,64652,64654,64657,64659,64661,64663,64665,64667],{"class":254,"line":16995},[252,64637,55374],{"class":262},[252,64639,51751],{"class":51440},[252,64641,53626],{"class":2102},[252,64643,308],{"class":262},[252,64645,62763],{"class":367},[252,64647,61192],{"class":262},[252,64649,1601],{"class":51440},[252,64651,55379],{"class":2102},[252,64653,308],{"class":262},[252,64655,64656],{"class":367},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[252,64658,55387],{"class":2102},[252,64660,308],{"class":262},[252,64662,7792],{"class":367},[252,64664,64559],{"class":262},[252,64666,51751],{"class":51440},[252,64668,51447],{"class":262},[252,64670,64671,64673,64675,64677,64679,64681,64683,64685,64687,64689,64692,64694,64696,64698,64700,64702],{"class":254,"line":17009},[252,64672,55374],{"class":262},[252,64674,51751],{"class":51440},[252,64676,53626],{"class":2102},[252,64678,308],{"class":262},[252,64680,62763],{"class":367},[252,64682,61192],{"class":262},[252,64684,1601],{"class":51440},[252,64686,55379],{"class":2102},[252,64688,308],{"class":262},[252,64690,64691],{"class":367},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[252,64693,55387],{"class":2102},[252,64695,308],{"class":262},[252,64697,7792],{"class":367},[252,64699,64559],{"class":262},[252,64701,51751],{"class":51440},[252,64703,51447],{"class":262},[252,64705,64706,64708,64710],{"class":254,"line":17021},[252,64707,51916],{"class":262},[252,64709,51751],{"class":51440},[252,64711,51447],{"class":262},[252,64713,64714,64716,64718],{"class":254,"line":17026},[252,64715,52557],{"class":262},[252,64717,51751],{"class":51440},[252,64719,51447],{"class":262},[252,64721,64722,64724,64726],{"class":254,"line":17039},[252,64723,52284],{"class":262},[252,64725,51953],{"class":51440},[252,64727,51447],{"class":262},[252,64729,64730],{"class":254,"line":17044},[252,64731,64732],{"class":321},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[252,64734,64735],{"class":254,"line":17049},[252,64736,64737],{"class":321},"    \u002F\u002F 1.1 获取 a 元素 \n",[252,64739,64740,64742,64745,64747,64749,64751,64753,64756],{"class":254,"line":17054},[252,64741,11361],{"class":258},[252,64743,64744],{"class":311}," as",[252,64746,13704],{"class":258},[252,64748,54536],{"class":262},[252,64750,55821],{"class":2102},[252,64752,263],{"class":262},[252,64754,64755],{"class":367},"'.tab-nav a'",[252,64757,269],{"class":262},[252,64759,64760],{"class":254,"line":17067},[252,64761,64762],{"class":321},"    \u002F\u002F console.log(as) \n",[252,64764,64765,64767,64769,64771,64773,64775,64777,64779,64781,64784,64786,64788,64790],{"class":254,"line":17072},[252,64766,3340],{"class":258},[252,64768,1797],{"class":262},[252,64770,51987],{"class":258},[252,64772,9578],{"class":262},[252,64774,308],{"class":258},[252,64776,4232],{"class":311},[252,64778,9585],{"class":262},[252,64780,1173],{"class":258},[252,64782,64783],{"class":262}," as.",[252,64785,52108],{"class":311},[252,64787,3353],{"class":262},[252,64789,2431],{"class":258},[252,64791,12582],{"class":262},[252,64793,64794],{"class":254,"line":32773},[252,64795,64796],{"class":321},"      \u002F\u002F console.log(as[i])\n",[252,64798,64799],{"class":254,"line":32779},[252,64800,64801],{"class":321},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[252,64803,64804,64807,64809,64811,64814,64816,64818],{"class":254,"line":32785},[252,64805,64806],{"class":262},"      as[i].",[252,64808,57953],{"class":2102},[252,64810,263],{"class":262},[252,64812,64813],{"class":367},"'mouseenter'",[252,64815,12575],{"class":262},[252,64817,54589],{"class":258},[252,64819,54592],{"class":262},[252,64821,64822],{"class":254,"line":32791},[252,64823,64824],{"class":321},"        \u002F\u002F console.log('鼠标经过')\n",[252,64826,64827],{"class":254,"line":32797},[252,64828,64829],{"class":321},"        \u002F\u002F 排他思想  \n",[252,64831,64832],{"class":254,"line":32808},[252,64833,64834],{"class":321},"        \u002F\u002F 干掉别人 移除类active\n",[252,64836,64837,64839,64841,64843,64846,64848,64850,64852,64855],{"class":254,"line":32814},[252,64838,52065],{"class":262},[252,64840,54539],{"class":2102},[252,64842,263],{"class":262},[252,64844,64845],{"class":367},"'.tab-nav .active'",[252,64847,57143],{"class":262},[252,64849,57146],{"class":2102},[252,64851,263],{"class":262},[252,64853,64854],{"class":367},"'active'",[252,64856,269],{"class":262},[252,64858,64859],{"class":254,"line":32834},[252,64860,64861],{"class":321},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[252,64863,64864,64867,64870,64872,64874,64876],{"class":254,"line":32840},[252,64865,64866],{"class":311},"        this",[252,64868,64869],{"class":262},".classList.",[252,64871,5474],{"class":2102},[252,64873,263],{"class":262},[252,64875,64854],{"class":367},[252,64877,269],{"class":262},[252,64879,64880],{"class":254,"line":32851},[252,64881,2539],{"emptyLinePlaceholder":181},[252,64883,64884],{"class":254,"line":32857},[252,64885,64886],{"class":321},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[252,64888,64889],{"class":254,"line":32863},[252,64890,64891],{"class":321},"        \u002F\u002F 干掉别人\n",[252,64893,64894,64896,64898,64900,64903,64905,64907,64909,64911],{"class":254,"line":32869},[252,64895,52065],{"class":262},[252,64897,54539],{"class":2102},[252,64899,263],{"class":262},[252,64901,64902],{"class":367},"'.tab-content .active'",[252,64904,57143],{"class":262},[252,64906,57146],{"class":2102},[252,64908,263],{"class":262},[252,64910,64854],{"class":367},[252,64912,269],{"class":262},[252,64914,64915],{"class":254,"line":32875},[252,64916,64917],{"class":321},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[252,64919,64920,64922,64924,64926,64929,64931,64933,64935,64937,64939,64941,64943,64945],{"class":254,"line":32881},[252,64921,52065],{"class":262},[252,64923,54539],{"class":2102},[252,64925,263],{"class":262},[252,64927,64928],{"class":367},"`.tab-content .item:nth-child(${",[252,64930,704],{"class":262},[252,64932,45706],{"class":258},[252,64934,25258],{"class":311},[252,64936,57172],{"class":367},[252,64938,57143],{"class":262},[252,64940,5474],{"class":2102},[252,64942,263],{"class":262},[252,64944,64854],{"class":367},[252,64946,269],{"class":262},[252,64948,64949],{"class":254,"line":32887},[252,64950,2539],{"emptyLinePlaceholder":181},[252,64952,64953],{"class":254,"line":32893},[252,64954,64955],{"class":262},"      })\n",[252,64957,64958],{"class":254,"line":32913},[252,64959,2326],{"class":262},[252,64961,64962,64964,64966],{"class":254,"line":32919},[252,64963,52557],{"class":262},[252,64965,51953],{"class":51440},[252,64967,51447],{"class":262},[252,64969,64970,64972,64974],{"class":254,"line":32935},[252,64971,51925],{"class":262},[252,64973,51940],{"class":51440},[252,64975,51447],{"class":262},[252,64977,64978],{"class":254,"line":32941},[252,64979,2539],{"emptyLinePlaceholder":181},[252,64981,64982,64984,64986],{"class":254,"line":32955},[252,64983,51925],{"class":262},[252,64985,50775],{"class":51440},[252,64987,51447],{"class":262},[19,64989,64990],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,64992,64993],{},"在监听事件中，this指向的就是他的调用者",[19,64995,64996],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,64998,53860],{},[19,65000,65001],{},"(function () {",[19,65003,65004],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65006,65007],{},"list.addEventListener('click', function (e) {",[19,65009,65010],{},"if (e.target.tagName === 'A') {",[19,65012,65013],{},"\u002F\u002F 排他思想",[19,65015,65016],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65018,65019],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65021,65022],{},"\u002F\u002F console.log(old);",[19,65024,65025],{},"\u002F\u002F 判断",[19,65027,65028],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65030,65031],{},"if (old) old.classList.remove('active')",[19,65033,65034],{},"e.target.classList.add('active')",[19,65036,1209],{},[19,65038,52604],{},[19,65040,65041],{},"})();",[224,65043,65045],{"id":65044},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[244,65047,65049],{"className":50773,"code":65048,"language":50775,"meta":169,"style":169},"\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",[22,65050,65051,65061,65065,65073,65077,65091,65105,65117,65125,65131,65141,65151,65155,65159,65166,65178,65189,65206,65219,65233,65243,65247,65251,65258,65269,65287,65297,65309,65313,65317,65324,65341,65352,65364,65368,65372,65379,65391,65395,65403,65411,65415,65423,65431,65439,65454,65498,65506,65519,65532,65545,65553,65561,65569,65597,65605,65617,65630,65643,65651,65659,65667,65693,65701,65714,65726,65739,65747,65755,65763,65789,65797,65810,65822,65835,65843,65851,65859,65864,65884,65889,65909,65914,65931,65936,65944,65949,65978,65991,65995,65999,66004,66008,66036,66041,66058,66063,66068,66073,66078,66104,66108,66112,66120,66128,66132],{"__ignoreMap":169},[252,65052,65053,65055,65057,65059],{"class":254,"line":255},[252,65054,51437],{"class":262},[252,65056,51441],{"class":51440},[252,65058,51444],{"class":2102},[252,65060,51447],{"class":262},[252,65062,65063],{"class":254,"line":170},[252,65064,2539],{"emptyLinePlaceholder":181},[252,65066,65067,65069,65071],{"class":254,"line":1318},[252,65068,1173],{"class":262},[252,65070,50775],{"class":51440},[252,65072,51447],{"class":262},[252,65074,65075],{"class":254,"line":1333},[252,65076,2539],{"emptyLinePlaceholder":181},[252,65078,65079,65081,65083,65085,65087,65089],{"class":254,"line":1339},[252,65080,1173],{"class":262},[252,65082,51474],{"class":51440},[252,65084,51456],{"class":2102},[252,65086,308],{"class":262},[252,65088,51461],{"class":367},[252,65090,51447],{"class":262},[252,65092,65093,65095,65097,65099,65101,65103],{"class":254,"line":1353},[252,65094,52284],{"class":262},[252,65096,51484],{"class":51440},[252,65098,51487],{"class":2102},[252,65100,308],{"class":262},[252,65102,51492],{"class":367},[252,65104,51447],{"class":262},[252,65106,65107,65109,65111,65113,65115],{"class":254,"line":1359},[252,65108,52284],{"class":262},[252,65110,51547],{"class":51440},[252,65112,55454],{"class":262},[252,65114,51547],{"class":51440},[252,65116,51447],{"class":262},[252,65118,65119,65121,65123],{"class":254,"line":1450},[252,65120,52284],{"class":262},[252,65122,5266],{"class":51440},[252,65124,51447],{"class":262},[252,65126,65127,65129],{"class":254,"line":1456},[252,65128,6543],{"class":51440},[252,65130,15712],{"class":262},[252,65132,65133,65135,65137,65139],{"class":254,"line":1468},[252,65134,54846],{"class":311},[252,65136,51577],{"class":262},[252,65138,454],{"class":311},[252,65140,1429],{"class":262},[252,65142,65143,65145,65147,65149],{"class":254,"line":1751},[252,65144,54835],{"class":311},[252,65146,51577],{"class":262},[252,65148,454],{"class":311},[252,65150,1429],{"class":262},[252,65152,65153],{"class":254,"line":1756},[252,65154,2326],{"class":262},[252,65156,65157],{"class":254,"line":1762},[252,65158,2539],{"emptyLinePlaceholder":181},[252,65160,65161,65164],{"class":254,"line":1767},[252,65162,65163],{"class":51440},"    table",[252,65165,15712],{"class":262},[252,65167,65168,65171,65173,65176],{"class":254,"line":1781},[252,65169,65170],{"class":311},"      border-collapse",[252,65172,51577],{"class":262},[252,65174,65175],{"class":311},"collapse",[252,65177,1429],{"class":262},[252,65179,65180,65183,65185,65187],{"class":254,"line":1786},[252,65181,65182],{"class":311},"      border-spacing",[252,65184,51577],{"class":262},[252,65186,454],{"class":311},[252,65188,1429],{"class":262},[252,65190,65191,65193,65195,65197,65199,65201,65204],{"class":254,"line":1792},[252,65192,62117],{"class":311},[252,65194,51577],{"class":262},[252,65196,480],{"class":311},[252,65198,51632],{"class":258},[252,65200,51661],{"class":311},[252,65202,65203],{"class":311}," #c0c0c0",[252,65205,1429],{"class":262},[252,65207,65208,65210,65212,65215,65217],{"class":254,"line":1813},[252,65209,54911],{"class":311},[252,65211,51577],{"class":262},[252,65213,65214],{"class":311},"500",[252,65216,51632],{"class":258},[252,65218,1429],{"class":262},[252,65220,65221,65223,65225,65227,65229,65231],{"class":254,"line":1818},[252,65222,54846],{"class":311},[252,65224,51577],{"class":262},[252,65226,574],{"class":311},[252,65228,51632],{"class":258},[252,65230,51696],{"class":311},[252,65232,1429],{"class":262},[252,65234,65235,65237,65239,65241],{"class":254,"line":1832},[252,65236,57426],{"class":311},[252,65238,51577],{"class":262},[252,65240,51732],{"class":311},[252,65242,1429],{"class":262},[252,65244,65245],{"class":254,"line":1837},[252,65246,2326],{"class":262},[252,65248,65249],{"class":254,"line":1866},[252,65250,2539],{"emptyLinePlaceholder":181},[252,65252,65253,65256],{"class":254,"line":1871},[252,65254,65255],{"class":51440},"    th",[252,65257,15712],{"class":262},[252,65259,65260,65262,65264,65267],{"class":254,"line":1888},[252,65261,55024],{"class":311},[252,65263,51577],{"class":262},[252,65265,65266],{"class":311},"#09c",[252,65268,1429],{"class":262},[252,65270,65271,65274,65276,65278,65280,65282,65285],{"class":254,"line":1893},[252,65272,65273],{"class":311},"      font",[252,65275,51577],{"class":262},[252,65277,62479],{"class":311},[252,65279,64213],{"class":311},[252,65281,51632],{"class":258},[252,65283,65284],{"class":367}," \"微软雅黑\"",[252,65286,1429],{"class":262},[252,65288,65289,65291,65293,65295],{"class":254,"line":1898},[252,65290,57556],{"class":311},[252,65292,51577],{"class":262},[252,65294,60982],{"class":311},[252,65296,1429],{"class":262},[252,65298,65299,65301,65303,65305,65307],{"class":254,"line":1903},[252,65300,54925],{"class":311},[252,65302,51577],{"class":262},[252,65304,1063],{"class":311},[252,65306,51632],{"class":258},[252,65308,1429],{"class":262},[252,65310,65311],{"class":254,"line":1917},[252,65312,2326],{"class":262},[252,65314,65315],{"class":254,"line":1922},[252,65316,2539],{"emptyLinePlaceholder":181},[252,65318,65319,65322],{"class":254,"line":2716},[252,65320,65321],{"class":51440},"    td",[252,65323,15712],{"class":262},[252,65325,65326,65328,65330,65332,65334,65336,65339],{"class":254,"line":2730},[252,65327,62117],{"class":311},[252,65329,51577],{"class":262},[252,65331,480],{"class":311},[252,65333,51632],{"class":258},[252,65335,51661],{"class":311},[252,65337,65338],{"class":311}," #d0d0d0",[252,65340,1429],{"class":262},[252,65342,65343,65345,65347,65350],{"class":254,"line":2738},[252,65344,57556],{"class":311},[252,65346,51577],{"class":262},[252,65348,65349],{"class":311},"#404060",[252,65351,1429],{"class":262},[252,65353,65354,65356,65358,65360,65362],{"class":254,"line":2743},[252,65355,54835],{"class":311},[252,65357,51577],{"class":262},[252,65359,709],{"class":311},[252,65361,51632],{"class":258},[252,65363,1429],{"class":262},[252,65365,65366],{"class":254,"line":2749},[252,65367,2326],{"class":262},[252,65369,65370],{"class":254,"line":2755},[252,65371,2539],{"emptyLinePlaceholder":181},[252,65373,65374,65377],{"class":254,"line":2760},[252,65375,65376],{"class":2102},"    .allCheck",[252,65378,15712],{"class":262},[252,65380,65381,65383,65385,65387,65389],{"class":254,"line":8088},[252,65382,54911],{"class":311},[252,65384,51577],{"class":262},[252,65386,875],{"class":311},[252,65388,51632],{"class":258},[252,65390,1429],{"class":262},[252,65392,65393],{"class":254,"line":8112},[252,65394,2326],{"class":262},[252,65396,65397,65399,65401],{"class":254,"line":8117},[252,65398,52557],{"class":262},[252,65400,5266],{"class":51440},[252,65402,51447],{"class":262},[252,65404,65405,65407,65409],{"class":254,"line":8123},[252,65406,51925],{"class":262},[252,65408,51474],{"class":51440},[252,65410,51447],{"class":262},[252,65412,65413],{"class":254,"line":8150},[252,65414,2539],{"emptyLinePlaceholder":181},[252,65416,65417,65419,65421],{"class":254,"line":8155},[252,65418,1173],{"class":262},[252,65420,51940],{"class":51440},[252,65422,51447],{"class":262},[252,65424,65425,65427,65429],{"class":254,"line":8161},[252,65426,52284],{"class":262},[252,65428,400],{"class":51440},[252,65430,51447],{"class":262},[252,65432,65433,65435,65437],{"class":254,"line":8173},[252,65434,51481],{"class":262},[252,65436,406],{"class":51440},[252,65438,51447],{"class":262},[252,65440,65441,65443,65445,65447,65449,65452],{"class":254,"line":8185},[252,65442,55374],{"class":262},[252,65444,409],{"class":51440},[252,65446,53626],{"class":2102},[252,65448,308],{"class":262},[252,65450,65451],{"class":367},"\"allCheck\"",[252,65453,51447],{"class":262},[252,65455,65456,65458,65460,65462,65464,65466,65468,65470,65472,65474,65476,65479,65482,65484,65486,65488,65491,65494,65496],{"class":254,"line":8197},[252,65457,55442],{"class":262},[252,65459,53961],{"class":51440},[252,65461,53964],{"class":2102},[252,65463,308],{"class":262},[252,65465,53969],{"class":367},[252,65467,15060],{"class":2102},[252,65469,308],{"class":262},[252,65471,7792],{"class":367},[252,65473,15099],{"class":2102},[252,65475,308],{"class":262},[252,65477,65478],{"class":367},"\"checkAll\"",[252,65480,65481],{"class":262},"> \u003C",[252,65483,252],{"class":51440},[252,65485,53626],{"class":2102},[252,65487,308],{"class":262},[252,65489,65490],{"class":367},"\"all\"",[252,65492,65493],{"class":262},">全选\u003C\u002F",[252,65495,252],{"class":51440},[252,65497,51447],{"class":262},[252,65499,65500,65502,65504],{"class":254,"line":9856},[252,65501,55547],{"class":262},[252,65503,409],{"class":51440},[252,65505,51447],{"class":262},[252,65507,65508,65510,65512,65515,65517],{"class":254,"line":9881},[252,65509,55374],{"class":262},[252,65511,409],{"class":51440},[252,65513,65514],{"class":262},">商品\u003C\u002F",[252,65516,409],{"class":51440},[252,65518,51447],{"class":262},[252,65520,65521,65523,65525,65528,65530],{"class":254,"line":9904},[252,65522,55374],{"class":262},[252,65524,409],{"class":51440},[252,65526,65527],{"class":262},">商家\u003C\u002F",[252,65529,409],{"class":51440},[252,65531,51447],{"class":262},[252,65533,65534,65536,65538,65541,65543],{"class":254,"line":9928},[252,65535,55374],{"class":262},[252,65537,409],{"class":51440},[252,65539,65540],{"class":262},">价格\u003C\u002F",[252,65542,409],{"class":51440},[252,65544,51447],{"class":262},[252,65546,65547,65549,65551],{"class":254,"line":9933},[252,65548,51916],{"class":262},[252,65550,406],{"class":51440},[252,65552,51447],{"class":262},[252,65554,65555,65557,65559],{"class":254,"line":9938},[252,65556,51481],{"class":262},[252,65558,406],{"class":51440},[252,65560,51447],{"class":262},[252,65562,65563,65565,65567],{"class":254,"line":9943},[252,65564,55374],{"class":262},[252,65566,452],{"class":51440},[252,65568,51447],{"class":262},[252,65570,65571,65573,65575,65577,65579,65581,65583,65585,65588,65590,65592,65595],{"class":254,"line":9952},[252,65572,55442],{"class":262},[252,65574,53961],{"class":51440},[252,65576,53964],{"class":2102},[252,65578,308],{"class":262},[252,65580,53969],{"class":367},[252,65582,15060],{"class":2102},[252,65584,308],{"class":262},[252,65586,65587],{"class":367},"\"check\"",[252,65589,53626],{"class":2102},[252,65591,308],{"class":262},[252,65593,65594],{"class":367},"\"ck\"",[252,65596,51447],{"class":262},[252,65598,65599,65601,65603],{"class":254,"line":9957},[252,65600,55547],{"class":262},[252,65602,452],{"class":51440},[252,65604,51447],{"class":262},[252,65606,65607,65609,65611,65613,65615],{"class":254,"line":9963},[252,65608,55374],{"class":262},[252,65610,452],{"class":51440},[252,65612,61313],{"class":262},[252,65614,452],{"class":51440},[252,65616,51447],{"class":262},[252,65618,65619,65621,65623,65626,65628],{"class":254,"line":9984},[252,65620,55374],{"class":262},[252,65622,452],{"class":51440},[252,65624,65625],{"class":262},">小米\u003C\u002F",[252,65627,452],{"class":51440},[252,65629,51447],{"class":262},[252,65631,65632,65634,65636,65639,65641],{"class":254,"line":9990},[252,65633,55374],{"class":262},[252,65635,452],{"class":51440},[252,65637,65638],{"class":262},">￥1999\u003C\u002F",[252,65640,452],{"class":51440},[252,65642,51447],{"class":262},[252,65644,65645,65647,65649],{"class":254,"line":10004},[252,65646,51916],{"class":262},[252,65648,406],{"class":51440},[252,65650,51447],{"class":262},[252,65652,65653,65655,65657],{"class":254,"line":10010},[252,65654,51481],{"class":262},[252,65656,406],{"class":51440},[252,65658,51447],{"class":262},[252,65660,65661,65663,65665],{"class":254,"line":10037},[252,65662,55374],{"class":262},[252,65664,452],{"class":51440},[252,65666,51447],{"class":262},[252,65668,65669,65671,65673,65675,65677,65679,65681,65683,65685,65687,65689,65691],{"class":254,"line":10046},[252,65670,55442],{"class":262},[252,65672,53961],{"class":51440},[252,65674,53964],{"class":2102},[252,65676,308],{"class":262},[252,65678,53969],{"class":367},[252,65680,15060],{"class":2102},[252,65682,308],{"class":262},[252,65684,65587],{"class":367},[252,65686,53626],{"class":2102},[252,65688,308],{"class":262},[252,65690,65594],{"class":367},[252,65692,51447],{"class":262},[252,65694,65695,65697,65699],{"class":254,"line":10052},[252,65696,55547],{"class":262},[252,65698,452],{"class":51440},[252,65700,51447],{"class":262},[252,65702,65703,65705,65707,65710,65712],{"class":254,"line":10060},[252,65704,55374],{"class":262},[252,65706,452],{"class":51440},[252,65708,65709],{"class":262},">小米净水器\u003C\u002F",[252,65711,452],{"class":51440},[252,65713,51447],{"class":262},[252,65715,65716,65718,65720,65722,65724],{"class":254,"line":10065},[252,65717,55374],{"class":262},[252,65719,452],{"class":51440},[252,65721,65625],{"class":262},[252,65723,452],{"class":51440},[252,65725,51447],{"class":262},[252,65727,65728,65730,65732,65735,65737],{"class":254,"line":16744},[252,65729,55374],{"class":262},[252,65731,452],{"class":51440},[252,65733,65734],{"class":262},">￥4999\u003C\u002F",[252,65736,452],{"class":51440},[252,65738,51447],{"class":262},[252,65740,65741,65743,65745],{"class":254,"line":16750},[252,65742,51916],{"class":262},[252,65744,406],{"class":51440},[252,65746,51447],{"class":262},[252,65748,65749,65751,65753],{"class":254,"line":16773},[252,65750,51481],{"class":262},[252,65752,406],{"class":51440},[252,65754,51447],{"class":262},[252,65756,65757,65759,65761],{"class":254,"line":16779},[252,65758,55374],{"class":262},[252,65760,452],{"class":51440},[252,65762,51447],{"class":262},[252,65764,65765,65767,65769,65771,65773,65775,65777,65779,65781,65783,65785,65787],{"class":254,"line":16802},[252,65766,55442],{"class":262},[252,65768,53961],{"class":51440},[252,65770,53964],{"class":2102},[252,65772,308],{"class":262},[252,65774,53969],{"class":367},[252,65776,15060],{"class":2102},[252,65778,308],{"class":262},[252,65780,65587],{"class":367},[252,65782,53626],{"class":2102},[252,65784,308],{"class":262},[252,65786,65594],{"class":367},[252,65788,51447],{"class":262},[252,65790,65791,65793,65795],{"class":254,"line":16816},[252,65792,55547],{"class":262},[252,65794,452],{"class":51440},[252,65796,51447],{"class":262},[252,65798,65799,65801,65803,65806,65808],{"class":254,"line":16836},[252,65800,55374],{"class":262},[252,65802,452],{"class":51440},[252,65804,65805],{"class":262},">小米电视\u003C\u002F",[252,65807,452],{"class":51440},[252,65809,51447],{"class":262},[252,65811,65812,65814,65816,65818,65820],{"class":254,"line":16842},[252,65813,55374],{"class":262},[252,65815,452],{"class":51440},[252,65817,65625],{"class":262},[252,65819,452],{"class":51440},[252,65821,51447],{"class":262},[252,65823,65824,65826,65828,65831,65833],{"class":254,"line":16853},[252,65825,55374],{"class":262},[252,65827,452],{"class":51440},[252,65829,65830],{"class":262},">￥5999\u003C\u002F",[252,65832,452],{"class":51440},[252,65834,51447],{"class":262},[252,65836,65837,65839,65841],{"class":254,"line":16876},[252,65838,51916],{"class":262},[252,65840,406],{"class":51440},[252,65842,51447],{"class":262},[252,65844,65845,65847,65849],{"class":254,"line":16898},[252,65846,52557],{"class":262},[252,65848,400],{"class":51440},[252,65850,51447],{"class":262},[252,65852,65853,65855,65857],{"class":254,"line":16903},[252,65854,52284],{"class":262},[252,65856,51953],{"class":51440},[252,65858,51447],{"class":262},[252,65860,65861],{"class":254,"line":16909},[252,65862,65863],{"class":321},"    \u002F\u002F 1. 获取大复选框\n",[252,65865,65866,65868,65871,65873,65875,65877,65879,65882],{"class":254,"line":16923},[252,65867,11361],{"class":258},[252,65869,65870],{"class":311}," checkAll",[252,65872,13704],{"class":258},[252,65874,54536],{"class":262},[252,65876,54539],{"class":2102},[252,65878,263],{"class":262},[252,65880,65881],{"class":367},"'#checkAll'",[252,65883,269],{"class":262},[252,65885,65886],{"class":254,"line":16936},[252,65887,65888],{"class":321},"    \u002F\u002F 2. 获取所有的小复选框\n",[252,65890,65891,65893,65896,65898,65900,65902,65904,65907],{"class":254,"line":16941},[252,65892,11361],{"class":258},[252,65894,65895],{"class":311}," cks",[252,65897,13704],{"class":258},[252,65899,54536],{"class":262},[252,65901,55821],{"class":2102},[252,65903,263],{"class":262},[252,65905,65906],{"class":367},"'.ck'",[252,65908,269],{"class":262},[252,65910,65911],{"class":254,"line":16955},[252,65912,65913],{"class":321},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[252,65915,65916,65919,65921,65923,65925,65927,65929],{"class":254,"line":16960},[252,65917,65918],{"class":262},"    checkAll.",[252,65920,57953],{"class":2102},[252,65922,263],{"class":262},[252,65924,57958],{"class":367},[252,65926,12575],{"class":262},[252,65928,54589],{"class":258},[252,65930,54592],{"class":262},[252,65932,65933],{"class":254,"line":16966},[252,65934,65935],{"class":321},"      \u002F\u002F 得到当前大复选框的选中状态\n",[252,65937,65938,65941],{"class":254,"line":16971},[252,65939,65940],{"class":321},"      \u002F\u002F console.log(checkAll.checked)",[252,65942,65943],{"class":321},"  \u002F\u002F 得到 是 true 或者是 false\n",[252,65945,65946],{"class":254,"line":16985},[252,65947,65948],{"class":321},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[252,65950,65951,65953,65955,65957,65959,65961,65963,65965,65967,65970,65972,65974,65976],{"class":254,"line":16990},[252,65952,52424],{"class":258},[252,65954,1797],{"class":262},[252,65956,51987],{"class":258},[252,65958,9578],{"class":262},[252,65960,308],{"class":258},[252,65962,4232],{"class":311},[252,65964,9585],{"class":262},[252,65966,1173],{"class":258},[252,65968,65969],{"class":262}," cks.",[252,65971,52108],{"class":311},[252,65973,3353],{"class":262},[252,65975,2431],{"class":258},[252,65977,12582],{"class":262},[252,65979,65980,65983,65985,65988],{"class":254,"line":16995},[252,65981,65982],{"class":262},"        cks[i].checked ",[252,65984,308],{"class":258},[252,65986,65987],{"class":311}," this",[252,65989,65990],{"class":262},".checked\n",[252,65992,65993],{"class":254,"line":17009},[252,65994,52538],{"class":262},[252,65996,65997],{"class":254,"line":17021},[252,65998,33601],{"class":262},[252,66000,66001],{"class":254,"line":17026},[252,66002,66003],{"class":321},"    \u002F\u002F 5. 小复选框控制大复选框\n",[252,66005,66006],{"class":254,"line":17039},[252,66007,2539],{"emptyLinePlaceholder":181},[252,66009,66010,66012,66014,66016,66018,66020,66022,66024,66026,66028,66030,66032,66034],{"class":254,"line":17044},[252,66011,3340],{"class":258},[252,66013,1797],{"class":262},[252,66015,51987],{"class":258},[252,66017,9578],{"class":262},[252,66019,308],{"class":258},[252,66021,4232],{"class":311},[252,66023,9585],{"class":262},[252,66025,1173],{"class":258},[252,66027,65969],{"class":262},[252,66029,52108],{"class":311},[252,66031,3353],{"class":262},[252,66033,2431],{"class":258},[252,66035,12582],{"class":262},[252,66037,66038],{"class":254,"line":17049},[252,66039,66040],{"class":321},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[252,66042,66043,66046,66048,66050,66052,66054,66056],{"class":254,"line":17054},[252,66044,66045],{"class":262},"      cks[i].",[252,66047,57953],{"class":2102},[252,66049,263],{"class":262},[252,66051,57958],{"class":367},[252,66053,12575],{"class":262},[252,66055,54589],{"class":258},[252,66057,54592],{"class":262},[252,66059,66060],{"class":254,"line":17067},[252,66061,66062],{"class":321},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[252,66064,66065],{"class":254,"line":17072},[252,66066,66067],{"class":321},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[252,66069,66070],{"class":254,"line":32773},[252,66071,66072],{"class":321},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[252,66074,66075],{"class":254,"line":32779},[252,66076,66077],{"class":321},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[252,66079,66080,66083,66085,66087,66089,66091,66094,66096,66098,66100,66102],{"class":254,"line":32785},[252,66081,66082],{"class":262},"        checkAll.checked ",[252,66084,308],{"class":258},[252,66086,54536],{"class":262},[252,66088,55821],{"class":2102},[252,66090,263],{"class":262},[252,66092,66093],{"class":367},"'.ck:checked'",[252,66095,30966],{"class":262},[252,66097,52108],{"class":311},[252,66099,58046],{"class":258},[252,66101,65969],{"class":262},[252,66103,55971],{"class":311},[252,66105,66106],{"class":254,"line":32791},[252,66107,64955],{"class":262},[252,66109,66110],{"class":254,"line":32797},[252,66111,2326],{"class":262},[252,66113,66114,66116,66118],{"class":254,"line":32808},[252,66115,52557],{"class":262},[252,66117,51953],{"class":51440},[252,66119,51447],{"class":262},[252,66121,66122,66124,66126],{"class":254,"line":32814},[252,66123,51925],{"class":262},[252,66125,51940],{"class":51440},[252,66127,51447],{"class":262},[252,66129,66130],{"class":254,"line":32834},[252,66131,2539],{"emptyLinePlaceholder":181},[252,66133,66134,66136,66138],{"class":254,"line":32840},[252,66135,51925],{"class":262},[252,66137,50775],{"class":51440},[252,66139,51447],{"class":262},[19,66141,66142],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66144,66145],{},"用好之间比较得到的布尔值！！！",[19,66147,66148,66149,66152,66153,1797,66156,847,66158,66161],{},"在 JS 里访问的时候，",[22,66150,66151],{},"checkbox.checked"," 是一个 ",[412,66154,66155],{},"布尔值",[22,66157,1501],{},[22,66159,66160],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66163,66164,66165,66168,66169],{},"HTML 的 ",[22,66166,66167],{},"checked=\"checked\""," 只是 ",[412,66170,66171,66172,66175],{},"初始值；JS 的 ",[22,66173,66174],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66177,66178],{},"：checked是一个伪类选择器",[19,66180,66181],{},[1601,66182],{"alt":169,"src":66183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66185,66186,66189],{},[66187,66188],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66191,66192],{},[1601,66193],{"alt":169,"src":66194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66196,66198],{"id":66197},"_33-dom事件进阶","3.3 DOM事件进阶",[224,66200,66202],{"id":66201},"_331-事件流","3.3.1 事件流",[19,66204,66205],{},[1601,66206],{"alt":169,"src":66207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22137,66209,66211],{"id":66210},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66213,66214],{},[1601,66215],{"alt":169,"src":66216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[244,66218,66220],{"className":50773,"code":66219,"language":50775,"meta":169,"style":169},"\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",[22,66221,66222,66232,66246,66250,66258,66272,66292,66304,66312,66319,66331,66343,66353,66357,66361,66368,66380,66392,66402,66406,66414,66422,66426,66434,66449,66468,66476,66484,66504,66524,66540,66551,66559,66576,66587,66595,66612,66623,66631,66639,66647,66651],{"__ignoreMap":169},[252,66223,66224,66226,66228,66230],{"class":254,"line":255},[252,66225,51437],{"class":262},[252,66227,51441],{"class":51440},[252,66229,51444],{"class":2102},[252,66231,51447],{"class":262},[252,66233,66234,66236,66238,66240,66242,66244],{"class":254,"line":170},[252,66235,1173],{"class":262},[252,66237,50775],{"class":51440},[252,66239,51456],{"class":2102},[252,66241,308],{"class":262},[252,66243,51461],{"class":367},[252,66245,51447],{"class":262},[252,66247,66248],{"class":254,"line":1318},[252,66249,2539],{"emptyLinePlaceholder":181},[252,66251,66252,66254,66256],{"class":254,"line":1333},[252,66253,1173],{"class":262},[252,66255,51474],{"class":51440},[252,66257,51447],{"class":262},[252,66259,66260,66262,66264,66266,66268,66270],{"class":254,"line":1339},[252,66261,52284],{"class":262},[252,66263,51484],{"class":51440},[252,66265,51487],{"class":2102},[252,66267,308],{"class":262},[252,66269,51492],{"class":367},[252,66271,51447],{"class":262},[252,66273,66274,66276,66278,66280,66282,66284,66286,66288,66290],{"class":254,"line":1353},[252,66275,52284],{"class":262},[252,66277,51484],{"class":51440},[252,66279,15060],{"class":2102},[252,66281,308],{"class":262},[252,66283,51531],{"class":367},[252,66285,51511],{"class":2102},[252,66287,308],{"class":262},[252,66289,51538],{"class":367},[252,66291,51447],{"class":262},[252,66293,66294,66296,66298,66300,66302],{"class":254,"line":1359},[252,66295,52284],{"class":262},[252,66297,51547],{"class":51440},[252,66299,51550],{"class":262},[252,66301,51547],{"class":51440},[252,66303,51447],{"class":262},[252,66305,66306,66308,66310],{"class":254,"line":1450},[252,66307,52284],{"class":262},[252,66309,5266],{"class":51440},[252,66311,51447],{"class":262},[252,66313,66314,66317],{"class":254,"line":1456},[252,66315,66316],{"class":2102},"    .father",[252,66318,15712],{"class":262},[252,66320,66321,66323,66325,66327,66329],{"class":254,"line":1468},[252,66322,54911],{"class":311},[252,66324,51577],{"class":262},[252,66326,65214],{"class":311},[252,66328,51632],{"class":258},[252,66330,1429],{"class":262},[252,66332,66333,66335,66337,66339,66341],{"class":254,"line":1751},[252,66334,54925],{"class":311},[252,66336,51577],{"class":262},[252,66338,65214],{"class":311},[252,66340,51632],{"class":258},[252,66342,1429],{"class":262},[252,66344,66345,66347,66349,66351],{"class":254,"line":1756},[252,66346,55024],{"class":311},[252,66348,51577],{"class":262},[252,66350,51785],{"class":311},[252,66352,1429],{"class":262},[252,66354,66355],{"class":254,"line":1762},[252,66356,2326],{"class":262},[252,66358,66359],{"class":254,"line":1767},[252,66360,2539],{"emptyLinePlaceholder":181},[252,66362,66363,66366],{"class":254,"line":1781},[252,66364,66365],{"class":2102},"    .son",[252,66367,15712],{"class":262},[252,66369,66370,66372,66374,66376,66378],{"class":254,"line":1786},[252,66371,54911],{"class":311},[252,66373,51577],{"class":262},[252,66375,1861],{"class":311},[252,66377,51632],{"class":258},[252,66379,1429],{"class":262},[252,66381,66382,66384,66386,66388,66390],{"class":254,"line":1792},[252,66383,54925],{"class":311},[252,66385,51577],{"class":262},[252,66387,1861],{"class":311},[252,66389,51632],{"class":258},[252,66391,1429],{"class":262},[252,66393,66394,66396,66398,66400],{"class":254,"line":1813},[252,66395,55024],{"class":311},[252,66397,51577],{"class":262},[252,66399,55029],{"class":311},[252,66401,1429],{"class":262},[252,66403,66404],{"class":254,"line":1818},[252,66405,2326],{"class":262},[252,66407,66408,66410,66412],{"class":254,"line":1832},[252,66409,52557],{"class":262},[252,66411,5266],{"class":51440},[252,66413,51447],{"class":262},[252,66415,66416,66418,66420],{"class":254,"line":1837},[252,66417,51925],{"class":262},[252,66419,51474],{"class":51440},[252,66421,51447],{"class":262},[252,66423,66424],{"class":254,"line":1866},[252,66425,2539],{"emptyLinePlaceholder":181},[252,66427,66428,66430,66432],{"class":254,"line":1871},[252,66429,1173],{"class":262},[252,66431,51940],{"class":51440},[252,66433,51447],{"class":262},[252,66435,66436,66438,66440,66442,66444,66447],{"class":254,"line":1888},[252,66437,52284],{"class":262},[252,66439,51751],{"class":51440},[252,66441,53626],{"class":2102},[252,66443,308],{"class":262},[252,66445,66446],{"class":367},"\"father\"",[252,66448,51447],{"class":262},[252,66450,66451,66453,66455,66457,66459,66462,66464,66466],{"class":254,"line":1893},[252,66452,51481],{"class":262},[252,66454,51751],{"class":51440},[252,66456,53626],{"class":2102},[252,66458,308],{"class":262},[252,66460,66461],{"class":367},"\"son\"",[252,66463,55454],{"class":262},[252,66465,51751],{"class":51440},[252,66467,51447],{"class":262},[252,66469,66470,66472,66474],{"class":254,"line":1898},[252,66471,52557],{"class":262},[252,66473,51751],{"class":51440},[252,66475,51447],{"class":262},[252,66477,66478,66480,66482],{"class":254,"line":1903},[252,66479,52284],{"class":262},[252,66481,51953],{"class":51440},[252,66483,51447],{"class":262},[252,66485,66486,66488,66491,66493,66495,66497,66499,66502],{"class":254,"line":1917},[252,66487,11361],{"class":258},[252,66489,66490],{"class":311}," fa",[252,66492,13704],{"class":258},[252,66494,54536],{"class":262},[252,66496,54539],{"class":2102},[252,66498,263],{"class":262},[252,66500,66501],{"class":367},"'.father'",[252,66503,269],{"class":262},[252,66505,66506,66508,66511,66513,66515,66517,66519,66522],{"class":254,"line":1922},[252,66507,11361],{"class":258},[252,66509,66510],{"class":311}," son",[252,66512,13704],{"class":258},[252,66514,54536],{"class":262},[252,66516,54539],{"class":2102},[252,66518,263],{"class":262},[252,66520,66521],{"class":367},"'.son'",[252,66523,269],{"class":262},[252,66525,66526,66528,66530,66532,66534,66536,66538],{"class":254,"line":2716},[252,66527,52547],{"class":262},[252,66529,57953],{"class":2102},[252,66531,263],{"class":262},[252,66533,57958],{"class":367},[252,66535,12575],{"class":262},[252,66537,54589],{"class":258},[252,66539,54592],{"class":262},[252,66541,66542,66544,66546,66549],{"class":254,"line":2730},[252,66543,59065],{"class":2102},[252,66545,263],{"class":262},[252,66547,66548],{"class":367},"'woshiu1'",[252,66550,269],{"class":262},[252,66552,66553,66555,66557],{"class":254,"line":2738},[252,66554,54675],{"class":262},[252,66556,1501],{"class":311},[252,66558,269],{"class":262},[252,66560,66561,66564,66566,66568,66570,66572,66574],{"class":254,"line":2743},[252,66562,66563],{"class":262},"    fa.",[252,66565,57953],{"class":2102},[252,66567,263],{"class":262},[252,66569,57958],{"class":367},[252,66571,12575],{"class":262},[252,66573,54589],{"class":258},[252,66575,54592],{"class":262},[252,66577,66578,66580,66582,66585],{"class":254,"line":2749},[252,66579,59065],{"class":2102},[252,66581,263],{"class":262},[252,66583,66584],{"class":367},"'1'",[252,66586,269],{"class":262},[252,66588,66589,66591,66593],{"class":254,"line":2755},[252,66590,54675],{"class":262},[252,66592,1501],{"class":311},[252,66594,269],{"class":262},[252,66596,66597,66600,66602,66604,66606,66608,66610],{"class":254,"line":2760},[252,66598,66599],{"class":262},"    son.",[252,66601,57953],{"class":2102},[252,66603,263],{"class":262},[252,66605,57958],{"class":367},[252,66607,12575],{"class":262},[252,66609,54589],{"class":258},[252,66611,54592],{"class":262},[252,66613,66614,66616,66618,66621],{"class":254,"line":8088},[252,66615,59065],{"class":2102},[252,66617,263],{"class":262},[252,66619,66620],{"class":367},"'2'",[252,66622,269],{"class":262},[252,66624,66625,66627,66629],{"class":254,"line":8112},[252,66626,54675],{"class":262},[252,66628,1501],{"class":311},[252,66630,269],{"class":262},[252,66632,66633,66635,66637],{"class":254,"line":8117},[252,66634,52557],{"class":262},[252,66636,51953],{"class":51440},[252,66638,51447],{"class":262},[252,66640,66641,66643,66645],{"class":254,"line":8123},[252,66642,51925],{"class":262},[252,66644,51940],{"class":51440},[252,66646,51447],{"class":262},[252,66648,66649],{"class":254,"line":8150},[252,66650,2539],{"emptyLinePlaceholder":181},[252,66652,66653,66655,66657],{"class":254,"line":8155},[252,66654,51925],{"class":262},[252,66656,50775],{"class":51440},[252,66658,51447],{"class":262},[19,66660,66661],{},[1601,66662],{"alt":169,"src":66663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66665,66666],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22137,66668,66670],{"id":66669},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66672,66673],{},[1601,66674],{"alt":169,"src":66675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66677,66678],{},"反着来",[19,66680,66681],{},"注意是同名事件，比如都是‘click’",[22137,66683,66685],{"id":66684},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66687,66688],{},[1601,66689],{"alt":169,"src":66690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22137,66692,66694],{"id":66693},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66696,66697],{},[1601,66698],{"alt":169,"src":66699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66701,66702],{},[1601,66703],{"alt":169,"src":66704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22137,66706,66708],{"id":66707},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[207,66710,66711],{},[210,66712,66713],{},"事件类型的区别",[19,66715,66716],{},[1601,66717],{"alt":169,"src":66718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66720,66721],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[207,66723,66724],{"start":170},[210,66725,66726],{},"注册事件的区别",[19,66728,66729],{},[1601,66730],{"alt":169,"src":66731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22137,66733,66735],{"id":66734},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66737,66738],{},[1601,66739],{"alt":169,"src":66740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66742,66743],{},[1601,66744],{"alt":169,"src":66745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[244,66747,66749],{"className":53207,"code":66748,"language":53209,"meta":169,"style":169},"\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",[22,66750,66751,66759,66776,66799,66807,66812,66817,66822,66826,66834,66842],{"__ignoreMap":169},[252,66752,66753,66755,66757],{"class":254,"line":255},[252,66754,1173],{"class":262},[252,66756,51940],{"class":51440},[252,66758,51447],{"class":262},[252,66760,66761,66763,66766,66769,66771,66774],{"class":254,"line":170},[252,66762,52284],{"class":262},[252,66764,66765],{"class":51440},"form",[252,66767,66768],{"class":2102}," action",[252,66770,308],{"class":262},[252,66772,66773],{"class":367},"\"http:\u002F\u002Fwww.itcast.cn\"",[252,66775,51447],{"class":262},[252,66777,66778,66780,66782,66784,66786,66789,66792,66794,66797],{"class":254,"line":1318},[252,66779,51481],{"class":262},[252,66781,53961],{"class":51440},[252,66783,53964],{"class":2102},[252,66785,308],{"class":262},[252,66787,66788],{"class":367},"\"submit\"",[252,66790,66791],{"class":2102}," value",[252,66793,308],{"class":262},[252,66795,66796],{"class":367},"\"免费注册\"",[252,66798,51447],{"class":262},[252,66800,66801,66803,66805],{"class":254,"line":1333},[252,66802,51481],{"class":262},[252,66804,51953],{"class":51440},[252,66806,51447],{"class":262},[252,66808,66809],{"class":254,"line":1339},[252,66810,66811],{"class":262},"      const form = document.querySelector('form')\n",[252,66813,66814],{"class":254,"line":1353},[252,66815,66816],{"class":262},"      form.addEventListener('submit', function (e) {\n",[252,66818,66819],{"class":254,"line":1359},[252,66820,66821],{"class":262},"        e.preventDefault()\n",[252,66823,66824],{"class":254,"line":1450},[252,66825,64955],{"class":262},[252,66827,66828,66830,66832],{"class":254,"line":1456},[252,66829,51916],{"class":262},[252,66831,51953],{"class":51440},[252,66833,51447],{"class":262},[252,66835,66836,66838,66840],{"class":254,"line":1468},[252,66837,52557],{"class":262},[252,66839,66765],{"class":51440},[252,66841,51447],{"class":262},[252,66843,66844,66846,66848],{"class":254,"line":1751},[252,66845,51925],{"class":262},[252,66847,51940],{"class":51440},[252,66849,51447],{"class":262},[19,66851,66852],{},"点击不在跳转！！！",[224,66854,66856],{"id":66855},"_332-事件委托","3.3.2 事件委托",[19,66858,66859],{},[1601,66860],{"alt":169,"src":66861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[244,66863,66865],{"className":50773,"code":66864,"language":50775,"meta":169,"style":169},"\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",[22,66866,66867,66877,66891,66895,66903,66917,66937,66949,66957,66961,66969,66977,66989,67001,67013,67025,67037,67050,67058,67066,67071,67090,67111,67116,67121,67126,67131,67140,67144,67154,67158,67163,67168,67182,67192,67196,67200,67208,67216,67220],{"__ignoreMap":169},[252,66868,66869,66871,66873,66875],{"class":254,"line":255},[252,66870,51437],{"class":262},[252,66872,51441],{"class":51440},[252,66874,51444],{"class":2102},[252,66876,51447],{"class":262},[252,66878,66879,66881,66883,66885,66887,66889],{"class":254,"line":170},[252,66880,1173],{"class":262},[252,66882,50775],{"class":51440},[252,66884,51456],{"class":2102},[252,66886,308],{"class":262},[252,66888,51461],{"class":367},[252,66890,51447],{"class":262},[252,66892,66893],{"class":254,"line":1318},[252,66894,2539],{"emptyLinePlaceholder":181},[252,66896,66897,66899,66901],{"class":254,"line":1333},[252,66898,1173],{"class":262},[252,66900,51474],{"class":51440},[252,66902,51447],{"class":262},[252,66904,66905,66907,66909,66911,66913,66915],{"class":254,"line":1339},[252,66906,52284],{"class":262},[252,66908,51484],{"class":51440},[252,66910,51487],{"class":2102},[252,66912,308],{"class":262},[252,66914,51492],{"class":367},[252,66916,51447],{"class":262},[252,66918,66919,66921,66923,66925,66927,66929,66931,66933,66935],{"class":254,"line":1353},[252,66920,52284],{"class":262},[252,66922,51484],{"class":51440},[252,66924,15060],{"class":2102},[252,66926,308],{"class":262},[252,66928,51531],{"class":367},[252,66930,51511],{"class":2102},[252,66932,308],{"class":262},[252,66934,51538],{"class":367},[252,66936,51447],{"class":262},[252,66938,66939,66941,66943,66945,66947],{"class":254,"line":1359},[252,66940,52284],{"class":262},[252,66942,51547],{"class":51440},[252,66944,51550],{"class":262},[252,66946,51547],{"class":51440},[252,66948,51447],{"class":262},[252,66950,66951,66953,66955],{"class":254,"line":1450},[252,66952,51925],{"class":262},[252,66954,51474],{"class":51440},[252,66956,51447],{"class":262},[252,66958,66959],{"class":254,"line":1456},[252,66960,2539],{"emptyLinePlaceholder":181},[252,66962,66963,66965,66967],{"class":254,"line":1468},[252,66964,1173],{"class":262},[252,66966,51940],{"class":51440},[252,66968,51447],{"class":262},[252,66970,66971,66973,66975],{"class":254,"line":1751},[252,66972,52284],{"class":262},[252,66974,1270],{"class":51440},[252,66976,51447],{"class":262},[252,66978,66979,66981,66983,66985,66987],{"class":254,"line":1756},[252,66980,51481],{"class":262},[252,66982,210],{"class":51440},[252,66984,54106],{"class":262},[252,66986,210],{"class":51440},[252,66988,51447],{"class":262},[252,66990,66991,66993,66995,66997,66999],{"class":254,"line":1762},[252,66992,51481],{"class":262},[252,66994,210],{"class":51440},[252,66996,54125],{"class":262},[252,66998,210],{"class":51440},[252,67000,51447],{"class":262},[252,67002,67003,67005,67007,67009,67011],{"class":254,"line":1767},[252,67004,51481],{"class":262},[252,67006,210],{"class":51440},[252,67008,54144],{"class":262},[252,67010,210],{"class":51440},[252,67012,51447],{"class":262},[252,67014,67015,67017,67019,67021,67023],{"class":254,"line":1781},[252,67016,51481],{"class":262},[252,67018,210],{"class":51440},[252,67020,54163],{"class":262},[252,67022,210],{"class":51440},[252,67024,51447],{"class":262},[252,67026,67027,67029,67031,67033,67035],{"class":254,"line":1786},[252,67028,51481],{"class":262},[252,67030,210],{"class":51440},[252,67032,54182],{"class":262},[252,67034,210],{"class":51440},[252,67036,51447],{"class":262},[252,67038,67039,67041,67043,67046,67048],{"class":254,"line":1792},[252,67040,51481],{"class":262},[252,67042,19],{"class":51440},[252,67044,67045],{"class":262},">我不需要变色\u003C\u002F",[252,67047,19],{"class":51440},[252,67049,51447],{"class":262},[252,67051,67052,67054,67056],{"class":254,"line":1813},[252,67053,52557],{"class":262},[252,67055,1270],{"class":51440},[252,67057,51447],{"class":262},[252,67059,67060,67062,67064],{"class":254,"line":1818},[252,67061,52284],{"class":262},[252,67063,51953],{"class":51440},[252,67065,51447],{"class":262},[252,67067,67068],{"class":254,"line":1832},[252,67069,67070],{"class":321},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[252,67072,67073,67075,67077,67079,67081,67083,67085,67088],{"class":254,"line":1837},[252,67074,11361],{"class":258},[252,67076,61432],{"class":311},[252,67078,13704],{"class":258},[252,67080,54536],{"class":262},[252,67082,54539],{"class":2102},[252,67084,263],{"class":262},[252,67086,67087],{"class":367},"'ul'",[252,67089,269],{"class":262},[252,67091,67092,67095,67097,67099,67101,67103,67105,67107,67109],{"class":254,"line":1866},[252,67093,67094],{"class":262},"    ul.",[252,67096,57953],{"class":2102},[252,67098,263],{"class":262},[252,67100,57958],{"class":367},[252,67102,12575],{"class":262},[252,67104,54589],{"class":258},[252,67106,1797],{"class":262},[252,67108,337],{"class":5356},[252,67110,12582],{"class":262},[252,67112,67113],{"class":254,"line":1871},[252,67114,67115],{"class":321},"      \u002F\u002F alert(1)\n",[252,67117,67118],{"class":254,"line":1888},[252,67119,67120],{"class":321},"      \u002F\u002F e.target就是我们点击的对象\n",[252,67122,67123],{"class":254,"line":1893},[252,67124,67125],{"class":321},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[252,67127,67128],{"class":254,"line":1898},[252,67129,67130],{"class":321},"      \u002F\u002F e.target.style.color = 'red'\n",[252,67132,67133,67135,67137],{"class":254,"line":1903},[252,67134,58384],{"class":262},[252,67136,58387],{"class":2102},[252,67138,67139],{"class":262},"(e)\n",[252,67141,67142],{"class":254,"line":1917},[252,67143,2539],{"emptyLinePlaceholder":181},[252,67145,67146,67148,67151],{"class":254,"line":1922},[252,67147,58384],{"class":262},[252,67149,67150],{"class":2102},"dir",[252,67152,67153],{"class":262},"(e.target)\n",[252,67155,67156],{"class":254,"line":2716},[252,67157,2539],{"emptyLinePlaceholder":181},[252,67159,67160],{"class":254,"line":2730},[252,67161,67162],{"class":321},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[252,67164,67165],{"class":254,"line":2738},[252,67166,67167],{"class":321},"      \u002F\u002F 通过tagName来进行判断\n",[252,67169,67170,67172,67175,67177,67180],{"class":254,"line":2743},[252,67171,54620],{"class":258},[252,67173,67174],{"class":262}," (e.target.tagName ",[252,67176,54626],{"class":258},[252,67178,67179],{"class":367}," 'LI'",[252,67181,12582],{"class":262},[252,67183,67184,67187,67189],{"class":254,"line":2749},[252,67185,67186],{"class":262},"        e.target.style.color ",[252,67188,308],{"class":258},[252,67190,67191],{"class":367}," 'red'\n",[252,67193,67194],{"class":254,"line":2755},[252,67195,52538],{"class":262},[252,67197,67198],{"class":254,"line":2760},[252,67199,33601],{"class":262},[252,67201,67202,67204,67206],{"class":254,"line":8088},[252,67203,52557],{"class":262},[252,67205,51953],{"class":51440},[252,67207,51447],{"class":262},[252,67209,67210,67212,67214],{"class":254,"line":8112},[252,67211,51925],{"class":262},[252,67213,51940],{"class":51440},[252,67215,51447],{"class":262},[252,67217,67218],{"class":254,"line":8117},[252,67219,2539],{"emptyLinePlaceholder":181},[252,67221,67222,67224,67226],{"class":254,"line":8123},[252,67223,51925],{"class":262},[252,67225,50775],{"class":51440},[252,67227,51447],{"class":262},[19,67229,67230],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67232,67233],{},"if(e.target.ragName==='P') {}",[19,67235,67236],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67238,67239],{},"通过事件委托的方式实现tab栏切换改造：",[19,67241,67242],{},"一定要记住自定义属性！！！！！！",[19,67244,67245],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67247,67248],{},"id是自定义的属性名",[19,67250,67251],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[244,67253,67255],{"className":50773,"code":67254,"language":50775,"meta":169,"style":169},"\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",[22,67256,67257,67267,67281,67285,67293,67307,67327,67347,67359,67367,67373,67383,67393,67397,67401,67407,67419,67431,67443,67459,67463,67467,67473,67485,67497,67509,67519,67529,67533,67537,67545,67557,67567,67579,67583,67587,67595,67605,67615,67625,67629,67633,67643,67657,67669,67673,67677,67689,67699,67715,67725,67729,67733,67747,67757,67767,67771,67775,67781,67795,67799,67803,67811,67821,67825,67829,67838,67848,67852,67860,67868,67872,67880,67894,67908,67920,67928,67967,67999,68031,68063,68095,68103,68111,68125,68159,68193,68227,68261,68295,68303,68311,68319,68324,68329,68348,68353,68373,68381,68386,68399,68420,68433,68437,68442,68447,68460,68480,68508,68512,68516,68520,68528,68536,68540],{"__ignoreMap":169},[252,67258,67259,67261,67263,67265],{"class":254,"line":255},[252,67260,51437],{"class":262},[252,67262,51441],{"class":51440},[252,67264,51444],{"class":2102},[252,67266,51447],{"class":262},[252,67268,67269,67271,67273,67275,67277,67279],{"class":254,"line":170},[252,67270,1173],{"class":262},[252,67272,50775],{"class":51440},[252,67274,51456],{"class":2102},[252,67276,308],{"class":262},[252,67278,51461],{"class":367},[252,67280,51447],{"class":262},[252,67282,67283],{"class":254,"line":1318},[252,67284,2539],{"emptyLinePlaceholder":181},[252,67286,67287,67289,67291],{"class":254,"line":1333},[252,67288,1173],{"class":262},[252,67290,51474],{"class":51440},[252,67292,51447],{"class":262},[252,67294,67295,67297,67299,67301,67303,67305],{"class":254,"line":1339},[252,67296,52284],{"class":262},[252,67298,51484],{"class":51440},[252,67300,51487],{"class":2102},[252,67302,308],{"class":262},[252,67304,51492],{"class":367},[252,67306,59267],{"class":262},[252,67308,67309,67311,67313,67315,67317,67319,67321,67323,67325],{"class":254,"line":1353},[252,67310,52284],{"class":262},[252,67312,51484],{"class":51440},[252,67314,51503],{"class":2102},[252,67316,308],{"class":262},[252,67318,51508],{"class":367},[252,67320,51511],{"class":2102},[252,67322,308],{"class":262},[252,67324,51516],{"class":367},[252,67326,59267],{"class":262},[252,67328,67329,67331,67333,67335,67337,67339,67341,67343,67345],{"class":254,"line":1359},[252,67330,52284],{"class":262},[252,67332,51484],{"class":51440},[252,67334,15060],{"class":2102},[252,67336,308],{"class":262},[252,67338,51531],{"class":367},[252,67340,51511],{"class":2102},[252,67342,308],{"class":262},[252,67344,51538],{"class":367},[252,67346,59267],{"class":262},[252,67348,67349,67351,67353,67355,67357],{"class":254,"line":1450},[252,67350,52284],{"class":262},[252,67352,51547],{"class":51440},[252,67354,63765],{"class":262},[252,67356,51547],{"class":51440},[252,67358,51447],{"class":262},[252,67360,67361,67363,67365],{"class":254,"line":1456},[252,67362,52284],{"class":262},[252,67364,5266],{"class":51440},[252,67366,51447],{"class":262},[252,67368,67369,67371],{"class":254,"line":1468},[252,67370,6543],{"class":51440},[252,67372,15712],{"class":262},[252,67374,67375,67377,67379,67381],{"class":254,"line":1751},[252,67376,54846],{"class":311},[252,67378,51577],{"class":262},[252,67380,454],{"class":311},[252,67382,1429],{"class":262},[252,67384,67385,67387,67389,67391],{"class":254,"line":1756},[252,67386,54835],{"class":311},[252,67388,51577],{"class":262},[252,67390,454],{"class":311},[252,67392,1429],{"class":262},[252,67394,67395],{"class":254,"line":1762},[252,67396,2326],{"class":262},[252,67398,67399],{"class":254,"line":1767},[252,67400,2539],{"emptyLinePlaceholder":181},[252,67402,67403,67405],{"class":254,"line":1781},[252,67404,63816],{"class":2102},[252,67406,15712],{"class":262},[252,67408,67409,67411,67413,67415,67417],{"class":254,"line":1786},[252,67410,54911],{"class":311},[252,67412,51577],{"class":262},[252,67414,63827],{"class":311},[252,67416,51632],{"class":258},[252,67418,1429],{"class":262},[252,67420,67421,67423,67425,67427,67429],{"class":254,"line":1792},[252,67422,54925],{"class":311},[252,67424,51577],{"class":262},[252,67426,63840],{"class":311},[252,67428,51632],{"class":258},[252,67430,1429],{"class":262},[252,67432,67433,67435,67437,67439,67441],{"class":254,"line":1813},[252,67434,54846],{"class":311},[252,67436,51577],{"class":262},[252,67438,963],{"class":311},[252,67440,51632],{"class":258},[252,67442,1429],{"class":262},[252,67444,67445,67447,67449,67451,67453,67455,67457],{"class":254,"line":1818},[252,67446,62117],{"class":311},[252,67448,51577],{"class":262},[252,67450,480],{"class":311},[252,67452,51632],{"class":258},[252,67454,51661],{"class":311},[252,67456,62384],{"class":311},[252,67458,1429],{"class":262},[252,67460,67461],{"class":254,"line":1832},[252,67462,2326],{"class":262},[252,67464,67465],{"class":254,"line":1837},[252,67466,2539],{"emptyLinePlaceholder":181},[252,67468,67469,67471],{"class":254,"line":1866},[252,67470,63885],{"class":2102},[252,67472,15712],{"class":262},[252,67474,67475,67477,67479,67481,67483],{"class":254,"line":1871},[252,67476,54911],{"class":311},[252,67478,51577],{"class":262},[252,67480,574],{"class":311},[252,67482,591],{"class":258},[252,67484,1429],{"class":262},[252,67486,67487,67489,67491,67493,67495],{"class":254,"line":1888},[252,67488,54925],{"class":311},[252,67490,51577],{"class":262},[252,67492,1170],{"class":311},[252,67494,51632],{"class":258},[252,67496,1429],{"class":262},[252,67498,67499,67501,67503,67505,67507],{"class":254,"line":1893},[252,67500,57499],{"class":311},[252,67502,51577],{"class":262},[252,67504,1170],{"class":311},[252,67506,51632],{"class":258},[252,67508,1429],{"class":262},[252,67510,67511,67513,67515,67517],{"class":254,"line":1898},[252,67512,55149],{"class":311},[252,67514,51577],{"class":262},[252,67516,51617],{"class":311},[252,67518,1429],{"class":262},[252,67520,67521,67523,67525,67527],{"class":254,"line":1903},[252,67522,55160],{"class":311},[252,67524,51577],{"class":262},[252,67526,51808],{"class":311},[252,67528,1429],{"class":262},[252,67530,67531],{"class":254,"line":1917},[252,67532,2326],{"class":262},[252,67534,67535],{"class":254,"line":1922},[252,67536,2539],{"emptyLinePlaceholder":181},[252,67538,67539,67541,67543],{"class":254,"line":2716},[252,67540,63885],{"class":2102},[252,67542,63958],{"class":51440},[252,67544,15712],{"class":262},[252,67546,67547,67549,67551,67553,67555],{"class":254,"line":2730},[252,67548,55062],{"class":311},[252,67550,51577],{"class":262},[252,67552,1063],{"class":311},[252,67554,51632],{"class":258},[252,67556,1429],{"class":262},[252,67558,67559,67561,67563,67565],{"class":254,"line":2738},[252,67560,62474],{"class":311},[252,67562,51577],{"class":262},[252,67564,63981],{"class":311},[252,67566,1429],{"class":262},[252,67568,67569,67571,67573,67575,67577],{"class":254,"line":2743},[252,67570,62140],{"class":311},[252,67572,51577],{"class":262},[252,67574,963],{"class":311},[252,67576,51632],{"class":258},[252,67578,1429],{"class":262},[252,67580,67581],{"class":254,"line":2749},[252,67582,2326],{"class":262},[252,67584,67585],{"class":254,"line":2755},[252,67586,2539],{"emptyLinePlaceholder":181},[252,67588,67589,67591,67593],{"class":254,"line":2760},[252,67590,63885],{"class":2102},[252,67592,61432],{"class":51440},[252,67594,15712],{"class":262},[252,67596,67597,67599,67601,67603],{"class":254,"line":8088},[252,67598,54872],{"class":311},[252,67600,51577],{"class":262},[252,67602,54877],{"class":311},[252,67604,1429],{"class":262},[252,67606,67607,67609,67611,67613],{"class":254,"line":8112},[252,67608,55149],{"class":311},[252,67610,51577],{"class":262},[252,67612,51617],{"class":311},[252,67614,1429],{"class":262},[252,67616,67617,67619,67621,67623],{"class":254,"line":8117},[252,67618,55160],{"class":311},[252,67620,51577],{"class":262},[252,67622,51720],{"class":311},[252,67624,1429],{"class":262},[252,67626,67627],{"class":254,"line":8123},[252,67628,2326],{"class":262},[252,67630,67631],{"class":254,"line":8150},[252,67632,2539],{"emptyLinePlaceholder":181},[252,67634,67635,67637,67639,67641],{"class":254,"line":8155},[252,67636,63885],{"class":2102},[252,67638,61432],{"class":51440},[252,67640,55215],{"class":51440},[252,67642,15712],{"class":262},[252,67644,67645,67647,67649,67651,67653,67655],{"class":254,"line":8161},[252,67646,54846],{"class":311},[252,67648,51577],{"class":262},[252,67650,454],{"class":311},[252,67652,9090],{"class":311},[252,67654,51632],{"class":258},[252,67656,1429],{"class":262},[252,67658,67659,67661,67663,67665,67667],{"class":254,"line":8173},[252,67660,55062],{"class":311},[252,67662,51577],{"class":262},[252,67664,812],{"class":311},[252,67666,51632],{"class":258},[252,67668,1429],{"class":262},[252,67670,67671],{"class":254,"line":8185},[252,67672,2326],{"class":262},[252,67674,67675],{"class":254,"line":8197},[252,67676,2539],{"emptyLinePlaceholder":181},[252,67678,67679,67681,67683,67685,67687],{"class":254,"line":9856},[252,67680,63885],{"class":2102},[252,67682,61432],{"class":51440},[252,67684,55215],{"class":51440},[252,67686,1537],{"class":51440},[252,67688,15712],{"class":262},[252,67690,67691,67693,67695,67697],{"class":254,"line":9881},[252,67692,64110],{"class":311},[252,67694,51577],{"class":262},[252,67696,54877],{"class":311},[252,67698,1429],{"class":262},[252,67700,67701,67703,67705,67707,67709,67711,67713],{"class":254,"line":9904},[252,67702,62372],{"class":311},[252,67704,51577],{"class":262},[252,67706,340],{"class":311},[252,67708,51632],{"class":258},[252,67710,51661],{"class":311},[252,67712,64131],{"class":311},[252,67714,1429],{"class":262},[252,67716,67717,67719,67721,67723],{"class":254,"line":9928},[252,67718,57556],{"class":311},[252,67720,51577],{"class":262},[252,67722,62509],{"class":311},[252,67724,1429],{"class":262},[252,67726,67727],{"class":254,"line":9933},[252,67728,2326],{"class":262},[252,67730,67731],{"class":254,"line":9938},[252,67732,2539],{"emptyLinePlaceholder":181},[252,67734,67735,67737,67739,67741,67743,67745],{"class":254,"line":9943},[252,67736,63885],{"class":2102},[252,67738,61432],{"class":51440},[252,67740,55215],{"class":51440},[252,67742,1537],{"class":51440},[252,67744,64164],{"class":2102},[252,67746,15712],{"class":262},[252,67748,67749,67751,67753,67755],{"class":254,"line":9952},[252,67750,61931],{"class":311},[252,67752,51577],{"class":262},[252,67754,64175],{"class":311},[252,67756,1429],{"class":262},[252,67758,67759,67761,67763,67765],{"class":254,"line":9957},[252,67760,57556],{"class":311},[252,67762,51577],{"class":262},[252,67764,64175],{"class":311},[252,67766,1429],{"class":262},[252,67768,67769],{"class":254,"line":9963},[252,67770,2326],{"class":262},[252,67772,67773],{"class":254,"line":9984},[252,67774,2539],{"emptyLinePlaceholder":181},[252,67776,67777,67779],{"class":254,"line":9990},[252,67778,64200],{"class":2102},[252,67780,15712],{"class":262},[252,67782,67783,67785,67787,67789,67791,67793],{"class":254,"line":10004},[252,67784,54835],{"class":311},[252,67786,51577],{"class":262},[252,67788,454],{"class":311},[252,67790,64213],{"class":311},[252,67792,51632],{"class":258},[252,67794,1429],{"class":262},[252,67796,67797],{"class":254,"line":10010},[252,67798,2326],{"class":262},[252,67800,67801],{"class":254,"line":10037},[252,67802,2539],{"emptyLinePlaceholder":181},[252,67804,67805,67807,67809],{"class":254,"line":10046},[252,67806,64200],{"class":2102},[252,67808,62314],{"class":2102},[252,67810,15712],{"class":262},[252,67812,67813,67815,67817,67819],{"class":254,"line":10052},[252,67814,55149],{"class":311},[252,67816,51577],{"class":262},[252,67818,54877],{"class":311},[252,67820,1429],{"class":262},[252,67822,67823],{"class":254,"line":10060},[252,67824,2326],{"class":262},[252,67826,67827],{"class":254,"line":10065},[252,67828,2539],{"emptyLinePlaceholder":181},[252,67830,67831,67833,67836],{"class":254,"line":16744},[252,67832,64200],{"class":2102},[252,67834,67835],{"class":2102}," .active",[252,67837,15712],{"class":262},[252,67839,67840,67842,67844,67846],{"class":254,"line":16750},[252,67841,55149],{"class":311},[252,67843,51577],{"class":262},[252,67845,61009],{"class":311},[252,67847,1429],{"class":262},[252,67849,67850],{"class":254,"line":16773},[252,67851,2326],{"class":262},[252,67853,67854,67856,67858],{"class":254,"line":16779},[252,67855,52557],{"class":262},[252,67857,5266],{"class":51440},[252,67859,51447],{"class":262},[252,67861,67862,67864,67866],{"class":254,"line":16802},[252,67863,51925],{"class":262},[252,67865,51474],{"class":51440},[252,67867,51447],{"class":262},[252,67869,67870],{"class":254,"line":16816},[252,67871,2539],{"emptyLinePlaceholder":181},[252,67873,67874,67876,67878],{"class":254,"line":16836},[252,67875,1173],{"class":262},[252,67877,51940],{"class":51440},[252,67879,51447],{"class":262},[252,67881,67882,67884,67886,67888,67890,67892],{"class":254,"line":16842},[252,67883,52284],{"class":262},[252,67885,51751],{"class":51440},[252,67887,53626],{"class":2102},[252,67889,308],{"class":262},[252,67891,64315],{"class":367},[252,67893,51447],{"class":262},[252,67895,67896,67898,67900,67902,67904,67906],{"class":254,"line":16853},[252,67897,51481],{"class":262},[252,67899,51751],{"class":51440},[252,67901,53626],{"class":2102},[252,67903,308],{"class":262},[252,67905,64330],{"class":367},[252,67907,51447],{"class":262},[252,67909,67910,67912,67914,67916,67918],{"class":254,"line":16876},[252,67911,55374],{"class":262},[252,67913,224],{"class":51440},[252,67915,64341],{"class":262},[252,67917,224],{"class":51440},[252,67919,51447],{"class":262},[252,67921,67922,67924,67926],{"class":254,"line":16898},[252,67923,55374],{"class":262},[252,67925,1270],{"class":51440},[252,67927,51447],{"class":262},[252,67929,67930,67932,67934,67936,67938,67940,67942,67944,67946,67948,67950,67952,67954,67957,67959,67961,67963,67965],{"class":254,"line":16903},[252,67931,55442],{"class":262},[252,67933,210],{"class":51440},[252,67935,61192],{"class":262},[252,67937,501],{"class":51440},[252,67939,53626],{"class":2102},[252,67941,308],{"class":262},[252,67943,59846],{"class":367},[252,67945,61197],{"class":2102},[252,67947,308],{"class":262},[252,67949,64376],{"class":367},[252,67951,54091],{"class":2102},[252,67953,308],{"class":262},[252,67955,67956],{"class":367},"\"0\"",[252,67958,64379],{"class":262},[252,67960,501],{"class":51440},[252,67962,55454],{"class":262},[252,67964,210],{"class":51440},[252,67966,51447],{"class":262},[252,67968,67969,67971,67973,67975,67977,67979,67981,67983,67985,67987,67989,67991,67993,67995,67997],{"class":254,"line":16909},[252,67970,55442],{"class":262},[252,67972,210],{"class":51440},[252,67974,61192],{"class":262},[252,67976,501],{"class":51440},[252,67978,61197],{"class":2102},[252,67980,308],{"class":262},[252,67982,64376],{"class":367},[252,67984,54091],{"class":2102},[252,67986,308],{"class":262},[252,67988,3817],{"class":367},[252,67990,64406],{"class":262},[252,67992,501],{"class":51440},[252,67994,55454],{"class":262},[252,67996,210],{"class":51440},[252,67998,51447],{"class":262},[252,68000,68001,68003,68005,68007,68009,68011,68013,68015,68017,68019,68021,68023,68025,68027,68029],{"class":254,"line":16923},[252,68002,55442],{"class":262},[252,68004,210],{"class":51440},[252,68006,61192],{"class":262},[252,68008,501],{"class":51440},[252,68010,61197],{"class":2102},[252,68012,308],{"class":262},[252,68014,64376],{"class":367},[252,68016,54091],{"class":2102},[252,68018,308],{"class":262},[252,68020,3840],{"class":367},[252,68022,64433],{"class":262},[252,68024,501],{"class":51440},[252,68026,55454],{"class":262},[252,68028,210],{"class":51440},[252,68030,51447],{"class":262},[252,68032,68033,68035,68037,68039,68041,68043,68045,68047,68049,68051,68053,68055,68057,68059,68061],{"class":254,"line":16936},[252,68034,55442],{"class":262},[252,68036,210],{"class":51440},[252,68038,61192],{"class":262},[252,68040,501],{"class":51440},[252,68042,61197],{"class":2102},[252,68044,308],{"class":262},[252,68046,64376],{"class":367},[252,68048,54091],{"class":2102},[252,68050,308],{"class":262},[252,68052,3853],{"class":367},[252,68054,64460],{"class":262},[252,68056,501],{"class":51440},[252,68058,55454],{"class":262},[252,68060,210],{"class":51440},[252,68062,51447],{"class":262},[252,68064,68065,68067,68069,68071,68073,68075,68077,68079,68081,68083,68085,68087,68089,68091,68093],{"class":254,"line":16941},[252,68066,55442],{"class":262},[252,68068,210],{"class":51440},[252,68070,61192],{"class":262},[252,68072,501],{"class":51440},[252,68074,61197],{"class":2102},[252,68076,308],{"class":262},[252,68078,64376],{"class":367},[252,68080,54091],{"class":2102},[252,68082,308],{"class":262},[252,68084,3866],{"class":367},[252,68086,64487],{"class":262},[252,68088,501],{"class":51440},[252,68090,55454],{"class":262},[252,68092,210],{"class":51440},[252,68094,51447],{"class":262},[252,68096,68097,68099,68101],{"class":254,"line":16955},[252,68098,55547],{"class":262},[252,68100,1270],{"class":51440},[252,68102,51447],{"class":262},[252,68104,68105,68107,68109],{"class":254,"line":16960},[252,68106,51916],{"class":262},[252,68108,51751],{"class":51440},[252,68110,51447],{"class":262},[252,68112,68113,68115,68117,68119,68121,68123],{"class":254,"line":16966},[252,68114,51481],{"class":262},[252,68116,51751],{"class":51440},[252,68118,53626],{"class":2102},[252,68120,308],{"class":262},[252,68122,64524],{"class":367},[252,68124,51447],{"class":262},[252,68126,68127,68129,68131,68133,68135,68137,68139,68141,68143,68145,68147,68149,68151,68153,68155,68157],{"class":254,"line":16971},[252,68128,55374],{"class":262},[252,68130,51751],{"class":51440},[252,68132,53626],{"class":2102},[252,68134,308],{"class":262},[252,68136,64539],{"class":367},[252,68138,61192],{"class":262},[252,68140,1601],{"class":51440},[252,68142,55379],{"class":2102},[252,68144,308],{"class":262},[252,68146,64550],{"class":367},[252,68148,55387],{"class":2102},[252,68150,308],{"class":262},[252,68152,7792],{"class":367},[252,68154,64559],{"class":262},[252,68156,51751],{"class":51440},[252,68158,51447],{"class":262},[252,68160,68161,68163,68165,68167,68169,68171,68173,68175,68177,68179,68181,68183,68185,68187,68189,68191],{"class":254,"line":16985},[252,68162,55374],{"class":262},[252,68164,51751],{"class":51440},[252,68166,53626],{"class":2102},[252,68168,308],{"class":262},[252,68170,62763],{"class":367},[252,68172,61192],{"class":262},[252,68174,1601],{"class":51440},[252,68176,55379],{"class":2102},[252,68178,308],{"class":262},[252,68180,64586],{"class":367},[252,68182,55387],{"class":2102},[252,68184,308],{"class":262},[252,68186,7792],{"class":367},[252,68188,64559],{"class":262},[252,68190,51751],{"class":51440},[252,68192,51447],{"class":262},[252,68194,68195,68197,68199,68201,68203,68205,68207,68209,68211,68213,68215,68217,68219,68221,68223,68225],{"class":254,"line":16990},[252,68196,55374],{"class":262},[252,68198,51751],{"class":51440},[252,68200,53626],{"class":2102},[252,68202,308],{"class":262},[252,68204,62763],{"class":367},[252,68206,61192],{"class":262},[252,68208,1601],{"class":51440},[252,68210,55379],{"class":2102},[252,68212,308],{"class":262},[252,68214,64621],{"class":367},[252,68216,55387],{"class":2102},[252,68218,308],{"class":262},[252,68220,7792],{"class":367},[252,68222,64559],{"class":262},[252,68224,51751],{"class":51440},[252,68226,51447],{"class":262},[252,68228,68229,68231,68233,68235,68237,68239,68241,68243,68245,68247,68249,68251,68253,68255,68257,68259],{"class":254,"line":16995},[252,68230,55374],{"class":262},[252,68232,51751],{"class":51440},[252,68234,53626],{"class":2102},[252,68236,308],{"class":262},[252,68238,62763],{"class":367},[252,68240,61192],{"class":262},[252,68242,1601],{"class":51440},[252,68244,55379],{"class":2102},[252,68246,308],{"class":262},[252,68248,64656],{"class":367},[252,68250,55387],{"class":2102},[252,68252,308],{"class":262},[252,68254,7792],{"class":367},[252,68256,64559],{"class":262},[252,68258,51751],{"class":51440},[252,68260,51447],{"class":262},[252,68262,68263,68265,68267,68269,68271,68273,68275,68277,68279,68281,68283,68285,68287,68289,68291,68293],{"class":254,"line":17009},[252,68264,55374],{"class":262},[252,68266,51751],{"class":51440},[252,68268,53626],{"class":2102},[252,68270,308],{"class":262},[252,68272,62763],{"class":367},[252,68274,61192],{"class":262},[252,68276,1601],{"class":51440},[252,68278,55379],{"class":2102},[252,68280,308],{"class":262},[252,68282,64691],{"class":367},[252,68284,55387],{"class":2102},[252,68286,308],{"class":262},[252,68288,7792],{"class":367},[252,68290,64559],{"class":262},[252,68292,51751],{"class":51440},[252,68294,51447],{"class":262},[252,68296,68297,68299,68301],{"class":254,"line":17021},[252,68298,51916],{"class":262},[252,68300,51751],{"class":51440},[252,68302,51447],{"class":262},[252,68304,68305,68307,68309],{"class":254,"line":17026},[252,68306,52557],{"class":262},[252,68308,51751],{"class":51440},[252,68310,51447],{"class":262},[252,68312,68313,68315,68317],{"class":254,"line":17039},[252,68314,52284],{"class":262},[252,68316,51953],{"class":51440},[252,68318,51447],{"class":262},[252,68320,68321],{"class":254,"line":17044},[252,68322,68323],{"class":321},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[252,68325,68326],{"class":254,"line":17049},[252,68327,68328],{"class":321},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[252,68330,68331,68333,68335,68337,68339,68341,68343,68346],{"class":254,"line":17054},[252,68332,11361],{"class":258},[252,68334,61432],{"class":311},[252,68336,13704],{"class":258},[252,68338,54536],{"class":262},[252,68340,54539],{"class":2102},[252,68342,263],{"class":262},[252,68344,68345],{"class":367},"'.tab-nav ul'",[252,68347,269],{"class":262},[252,68349,68350],{"class":254,"line":17067},[252,68351,68352],{"class":321},"    \u002F\u002F 2.添加事件\n",[252,68354,68355,68357,68359,68361,68363,68365,68367,68369,68371],{"class":254,"line":17072},[252,68356,67094],{"class":262},[252,68358,57953],{"class":2102},[252,68360,263],{"class":262},[252,68362,57958],{"class":367},[252,68364,12575],{"class":262},[252,68366,54589],{"class":258},[252,68368,1797],{"class":262},[252,68370,337],{"class":5356},[252,68372,12582],{"class":262},[252,68374,68375,68377,68379],{"class":254,"line":32773},[252,68376,58384],{"class":262},[252,68378,67150],{"class":2102},[252,68380,67153],{"class":262},[252,68382,68383],{"class":254,"line":32779},[252,68384,68385],{"class":321},"      \u002F\u002Fe.targer是我们点击的对象\n",[252,68387,68388,68390,68392,68394,68397],{"class":254,"line":32785},[252,68389,54620],{"class":258},[252,68391,67174],{"class":262},[252,68393,54626],{"class":258},[252,68395,68396],{"class":367}," 'A'",[252,68398,12582],{"class":262},[252,68400,68401,68403,68405,68407,68410,68412,68414,68416,68418],{"class":254,"line":32791},[252,68402,52065],{"class":262},[252,68404,54539],{"class":2102},[252,68406,263],{"class":262},[252,68408,68409],{"class":367},"'.active'",[252,68411,57143],{"class":262},[252,68413,57146],{"class":2102},[252,68415,263],{"class":262},[252,68417,64854],{"class":367},[252,68419,269],{"class":262},[252,68421,68422,68425,68427,68429,68431],{"class":254,"line":32797},[252,68423,68424],{"class":262},"        e.target.classList.",[252,68426,5474],{"class":2102},[252,68428,263],{"class":262},[252,68430,64854],{"class":367},[252,68432,269],{"class":262},[252,68434,68435],{"class":254,"line":32808},[252,68436,2539],{"emptyLinePlaceholder":181},[252,68438,68439],{"class":254,"line":32814},[252,68440,68441],{"class":321},"        \u002F\u002F 下面大盒子模块\n",[252,68443,68444],{"class":254,"line":32834},[252,68445,68446],{"class":321},"        \u002F\u002F console.log(e.target.dataset.id)\n",[252,68448,68449,68451,68453,68455,68457],{"class":254,"line":32840},[252,68450,61410],{"class":258},[252,68452,3171],{"class":311},[252,68454,13704],{"class":258},[252,68456,45706],{"class":258},[252,68458,68459],{"class":262},"e.target.dataset.id\n",[252,68461,68462,68464,68466,68468,68470,68472,68474,68476,68478],{"class":254,"line":32851},[252,68463,52065],{"class":262},[252,68465,54539],{"class":2102},[252,68467,263],{"class":262},[252,68469,64902],{"class":367},[252,68471,57143],{"class":262},[252,68473,57146],{"class":2102},[252,68475,263],{"class":262},[252,68477,64854],{"class":367},[252,68479,269],{"class":262},[252,68481,68482,68484,68486,68488,68490,68492,68494,68496,68498,68500,68502,68504,68506],{"class":254,"line":32857},[252,68483,52065],{"class":262},[252,68485,54539],{"class":2102},[252,68487,263],{"class":262},[252,68489,64928],{"class":367},[252,68491,704],{"class":262},[252,68493,45706],{"class":258},[252,68495,25258],{"class":311},[252,68497,57172],{"class":367},[252,68499,57143],{"class":262},[252,68501,5474],{"class":2102},[252,68503,263],{"class":262},[252,68505,64854],{"class":367},[252,68507,269],{"class":262},[252,68509,68510],{"class":254,"line":32863},[252,68511,2539],{"emptyLinePlaceholder":181},[252,68513,68514],{"class":254,"line":32869},[252,68515,52538],{"class":262},[252,68517,68518],{"class":254,"line":32875},[252,68519,33601],{"class":262},[252,68521,68522,68524,68526],{"class":254,"line":32881},[252,68523,52557],{"class":262},[252,68525,51953],{"class":51440},[252,68527,51447],{"class":262},[252,68529,68530,68532,68534],{"class":254,"line":32887},[252,68531,51925],{"class":262},[252,68533,51940],{"class":51440},[252,68535,51447],{"class":262},[252,68537,68538],{"class":254,"line":32893},[252,68539,2539],{"emptyLinePlaceholder":181},[252,68541,68542,68544,68546],{"class":254,"line":32913},[252,68543,51925],{"class":262},[252,68545,50775],{"class":51440},[252,68547,51447],{"class":262},[224,68549,68551],{"id":68550},"_333-页面加载事件","3.3.3 页面加载事件",[207,68553,68554],{},[210,68555,68556],{},"load",[19,68558,68559],{},[1601,68560],{"alt":169,"src":68561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68563,68564],{},"window代表整个窗口，比document还要大",[19,68566,68567],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68569,68570],{},"img.addEventListener('load', function () {",[19,68572,68573],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68575,52604],{},[207,68577,68578],{"start":170},[210,68579,68580],{},"DOMContentLoaded",[19,68582,68583],{},[1601,68584],{"alt":169,"src":68585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68587,68588],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[224,68590,68592],{"id":68591},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68594,68595],{},[1601,68596],{"alt":169,"src":68597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68599,68600],{},[1601,68601],{"alt":169,"src":68602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68604,68605],{},[1601,68606],{"alt":169,"src":68607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68609,68610],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68612,68613],{},"获得的是数字型数据，不带单位",[19,68615,68616],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68618,68619],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68621,68622],{},"它是通过document.documentElement来获取",[19,68624,68625],{},[1601,68626],{"alt":169,"src":68627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68629,68630],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[224,68632,68634],{"id":68633},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68636,68637],{},[1601,68638],{"alt":169,"src":68639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68641,68642],{},[1601,68643],{"alt":169,"src":68644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[224,68646,68648],{"id":68647},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68650,68651],{},[1601,68652],{"alt":169,"src":68653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68655,68656],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68658,68659],{},[1601,68660],{"alt":169,"src":68661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68663,68664],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68666,68667],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68669,68670],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68672,68673],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68675,68676],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68678,68679],{},[1601,68680],{"alt":169,"src":68681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68683,68684],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68686,68687],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68689,68690],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68692,68693],{},"e.pageX-box.getBoundingClientRect()",[224,68695,68697],{"id":68696},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68699,68700],{},[1601,68701],{"alt":169,"src":68702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68704,68705],{},"这个是相对于视口来说的，它是个方法，不是属性值",[224,68707,68709],{"id":68708},"_338-总结","3.3.8 总结",[19,68711,68712],{},[1601,68713],{"alt":169,"src":68714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68716,68717],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68719,68720],{},"修改盒子的宽高只能通过width和height来实现",[224,68722,68724],{"id":68723},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[244,68726,68728],{"className":50773,"code":68727,"language":50775,"meta":169,"style":169},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[22,68729,68730,68735,68740,68745,68750],{"__ignoreMap":169},[252,68731,68732],{"class":254,"line":255},[252,68733,68734],{"class":262},"\u002F* 页面滑动 *\u002F\n",[252,68736,68737],{"class":254,"line":170},[252,68738,68739],{"class":262},"html {\n",[252,68741,68742],{"class":254,"line":1318},[252,68743,68744],{"class":262},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[252,68746,68747],{"class":254,"line":1333},[252,68748,68749],{"class":262},"  scroll-behavior: smooth;\n",[252,68751,68752],{"class":254,"line":1339},[252,68753,1704],{"class":262},[19,68755,68756],{},"默认是auto",[224,68758,68760],{"id":68759},"_3310-日期对象","3.3.10 日期对象",[22137,68762,68764],{"id":68763},"_33101-实例化","3.3.10.1 实例化",[19,68766,68767],{},[1601,68768],{"alt":169,"src":68769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22137,68771,68773],{"id":68772},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,68775,68776],{},[1601,68777],{"alt":169,"src":68778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,68780,68781],{},"月份+1",[19,68783,68784],{},"老外认为第一天为0，星期天",[19,68786,68787],{},"方法使用的时候必须要跟括号",[19,68789,68790],{},"快速获得日期",[19,68792,68793],{},"\u002F\u002F 得到年月日",[19,68795,68796],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,68798,68799],{},"\u002F\u002F 得到当地日期",[19,68801,68802],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,68804,68805],{},"\u002F\u002F 得到当地时间",[19,68807,68808],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,68810,68811],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,68813,68814],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51953,68816,68817],{},"\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",[19,68819,68820],{},"学会去封装函数！",[22137,68822,68824],{"id":68823},"_33103-时间戳","3.3.10.3 时间戳",[19,68826,68827],{},[1601,68828],{"alt":169,"src":68829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,68831,68832],{},[1601,68833],{"alt":169,"src":68834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,68836,68837],{},"三种方法记住一个就可以",[224,68839,68841],{"id":68840},"_3311-节点操作","3.3.11 节点操作",[22137,68843,68845],{"id":68844},"_33111-dom节点","3.3.11.1 DOM节点",[19,68847,68848],{},[1601,68849],{"alt":169,"src":68850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,68852,68853],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22137,68855,68857],{"id":68856},"_33112-查找节点","3.3.11.2 查找节点",[19,68859,68860],{},"前边的document.querySelector()是获取的元素",[19,68862,68863],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,68865,68866],{},[1601,68867],{"alt":169,"src":68868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[207,68870,68871],{},[210,68872,68873],{},"父节点",[19,68875,68876],{},[1601,68877],{"alt":169,"src":68878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[207,68880,68881],{"start":170},[210,68882,68883],{},"子节点",[19,68885,68886],{},[1601,68887],{"alt":169,"src":68888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,68890,68891],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,68893,68894],{},"children获得的是伪数组，是亲儿子",[207,68896,68897],{"start":1318},[210,68898,68899],{},"兄弟节点",[19,68901,68902],{},[1601,68903],{"alt":169,"src":68904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22137,68906,68908],{"id":68907},"_33113-增加节点","3.3.11.3 增加节点",[19,68910,68911],{},[1601,68912],{"alt":169,"src":68913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,68915,68916],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,68918,68919],{},[1601,68920],{"alt":169,"src":68921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,68923,68924],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,68926,68927],{},"下面是写法的部分展示，就按照下边的格式来写",[19,68929,68930],{},"例：",[51953,68932,68933],{},"\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",[19,68935,68936],{},[1601,68937],{"alt":169,"src":68938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,68940,68941],{},"false只克隆标签，里边的内容不会克隆过来",[244,68943,68945],{"className":50773,"code":68944,"language":50775,"meta":169,"style":169},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[22,68946,68947],{"__ignoreMap":169},[252,68948,68949],{"class":254,"line":255},[252,68950,68944],{"class":262},[22137,68952,68954],{"id":68953},"_33114-删除节点","3.3.11.4 删除节点",[19,68956,68957],{},[1601,68958],{"alt":169,"src":68959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,68961,68962],{},"父亲删儿子",[19,68964,68965],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[224,68967,68969],{"id":68968},"_3312-m端事件","3.3.12 M端事件",[19,68971,68972],{},"M端就是移动端",[19,68974,68975],{},[1601,68976],{"alt":169,"src":68977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[224,68979,68981],{"id":68980},"_3313-插件","3.3.13 插件",[19,68983,68984],{},"要熟悉官网！！！",[19,68986,68987],{},[501,68988,68989],{"href":68989,"rel":68990},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24004],[19,68992,68993],{},[501,68994,68995],{"href":68995,"rel":68996},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24004],[224,68998,69000],{"id":68999},"_3314-学生信息表","3.3.14 学生信息表",[207,69002,69003,69006,69009,69012,69015,69018,69021,69024],{},[210,69004,69005],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[210,69007,69008],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[210,69010,69011],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[210,69013,69014],{},"用好表单元素自带的属性，value,name等",[210,69016,69017],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[210,69019,69020],{},"不要忘记事件对象",[210,69022,69023],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[210,69025,69026],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69028,69029],{},"结构：",[244,69031,69033],{"className":50773,"code":69032,"language":50775,"meta":169,"style":169},"\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",[22,69034,69035,69045,69059,69063,69071,69085,69105,69126,69139,69163,69171,69175,69183,69196,69217,69245,69273,69278,69300,69320,69339,69347,69375,69397,69417,69437,69457,69477,69497,69505,69525,69533,69537,69550,69558,69566,69574,69587,69600,69613,69626,69639,69652,69665,69673,69681,69689,69694,69699,69704,69709,69714,69719,69724,69729,69734,69739,69744,69749,69754,69762,69770,69778,69782,69802,69821,69841,69861,69881,69901,69905,69910,69930,69935,69945,69950,69955,69975,69997,70002,70012,70016,70020,70025,70030,70059,70073,70088,70092,70096,70100,70105,70116,70129,70134,70139,70144,70149,70154,70158,70163,70168,70177,70182,70187,70199,70204,70211,70215,70220,70230,70235,70245,70250,70278,70299,70309,70329,70347,70364,70381,70398,70415,70419,70429,70434,70439,70444,70455,70459,70463,70467,70472,70477,70498,70510,70515,70520,70525,70539,70544,70551,70555,70559,70567,70571,70579,70583],{"__ignoreMap":169},[252,69036,69037,69039,69041,69043],{"class":254,"line":255},[252,69038,51437],{"class":262},[252,69040,51441],{"class":51440},[252,69042,51444],{"class":2102},[252,69044,51447],{"class":262},[252,69046,69047,69049,69051,69053,69055,69057],{"class":254,"line":170},[252,69048,1173],{"class":262},[252,69050,50775],{"class":51440},[252,69052,51456],{"class":2102},[252,69054,308],{"class":262},[252,69056,51461],{"class":367},[252,69058,51447],{"class":262},[252,69060,69061],{"class":254,"line":1318},[252,69062,2539],{"emptyLinePlaceholder":181},[252,69064,69065,69067,69069],{"class":254,"line":1333},[252,69066,1173],{"class":262},[252,69068,51474],{"class":51440},[252,69070,51447],{"class":262},[252,69072,69073,69075,69077,69079,69081,69083],{"class":254,"line":1339},[252,69074,52284],{"class":262},[252,69076,51484],{"class":51440},[252,69078,51487],{"class":2102},[252,69080,308],{"class":262},[252,69082,51492],{"class":367},[252,69084,59267],{"class":262},[252,69086,69087,69089,69091,69093,69095,69097,69099,69101,69103],{"class":254,"line":1353},[252,69088,52284],{"class":262},[252,69090,51484],{"class":51440},[252,69092,15060],{"class":2102},[252,69094,308],{"class":262},[252,69096,51531],{"class":367},[252,69098,51511],{"class":2102},[252,69100,308],{"class":262},[252,69102,51538],{"class":367},[252,69104,59267],{"class":262},[252,69106,69107,69109,69111,69113,69115,69117,69119,69121,69124],{"class":254,"line":1359},[252,69108,52284],{"class":262},[252,69110,51484],{"class":51440},[252,69112,51503],{"class":2102},[252,69114,308],{"class":262},[252,69116,51508],{"class":367},[252,69118,51511],{"class":2102},[252,69120,308],{"class":262},[252,69122,69123],{"class":367},"\"ie=edge\"",[252,69125,59267],{"class":262},[252,69127,69128,69130,69132,69135,69137],{"class":254,"line":1450},[252,69129,52284],{"class":262},[252,69131,51547],{"class":51440},[252,69133,69134],{"class":262},">学生信息管理\u003C\u002F",[252,69136,51547],{"class":51440},[252,69138,51447],{"class":262},[252,69140,69141,69143,69146,69149,69151,69154,69156,69158,69161],{"class":254,"line":1456},[252,69142,52284],{"class":262},[252,69144,69145],{"class":51440},"link",[252,69147,69148],{"class":2102}," rel",[252,69150,308],{"class":262},[252,69152,69153],{"class":367},"\"stylesheet\"",[252,69155,61197],{"class":2102},[252,69157,308],{"class":262},[252,69159,69160],{"class":367},"\"css\u002Findex.css\"",[252,69162,59267],{"class":262},[252,69164,69165,69167,69169],{"class":254,"line":1468},[252,69166,51925],{"class":262},[252,69168,51474],{"class":51440},[252,69170,51447],{"class":262},[252,69172,69173],{"class":254,"line":1751},[252,69174,2539],{"emptyLinePlaceholder":181},[252,69176,69177,69179,69181],{"class":254,"line":1756},[252,69178,1173],{"class":262},[252,69180,51940],{"class":51440},[252,69182,51447],{"class":262},[252,69184,69185,69187,69189,69192,69194],{"class":254,"line":1762},[252,69186,52284],{"class":262},[252,69188,10],{"class":51440},[252,69190,69191],{"class":262},">新增学员\u003C\u002F",[252,69193,10],{"class":51440},[252,69195,51447],{"class":262},[252,69197,69198,69200,69202,69204,69206,69208,69211,69213,69215],{"class":254,"line":1767},[252,69199,52284],{"class":262},[252,69201,66765],{"class":51440},[252,69203,53626],{"class":2102},[252,69205,308],{"class":262},[252,69207,62804],{"class":367},[252,69209,69210],{"class":2102}," autocomplete",[252,69212,308],{"class":262},[252,69214,31916],{"class":367},[252,69216,51447],{"class":262},[252,69218,69219,69222,69224,69226,69228,69230,69232,69234,69237,69239,69241,69243],{"class":254,"line":1781},[252,69220,69221],{"class":262},"    姓名：\u003C",[252,69223,53961],{"class":51440},[252,69225,53964],{"class":2102},[252,69227,308],{"class":262},[252,69229,62839],{"class":367},[252,69231,53626],{"class":2102},[252,69233,308],{"class":262},[252,69235,69236],{"class":367},"\"uname\"",[252,69238,15060],{"class":2102},[252,69240,308],{"class":262},[252,69242,69236],{"class":367},[252,69244,59267],{"class":262},[252,69246,69247,69250,69252,69254,69256,69258,69260,69262,69265,69267,69269,69271],{"class":254,"line":1786},[252,69248,69249],{"class":262},"    年龄：\u003C",[252,69251,53961],{"class":51440},[252,69253,53964],{"class":2102},[252,69255,308],{"class":262},[252,69257,62839],{"class":367},[252,69259,53626],{"class":2102},[252,69261,308],{"class":262},[252,69263,69264],{"class":367},"\"age\"",[252,69266,15060],{"class":2102},[252,69268,308],{"class":262},[252,69270,69264],{"class":367},[252,69272,59267],{"class":262},[252,69274,69275],{"class":254,"line":1792},[252,69276,69277],{"class":262},"    性别:\n",[252,69279,69280,69282,69285,69287,69289,69292,69294,69296,69298],{"class":254,"line":1813},[252,69281,51481],{"class":262},[252,69283,69284],{"class":51440},"select",[252,69286,15060],{"class":2102},[252,69288,308],{"class":262},[252,69290,69291],{"class":367},"\"gender\"",[252,69293,53626],{"class":2102},[252,69295,308],{"class":262},[252,69297,69291],{"class":367},[252,69299,51447],{"class":262},[252,69301,69302,69304,69307,69309,69311,69313,69316,69318],{"class":254,"line":1818},[252,69303,55374],{"class":262},[252,69305,69306],{"class":51440},"option",[252,69308,66791],{"class":2102},[252,69310,308],{"class":262},[252,69312,10101],{"class":367},[252,69314,69315],{"class":262},">男\u003C\u002F",[252,69317,69306],{"class":51440},[252,69319,51447],{"class":262},[252,69321,69322,69324,69326,69328,69330,69332,69335,69337],{"class":254,"line":1832},[252,69323,55374],{"class":262},[252,69325,69306],{"class":51440},[252,69327,66791],{"class":2102},[252,69329,308],{"class":262},[252,69331,10170],{"class":367},[252,69333,69334],{"class":262},">女\u003C\u002F",[252,69336,69306],{"class":51440},[252,69338,51447],{"class":262},[252,69340,69341,69343,69345],{"class":254,"line":1837},[252,69342,51916],{"class":262},[252,69344,69284],{"class":51440},[252,69346,51447],{"class":262},[252,69348,69349,69352,69354,69356,69358,69360,69362,69364,69367,69369,69371,69373],{"class":254,"line":1866},[252,69350,69351],{"class":262},"    薪资：\u003C",[252,69353,53961],{"class":51440},[252,69355,53964],{"class":2102},[252,69357,308],{"class":262},[252,69359,62839],{"class":367},[252,69361,53626],{"class":2102},[252,69363,308],{"class":262},[252,69365,69366],{"class":367},"\"salary\"",[252,69368,15060],{"class":2102},[252,69370,308],{"class":262},[252,69372,69366],{"class":367},[252,69374,59267],{"class":262},[252,69376,69377,69380,69382,69384,69386,69389,69391,69393,69395],{"class":254,"line":1871},[252,69378,69379],{"class":262},"    就业城市：\u003C",[252,69381,69284],{"class":51440},[252,69383,15060],{"class":2102},[252,69385,308],{"class":262},[252,69387,69388],{"class":367},"\"city\"",[252,69390,53626],{"class":2102},[252,69392,308],{"class":262},[252,69394,69388],{"class":367},[252,69396,51447],{"class":262},[252,69398,69399,69401,69403,69405,69407,69410,69413,69415],{"class":254,"line":1888},[252,69400,55374],{"class":262},[252,69402,69306],{"class":51440},[252,69404,66791],{"class":2102},[252,69406,308],{"class":262},[252,69408,69409],{"class":367},"\"北京\"",[252,69411,69412],{"class":262},">北京\u003C\u002F",[252,69414,69306],{"class":51440},[252,69416,51447],{"class":262},[252,69418,69419,69421,69423,69425,69427,69430,69433,69435],{"class":254,"line":1893},[252,69420,55374],{"class":262},[252,69422,69306],{"class":51440},[252,69424,66791],{"class":2102},[252,69426,308],{"class":262},[252,69428,69429],{"class":367},"\"上海\"",[252,69431,69432],{"class":262},">上海\u003C\u002F",[252,69434,69306],{"class":51440},[252,69436,51447],{"class":262},[252,69438,69439,69441,69443,69445,69447,69450,69453,69455],{"class":254,"line":1898},[252,69440,55374],{"class":262},[252,69442,69306],{"class":51440},[252,69444,66791],{"class":2102},[252,69446,308],{"class":262},[252,69448,69449],{"class":367},"\"广州\"",[252,69451,69452],{"class":262},">广州\u003C\u002F",[252,69454,69306],{"class":51440},[252,69456,51447],{"class":262},[252,69458,69459,69461,69463,69465,69467,69470,69473,69475],{"class":254,"line":1903},[252,69460,55374],{"class":262},[252,69462,69306],{"class":51440},[252,69464,66791],{"class":2102},[252,69466,308],{"class":262},[252,69468,69469],{"class":367},"\"深圳\"",[252,69471,69472],{"class":262},">深圳\u003C\u002F",[252,69474,69306],{"class":51440},[252,69476,51447],{"class":262},[252,69478,69479,69481,69483,69485,69487,69490,69493,69495],{"class":254,"line":1917},[252,69480,55374],{"class":262},[252,69482,69306],{"class":51440},[252,69484,66791],{"class":2102},[252,69486,308],{"class":262},[252,69488,69489],{"class":367},"\"曹县\"",[252,69491,69492],{"class":262},">曹县\u003C\u002F",[252,69494,69306],{"class":51440},[252,69496,51447],{"class":262},[252,69498,69499,69501,69503],{"class":254,"line":1922},[252,69500,51916],{"class":262},[252,69502,69284],{"class":51440},[252,69504,51447],{"class":262},[252,69506,69507,69509,69511,69513,69515,69518,69521,69523],{"class":254,"line":2716},[252,69508,51481],{"class":262},[252,69510,54027],{"class":51440},[252,69512,53626],{"class":2102},[252,69514,308],{"class":262},[252,69516,69517],{"class":367},"\"add\"",[252,69519,69520],{"class":262},">录入\u003C\u002F",[252,69522,54027],{"class":51440},[252,69524,51447],{"class":262},[252,69526,69527,69529,69531],{"class":254,"line":2730},[252,69528,52557],{"class":262},[252,69530,66765],{"class":51440},[252,69532,51447],{"class":262},[252,69534,69535],{"class":254,"line":2738},[252,69536,2539],{"emptyLinePlaceholder":181},[252,69538,69539,69541,69543,69546,69548],{"class":254,"line":2743},[252,69540,52284],{"class":262},[252,69542,10],{"class":51440},[252,69544,69545],{"class":262},">就业榜\u003C\u002F",[252,69547,10],{"class":51440},[252,69549,51447],{"class":262},[252,69551,69552,69554,69556],{"class":254,"line":2749},[252,69553,52284],{"class":262},[252,69555,400],{"class":51440},[252,69557,51447],{"class":262},[252,69559,69560,69562,69564],{"class":254,"line":2755},[252,69561,51481],{"class":262},[252,69563,403],{"class":51440},[252,69565,51447],{"class":262},[252,69567,69568,69570,69572],{"class":254,"line":2760},[252,69569,55374],{"class":262},[252,69571,406],{"class":51440},[252,69573,51447],{"class":262},[252,69575,69576,69578,69580,69583,69585],{"class":254,"line":8088},[252,69577,55442],{"class":262},[252,69579,409],{"class":51440},[252,69581,69582],{"class":262},">序号\u003C\u002F",[252,69584,409],{"class":51440},[252,69586,51447],{"class":262},[252,69588,69589,69591,69593,69596,69598],{"class":254,"line":8112},[252,69590,55442],{"class":262},[252,69592,409],{"class":51440},[252,69594,69595],{"class":262},">姓名\u003C\u002F",[252,69597,409],{"class":51440},[252,69599,51447],{"class":262},[252,69601,69602,69604,69606,69609,69611],{"class":254,"line":8117},[252,69603,55442],{"class":262},[252,69605,409],{"class":51440},[252,69607,69608],{"class":262},">年龄\u003C\u002F",[252,69610,409],{"class":51440},[252,69612,51447],{"class":262},[252,69614,69615,69617,69619,69622,69624],{"class":254,"line":8123},[252,69616,55442],{"class":262},[252,69618,409],{"class":51440},[252,69620,69621],{"class":262},">性别\u003C\u002F",[252,69623,409],{"class":51440},[252,69625,51447],{"class":262},[252,69627,69628,69630,69632,69635,69637],{"class":254,"line":8150},[252,69629,55442],{"class":262},[252,69631,409],{"class":51440},[252,69633,69634],{"class":262},">薪资\u003C\u002F",[252,69636,409],{"class":51440},[252,69638,51447],{"class":262},[252,69640,69641,69643,69645,69648,69650],{"class":254,"line":8155},[252,69642,55442],{"class":262},[252,69644,409],{"class":51440},[252,69646,69647],{"class":262},">就业城市\u003C\u002F",[252,69649,409],{"class":51440},[252,69651,51447],{"class":262},[252,69653,69654,69656,69658,69661,69663],{"class":254,"line":8161},[252,69655,55442],{"class":262},[252,69657,409],{"class":51440},[252,69659,69660],{"class":262},">操作\u003C\u002F",[252,69662,409],{"class":51440},[252,69664,51447],{"class":262},[252,69666,69667,69669,69671],{"class":254,"line":8173},[252,69668,55547],{"class":262},[252,69670,406],{"class":51440},[252,69672,51447],{"class":262},[252,69674,69675,69677,69679],{"class":254,"line":8185},[252,69676,51916],{"class":262},[252,69678,403],{"class":51440},[252,69680,51447],{"class":262},[252,69682,69683,69685,69687],{"class":254,"line":8197},[252,69684,51481],{"class":262},[252,69686,447],{"class":51440},[252,69688,51447],{"class":262},[252,69690,69691],{"class":254,"line":9856},[252,69692,69693],{"class":321},"      \u003C!-- \n",[252,69695,69696],{"class":254,"line":9881},[252,69697,69698],{"class":321},"        \u003Ctr>\n",[252,69700,69701],{"class":254,"line":9904},[252,69702,69703],{"class":321},"          \u003Ctd>1001\u003C\u002Ftd>\n",[252,69705,69706],{"class":254,"line":9928},[252,69707,69708],{"class":321},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[252,69710,69711],{"class":254,"line":9933},[252,69712,69713],{"class":321},"          \u003Ctd>19\u003C\u002Ftd>\n",[252,69715,69716],{"class":254,"line":9938},[252,69717,69718],{"class":321},"          \u003Ctd>男\u003C\u002Ftd>\n",[252,69720,69721],{"class":254,"line":9943},[252,69722,69723],{"class":321},"          \u003Ctd>15000\u003C\u002Ftd>\n",[252,69725,69726],{"class":254,"line":9952},[252,69727,69728],{"class":321},"          \u003Ctd>上海\u003C\u002Ftd>\n",[252,69730,69731],{"class":254,"line":9957},[252,69732,69733],{"class":321},"          \u003Ctd>\n",[252,69735,69736],{"class":254,"line":9963},[252,69737,69738],{"class":321},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[252,69740,69741],{"class":254,"line":9984},[252,69742,69743],{"class":321},"          \u003C\u002Ftd>\n",[252,69745,69746],{"class":254,"line":9990},[252,69747,69748],{"class":321},"        \u003C\u002Ftr> \n",[252,69750,69751],{"class":254,"line":10004},[252,69752,69753],{"class":321},"        -->\n",[252,69755,69756,69758,69760],{"class":254,"line":10010},[252,69757,51916],{"class":262},[252,69759,447],{"class":51440},[252,69761,51447],{"class":262},[252,69763,69764,69766,69768],{"class":254,"line":10037},[252,69765,52557],{"class":262},[252,69767,400],{"class":51440},[252,69769,51447],{"class":262},[252,69771,69772,69774,69776],{"class":254,"line":10046},[252,69773,52284],{"class":262},[252,69775,51953],{"class":51440},[252,69777,51447],{"class":262},[252,69779,69780],{"class":254,"line":10052},[252,69781,60098],{"class":321},[252,69783,69784,69786,69789,69791,69793,69795,69797,69800],{"class":254,"line":10060},[252,69785,11361],{"class":258},[252,69787,69788],{"class":311}," uname",[252,69790,13704],{"class":258},[252,69792,54536],{"class":262},[252,69794,54539],{"class":2102},[252,69796,263],{"class":262},[252,69798,69799],{"class":367},"'.uname'",[252,69801,269],{"class":262},[252,69803,69804,69806,69808,69810,69812,69814,69816,69819],{"class":254,"line":10065},[252,69805,11361],{"class":258},[252,69807,15829],{"class":311},[252,69809,13704],{"class":258},[252,69811,54536],{"class":262},[252,69813,54539],{"class":2102},[252,69815,263],{"class":262},[252,69817,69818],{"class":367},"'.age'",[252,69820,269],{"class":262},[252,69822,69823,69825,69828,69830,69832,69834,69836,69839],{"class":254,"line":16744},[252,69824,11361],{"class":258},[252,69826,69827],{"class":311}," gender",[252,69829,13704],{"class":258},[252,69831,54536],{"class":262},[252,69833,54539],{"class":2102},[252,69835,263],{"class":262},[252,69837,69838],{"class":367},"'.gender'",[252,69840,269],{"class":262},[252,69842,69843,69845,69848,69850,69852,69854,69856,69859],{"class":254,"line":16750},[252,69844,11361],{"class":258},[252,69846,69847],{"class":311}," salary",[252,69849,13704],{"class":258},[252,69851,54536],{"class":262},[252,69853,54539],{"class":2102},[252,69855,263],{"class":262},[252,69857,69858],{"class":367},"'.salary'",[252,69860,269],{"class":262},[252,69862,69863,69865,69868,69870,69872,69874,69876,69879],{"class":254,"line":16773},[252,69864,11361],{"class":258},[252,69866,69867],{"class":311}," city",[252,69869,13704],{"class":258},[252,69871,54536],{"class":262},[252,69873,54539],{"class":2102},[252,69875,263],{"class":262},[252,69877,69878],{"class":367},"'.city'",[252,69880,269],{"class":262},[252,69882,69883,69885,69888,69890,69892,69894,69896,69899],{"class":254,"line":16779},[252,69884,11361],{"class":258},[252,69886,69887],{"class":311}," tbody",[252,69889,13704],{"class":258},[252,69891,54536],{"class":262},[252,69893,54539],{"class":2102},[252,69895,263],{"class":262},[252,69897,69898],{"class":367},"'tbody'",[252,69900,269],{"class":262},[252,69902,69903],{"class":254,"line":16802},[252,69904,2539],{"emptyLinePlaceholder":181},[252,69906,69907],{"class":254,"line":16816},[252,69908,69909],{"class":321},"    \u002F\u002F 获取所有带有name属性的元素\n",[252,69911,69912,69914,69917,69919,69921,69923,69925,69928],{"class":254,"line":16836},[252,69913,11361],{"class":258},[252,69915,69916],{"class":311}," items",[252,69918,13704],{"class":258},[252,69920,54536],{"class":262},[252,69922,55821],{"class":2102},[252,69924,263],{"class":262},[252,69926,69927],{"class":367},"'[name]'",[252,69929,269],{"class":262},[252,69931,69932],{"class":254,"line":16842},[252,69933,69934],{"class":321},"    \u002F\u002F 声明一个空的数组\n",[252,69936,69937,69939,69941,69943],{"class":254,"line":16853},[252,69938,11361],{"class":258},[252,69940,57835],{"class":311},[252,69942,13704],{"class":258},[252,69944,51978],{"class":262},[252,69946,69947],{"class":254,"line":16876},[252,69948,69949],{"class":321},"    \u002F\u002F 1.录入模块\n",[252,69951,69952],{"class":254,"line":16898},[252,69953,69954],{"class":321},"    \u002F\u002F 1.1这是一个表单提交事件\n",[252,69956,69957,69959,69962,69964,69966,69968,69970,69973],{"class":254,"line":16903},[252,69958,11361],{"class":258},[252,69960,69961],{"class":311}," info",[252,69963,13704],{"class":258},[252,69965,54536],{"class":262},[252,69967,54539],{"class":2102},[252,69969,263],{"class":262},[252,69971,69972],{"class":367},"'.info'",[252,69974,269],{"class":262},[252,69976,69977,69980,69982,69984,69987,69989,69991,69993,69995],{"class":254,"line":16909},[252,69978,69979],{"class":262},"    info.",[252,69981,57953],{"class":2102},[252,69983,263],{"class":262},[252,69985,69986],{"class":367},"'submit'",[252,69988,12575],{"class":262},[252,69990,54589],{"class":258},[252,69992,1797],{"class":262},[252,69994,337],{"class":5356},[252,69996,12582],{"class":262},[252,69998,69999],{"class":254,"line":16923},[252,70000,70001],{"class":321},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[252,70003,70004,70007,70010],{"class":254,"line":16936},[252,70005,70006],{"class":262},"      e.",[252,70008,70009],{"class":2102},"preventDefault",[252,70011,2115],{"class":262},[252,70013,70014],{"class":254,"line":16941},[252,70015,60152],{"class":321},[252,70017,70018],{"class":254,"line":16955},[252,70019,2539],{"emptyLinePlaceholder":181},[252,70021,70022],{"class":254,"line":16960},[252,70023,70024],{"class":321},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[252,70026,70027],{"class":254,"line":16966},[252,70028,70029],{"class":321},"      \u002F\u002F 先遍历循环\n",[252,70031,70032,70034,70036,70038,70040,70042,70044,70046,70048,70051,70053,70055,70057],{"class":254,"line":16971},[252,70033,52424],{"class":258},[252,70035,1797],{"class":262},[252,70037,51987],{"class":258},[252,70039,9578],{"class":262},[252,70041,308],{"class":258},[252,70043,4232],{"class":311},[252,70045,9585],{"class":262},[252,70047,1173],{"class":258},[252,70049,70050],{"class":262}," items.",[252,70052,52108],{"class":311},[252,70054,3353],{"class":262},[252,70056,2431],{"class":258},[252,70058,12582],{"class":262},[252,70060,70061,70063,70066,70068,70071],{"class":254,"line":16985},[252,70062,2636],{"class":258},[252,70064,70065],{"class":262}," (items[i].value ",[252,70067,54626],{"class":258},[252,70069,70070],{"class":367}," ''",[252,70072,12582],{"class":262},[252,70074,70075,70078,70081,70083,70086],{"class":254,"line":16990},[252,70076,70077],{"class":258},"          return",[252,70079,70080],{"class":2102}," alert",[252,70082,263],{"class":262},[252,70084,70085],{"class":367},"'输入内容不能为空'",[252,70087,269],{"class":262},[252,70089,70090],{"class":254,"line":16995},[252,70091,2668],{"class":262},[252,70093,70094],{"class":254,"line":17009},[252,70095,52538],{"class":262},[252,70097,70098],{"class":254,"line":17021},[252,70099,2539],{"emptyLinePlaceholder":181},[252,70101,70102],{"class":254,"line":17026},[252,70103,70104],{"class":321},"      \u002F\u002F 创建新的对象\n",[252,70106,70107,70109,70112,70114],{"class":254,"line":17039},[252,70108,58368],{"class":258},[252,70110,70111],{"class":311}," obj",[252,70113,13704],{"class":258},[252,70115,15712],{"class":262},[252,70117,70118,70121,70123,70125,70127],{"class":254,"line":17044},[252,70119,70120],{"class":262},"        stuID: arr.",[252,70122,52108],{"class":311},[252,70124,45706],{"class":258},[252,70126,25258],{"class":311},[252,70128,31606],{"class":262},[252,70130,70131],{"class":254,"line":17049},[252,70132,70133],{"class":262},"        uname: uname.value,\n",[252,70135,70136],{"class":254,"line":17054},[252,70137,70138],{"class":262},"        age: age.value,\n",[252,70140,70141],{"class":254,"line":17067},[252,70142,70143],{"class":262},"        gender: gender.value,\n",[252,70145,70146],{"class":254,"line":17072},[252,70147,70148],{"class":262},"        salary: salary.value,\n",[252,70150,70151],{"class":254,"line":32773},[252,70152,70153],{"class":262},"        city: city.value\n",[252,70155,70156],{"class":254,"line":32779},[252,70157,52538],{"class":262},[252,70159,70160],{"class":254,"line":32785},[252,70161,70162],{"class":321},"      \u002F\u002F console.log(obj);\n",[252,70164,70165],{"class":254,"line":32791},[252,70166,70167],{"class":321},"      \u002F\u002F 追加到数组里面\n",[252,70169,70170,70172,70174],{"class":254,"line":32797},[252,70171,58147],{"class":262},[252,70173,52024],{"class":2102},[252,70175,70176],{"class":262},"(obj)\n",[252,70178,70179],{"class":254,"line":32808},[252,70180,70181],{"class":321},"      \u002F\u002F console.log(arr);\n",[252,70183,70184],{"class":254,"line":32814},[252,70185,70186],{"class":321},"      \u002F\u002F 清空表单  reset重置表单\n",[252,70188,70189,70192,70194,70197],{"class":254,"line":32834},[252,70190,70191],{"class":311},"      this",[252,70193,821],{"class":262},[252,70195,70196],{"class":2102},"reset",[252,70198,2115],{"class":262},[252,70200,70201],{"class":254,"line":32840},[252,70202,70203],{"class":321},"      \u002F\u002F 调用渲染函数\n",[252,70205,70206,70209],{"class":254,"line":32851},[252,70207,70208],{"class":2102},"      render",[252,70210,2115],{"class":262},[252,70212,70213],{"class":254,"line":32857},[252,70214,33601],{"class":262},[252,70216,70217],{"class":254,"line":32863},[252,70218,70219],{"class":321},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[252,70221,70222,70225,70228],{"class":254,"line":32869},[252,70223,70224],{"class":258},"    function",[252,70226,70227],{"class":2102}," render",[252,70229,10993],{"class":262},[252,70231,70232],{"class":254,"line":32875},[252,70233,70234],{"class":321},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[252,70236,70237,70240,70242],{"class":254,"line":32881},[252,70238,70239],{"class":262},"      tbody.innerHTML ",[252,70241,308],{"class":258},[252,70243,70244],{"class":367}," ''\n",[252,70246,70247],{"class":254,"line":32887},[252,70248,70249],{"class":321},"      \u002F\u002F 遍历数组\n",[252,70251,70252,70254,70256,70258,70260,70262,70264,70266,70268,70270,70272,70274,70276],{"class":254,"line":32893},[252,70253,52424],{"class":258},[252,70255,1797],{"class":262},[252,70257,51987],{"class":258},[252,70259,9578],{"class":262},[252,70261,308],{"class":258},[252,70263,4232],{"class":311},[252,70265,9585],{"class":262},[252,70267,1173],{"class":258},[252,70269,52105],{"class":262},[252,70271,52108],{"class":311},[252,70273,3353],{"class":262},[252,70275,2431],{"class":258},[252,70277,12582],{"class":262},[252,70279,70280,70282,70285,70287,70289,70292,70294,70297],{"class":254,"line":32913},[252,70281,61410],{"class":258},[252,70283,70284],{"class":311}," tr",[252,70286,13704],{"class":258},[252,70288,54536],{"class":262},[252,70290,70291],{"class":2102},"createElement",[252,70293,263],{"class":262},[252,70295,70296],{"class":367},"'tr'",[252,70298,269],{"class":262},[252,70300,70301,70304,70306],{"class":254,"line":32919},[252,70302,70303],{"class":262},"        tr.innerHTML ",[252,70305,308],{"class":258},[252,70307,70308],{"class":367}," `\n",[252,70310,70311,70314,70316,70318,70320,70323,70326],{"class":254,"line":32935},[252,70312,70313],{"class":367},"        \u003Ctd>${",[252,70315,4019],{"class":262},[252,70317,1153],{"class":367},[252,70319,704],{"class":262},[252,70321,70322],{"class":367},"].",[252,70324,70325],{"class":262},"stuID",[252,70327,70328],{"class":367},"}\u003C\u002Ftd>\n",[252,70330,70331,70334,70336,70338,70340,70342,70345],{"class":254,"line":32941},[252,70332,70333],{"class":367},"          \u003Ctd>${",[252,70335,4019],{"class":262},[252,70337,1153],{"class":367},[252,70339,704],{"class":262},[252,70341,70322],{"class":367},[252,70343,70344],{"class":262},"uname",[252,70346,70328],{"class":367},[252,70348,70349,70351,70353,70355,70357,70359,70362],{"class":254,"line":32955},[252,70350,70333],{"class":367},[252,70352,4019],{"class":262},[252,70354,1153],{"class":367},[252,70356,704],{"class":262},[252,70358,70322],{"class":367},[252,70360,70361],{"class":262},"age",[252,70363,70328],{"class":367},[252,70365,70366,70368,70370,70372,70374,70376,70379],{"class":254,"line":32961},[252,70367,70333],{"class":367},[252,70369,4019],{"class":262},[252,70371,1153],{"class":367},[252,70373,704],{"class":262},[252,70375,70322],{"class":367},[252,70377,70378],{"class":262},"gender",[252,70380,70328],{"class":367},[252,70382,70383,70385,70387,70389,70391,70393,70396],{"class":254,"line":32976},[252,70384,70333],{"class":367},[252,70386,4019],{"class":262},[252,70388,1153],{"class":367},[252,70390,704],{"class":262},[252,70392,70322],{"class":367},[252,70394,70395],{"class":262},"salary",[252,70397,70328],{"class":367},[252,70399,70400,70402,70404,70406,70408,70410,70413],{"class":254,"line":32982},[252,70401,70333],{"class":367},[252,70403,4019],{"class":262},[252,70405,1153],{"class":367},[252,70407,704],{"class":262},[252,70409,70322],{"class":367},[252,70411,70412],{"class":262},"city",[252,70414,70328],{"class":367},[252,70416,70417],{"class":254,"line":32991},[252,70418,69733],{"class":367},[252,70420,70421,70424,70426],{"class":254,"line":32997},[252,70422,70423],{"class":367},"            \u003Ca href=\"javascript:\" data-id=${",[252,70425,704],{"class":262},[252,70427,70428],{"class":367},"}>删除\u003C\u002Fa>\n",[252,70430,70431],{"class":254,"line":33006},[252,70432,70433],{"class":367},"          \u003C\u002Ftd> \n",[252,70435,70436],{"class":254,"line":33012},[252,70437,70438],{"class":367},"          `\n",[252,70440,70441],{"class":254,"line":33018},[252,70442,70443],{"class":321},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[252,70445,70446,70449,70452],{"class":254,"line":33027},[252,70447,70448],{"class":262},"        tbody.",[252,70450,70451],{"class":2102},"appendChild",[252,70453,70454],{"class":262},"(tr)\n",[252,70456,70457],{"class":254,"line":33033},[252,70458,52538],{"class":262},[252,70460,70461],{"class":254,"line":33044},[252,70462,2326],{"class":262},[252,70464,70465],{"class":254,"line":33050},[252,70466,2539],{"emptyLinePlaceholder":181},[252,70468,70469],{"class":254,"line":33069},[252,70470,70471],{"class":321},"    \u002F\u002F 3.删除委托\n",[252,70473,70474],{"class":254,"line":33075},[252,70475,70476],{"class":321},"    \u002F\u002F 3.1 事件委托 tbody\n",[252,70478,70479,70482,70484,70486,70488,70490,70492,70494,70496],{"class":254,"line":33086},[252,70480,70481],{"class":262},"    tbody.",[252,70483,57953],{"class":2102},[252,70485,263],{"class":262},[252,70487,57958],{"class":367},[252,70489,12575],{"class":262},[252,70491,54589],{"class":258},[252,70493,1797],{"class":262},[252,70495,337],{"class":5356},[252,70497,12582],{"class":262},[252,70499,70500,70502,70504,70506,70508],{"class":254,"line":33092},[252,70501,54620],{"class":258},[252,70503,67174],{"class":262},[252,70505,54626],{"class":258},[252,70507,68396],{"class":367},[252,70509,12582],{"class":262},[252,70511,70512],{"class":254,"line":33112},[252,70513,70514],{"class":321},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[252,70516,70517],{"class":254,"line":33128},[252,70518,70519],{"class":321},"        \u002F\u002F console.log(e.target.dataset.id);\n",[252,70521,70522],{"class":254,"line":33134},[252,70523,70524],{"class":321},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[252,70526,70527,70530,70532,70535,70537],{"class":254,"line":33148},[252,70528,70529],{"class":262},"        arr.",[252,70531,58150],{"class":2102},[252,70533,70534],{"class":262},"(e.target.dataset.id, ",[252,70536,480],{"class":311},[252,70538,269],{"class":262},[252,70540,70541],{"class":254,"line":33154},[252,70542,70543],{"class":321},"        \u002F\u002F 重新渲染一次\n",[252,70545,70546,70549],{"class":254,"line":33160},[252,70547,70548],{"class":2102},"        render",[252,70550,2115],{"class":262},[252,70552,70553],{"class":254,"line":33171},[252,70554,52538],{"class":262},[252,70556,70557],{"class":254,"line":33177},[252,70558,33601],{"class":262},[252,70560,70561,70563,70565],{"class":254,"line":33183},[252,70562,52557],{"class":262},[252,70564,51953],{"class":51440},[252,70566,51447],{"class":262},[252,70568,70569],{"class":254,"line":33193},[252,70570,2539],{"emptyLinePlaceholder":181},[252,70572,70573,70575,70577],{"class":254,"line":33199},[252,70574,51925],{"class":262},[252,70576,51940],{"class":51440},[252,70578,51447],{"class":262},[252,70580,70581],{"class":254,"line":33210},[252,70582,2539],{"emptyLinePlaceholder":181},[252,70584,70585,70587,70589],{"class":254,"line":33216},[252,70586,51925],{"class":262},[252,70588,50775],{"class":51440},[252,70590,51447],{"class":262},[19,70592,70593],{},"样式：",[244,70595,70599],{"className":70596,"code":70597,"language":70598,"meta":169,"style":169},"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",[22,70600,70601,70606,70616,70625,70629,70633,70638,70648,70653,70657,70662,70672,70677,70686,70690,70694,70699,70704,70714,70724,70729,70733,70738,70747,70757,70762,70772,70782,70786,70791,70799,70803,70808,70813,70818,70826,70835,70839,70844,70853,70857,70862,70871,70875,70880,70889,70898,70906,70910,70915,70924,70934,70943,70953,70959,70968,70978,70988,70992,70997,71006,71014,71024,71032,71041,71050,71060,71068,71072,71077,71086],{"__ignoreMap":169},[252,70602,70603],{"class":254,"line":255},[252,70604,70605],{"class":262},"* {\n",[252,70607,70608,70611,70613],{"class":254,"line":170},[252,70609,70610],{"class":51440},"  margin",[252,70612,51577],{"class":262},[252,70614,70615],{"class":367},"0;\n",[252,70617,70618,70621,70623],{"class":254,"line":1318},[252,70619,70620],{"class":367},"  padding",[252,70622,51577],{"class":262},[252,70624,70615],{"class":367},[252,70626,70627],{"class":254,"line":1333},[252,70628,1704],{"class":262},[252,70630,70631],{"class":254,"line":1339},[252,70632,2539],{"emptyLinePlaceholder":181},[252,70634,70635],{"class":254,"line":1353},[252,70636,70637],{"class":367},"a {\n",[252,70639,70640,70643,70645],{"class":254,"line":1359},[252,70641,70642],{"class":51440},"  text-decoration",[252,70644,51577],{"class":262},[252,70646,70647],{"class":367},"none;\n",[252,70649,70650],{"class":254,"line":1450},[252,70651,70652],{"class":367},"  color:#721c24;\n",[252,70654,70655],{"class":254,"line":1456},[252,70656,1704],{"class":262},[252,70658,70659],{"class":254,"line":1468},[252,70660,70661],{"class":367},"h1 {\n",[252,70663,70664,70667,70669],{"class":254,"line":1751},[252,70665,70666],{"class":51440},"  text-align",[252,70668,51577],{"class":262},[252,70670,70671],{"class":367},"center;\n",[252,70673,70674],{"class":254,"line":1756},[252,70675,70676],{"class":367},"  color:#333;\n",[252,70678,70679,70681,70683],{"class":254,"line":1762},[252,70680,70610],{"class":51440},[252,70682,51577],{"class":262},[252,70684,70685],{"class":367},"20px 0;\n",[252,70687,70688],{"class":254,"line":1767},[252,70689,2813],{"class":262},[252,70691,70692],{"class":254,"line":1781},[252,70693,1704],{"class":262},[252,70695,70696],{"class":254,"line":1786},[252,70697,70698],{"class":367},"table {\n",[252,70700,70701],{"class":254,"line":1792},[252,70702,70703],{"class":367},"  margin:0 auto;\n",[252,70705,70706,70709,70711],{"class":254,"line":1813},[252,70707,70708],{"class":51440},"  width",[252,70710,51577],{"class":262},[252,70712,70713],{"class":367},"800px;\n",[252,70715,70716,70719,70721],{"class":254,"line":1818},[252,70717,70718],{"class":51440},"  border-collapse",[252,70720,51577],{"class":262},[252,70722,70723],{"class":367},"collapse;\n",[252,70725,70726],{"class":254,"line":1832},[252,70727,70728],{"class":367},"  color:#004085;\n",[252,70730,70731],{"class":254,"line":1837},[252,70732,1704],{"class":262},[252,70734,70735],{"class":254,"line":1866},[252,70736,70737],{"class":367},"th {\n",[252,70739,70740,70742,70744],{"class":254,"line":1871},[252,70741,70620],{"class":51440},[252,70743,51577],{"class":262},[252,70745,70746],{"class":367},"10px;\n",[252,70748,70749,70752,70754],{"class":254,"line":1888},[252,70750,70751],{"class":51440},"  background",[252,70753,51577],{"class":262},[252,70755,70756],{"class":321},"#cfe5ff;\n",[252,70758,70759],{"class":254,"line":1893},[252,70760,70761],{"class":262},"  \n",[252,70763,70764,70767,70769],{"class":254,"line":1898},[252,70765,70766],{"class":51440},"  font-size",[252,70768,51577],{"class":262},[252,70770,70771],{"class":367},"20px;\n",[252,70773,70774,70777,70779],{"class":254,"line":1903},[252,70775,70776],{"class":51440},"  font-weight",[252,70778,51577],{"class":262},[252,70780,70781],{"class":367},"400;\n",[252,70783,70784],{"class":254,"line":1917},[252,70785,1704],{"class":262},[252,70787,70788],{"class":254,"line":1922},[252,70789,70790],{"class":367},"td,th {\n",[252,70792,70793,70796],{"class":254,"line":2716},[252,70794,70795],{"class":367},"  border:1px solid",[252,70797,70798],{"class":321}," #b8daff;\n",[252,70800,70801],{"class":254,"line":2730},[252,70802,1704],{"class":262},[252,70804,70805],{"class":254,"line":2738},[252,70806,70807],{"class":367},"td {\n",[252,70809,70810],{"class":254,"line":2743},[252,70811,70812],{"class":367},"  padding:10px;\n",[252,70814,70815],{"class":254,"line":2749},[252,70816,70817],{"class":367},"  color:#666;\n",[252,70819,70820,70822,70824],{"class":254,"line":2755},[252,70821,70666],{"class":51440},[252,70823,51577],{"class":262},[252,70825,70671],{"class":367},[252,70827,70828,70830,70832],{"class":254,"line":2760},[252,70829,70766],{"class":51440},[252,70831,51577],{"class":262},[252,70833,70834],{"class":367},"16px;\n",[252,70836,70837],{"class":254,"line":8088},[252,70838,1704],{"class":262},[252,70840,70841],{"class":254,"line":8112},[252,70842,70843],{"class":367},"tbody tr {\n",[252,70845,70846,70848,70850],{"class":254,"line":8117},[252,70847,70751],{"class":51440},[252,70849,51577],{"class":262},[252,70851,70852],{"class":321},"#fff;\n",[252,70854,70855],{"class":254,"line":8123},[252,70856,1704],{"class":262},[252,70858,70859],{"class":254,"line":8150},[252,70860,70861],{"class":367},"tbody tr:hover {\n",[252,70863,70864,70866,70868],{"class":254,"line":8155},[252,70865,70751],{"class":51440},[252,70867,51577],{"class":262},[252,70869,70870],{"class":321},"#e1ecf8;\n",[252,70872,70873],{"class":254,"line":8161},[252,70874,1704],{"class":262},[252,70876,70877],{"class":254,"line":8173},[252,70878,70879],{"class":367},".info {\n",[252,70881,70882,70884,70886],{"class":254,"line":8185},[252,70883,70708],{"class":51440},[252,70885,51577],{"class":262},[252,70887,70888],{"class":367},"900px;\n",[252,70890,70891,70893,70895],{"class":254,"line":8197},[252,70892,70610],{"class":51440},[252,70894,51577],{"class":262},[252,70896,70897],{"class":367},"50px auto;\n",[252,70899,70900,70902,70904],{"class":254,"line":9856},[252,70901,70666],{"class":51440},[252,70903,51577],{"class":262},[252,70905,70671],{"class":367},[252,70907,70908],{"class":254,"line":9881},[252,70909,1704],{"class":262},[252,70911,70912],{"class":254,"line":9904},[252,70913,70914],{"class":367},".info  input, .info select {\n",[252,70916,70917,70919,70921],{"class":254,"line":9928},[252,70918,70708],{"class":51440},[252,70920,51577],{"class":262},[252,70922,70923],{"class":367},"80px;\n",[252,70925,70926,70929,70931],{"class":254,"line":9933},[252,70927,70928],{"class":51440},"  height",[252,70930,51577],{"class":262},[252,70932,70933],{"class":367},"27px;\n",[252,70935,70936,70939,70941],{"class":254,"line":9938},[252,70937,70938],{"class":51440},"  outline",[252,70940,51577],{"class":262},[252,70942,70647],{"class":367},[252,70944,70945,70948,70950],{"class":254,"line":9943},[252,70946,70947],{"class":51440},"  border-radius",[252,70949,51577],{"class":262},[252,70951,70952],{"class":367},"5px;\n",[252,70954,70955,70957],{"class":254,"line":9952},[252,70956,70795],{"class":367},[252,70958,70798],{"class":321},[252,70960,70961,70964,70966],{"class":254,"line":9957},[252,70962,70963],{"class":51440},"  padding-left",[252,70965,51577],{"class":262},[252,70967,70952],{"class":367},[252,70969,70970,70973,70975],{"class":254,"line":9963},[252,70971,70972],{"class":51440},"  box-sizing",[252,70974,51577],{"class":262},[252,70976,70977],{"class":367},"border-box;\n",[252,70979,70980,70983,70985],{"class":254,"line":9984},[252,70981,70982],{"class":51440},"  margin-right",[252,70984,51577],{"class":262},[252,70986,70987],{"class":367},"15px;\n",[252,70989,70990],{"class":254,"line":9990},[252,70991,1704],{"class":262},[252,70993,70994],{"class":254,"line":10004},[252,70995,70996],{"class":367},".info button {\n",[252,70998,70999,71001,71003],{"class":254,"line":10010},[252,71000,70708],{"class":51440},[252,71002,51577],{"class":262},[252,71004,71005],{"class":367},"60px;\n",[252,71007,71008,71010,71012],{"class":254,"line":10037},[252,71009,70928],{"class":51440},[252,71011,51577],{"class":262},[252,71013,70933],{"class":367},[252,71015,71016,71019,71021],{"class":254,"line":10046},[252,71017,71018],{"class":51440},"  background-color",[252,71020,51577],{"class":262},[252,71022,71023],{"class":321},"#004085;\n",[252,71025,71026,71028,71030],{"class":254,"line":10052},[252,71027,70938],{"class":51440},[252,71029,51577],{"class":262},[252,71031,70647],{"class":367},[252,71033,71034,71037,71039],{"class":254,"line":10060},[252,71035,71036],{"class":51440},"  border",[252,71038,51577],{"class":262},[252,71040,70615],{"class":367},[252,71042,71043,71046,71048],{"class":254,"line":10065},[252,71044,71045],{"class":51440},"  color",[252,71047,51577],{"class":262},[252,71049,70852],{"class":321},[252,71051,71052,71055,71057],{"class":254,"line":16744},[252,71053,71054],{"class":51440},"  cursor",[252,71056,51577],{"class":262},[252,71058,71059],{"class":367},"pointer;\n",[252,71061,71062,71064,71066],{"class":254,"line":16750},[252,71063,70947],{"class":51440},[252,71065,51577],{"class":262},[252,71067,70952],{"class":367},[252,71069,71070],{"class":254,"line":16773},[252,71071,1704],{"class":262},[252,71073,71074],{"class":254,"line":16779},[252,71075,71076],{"class":367},".info .age {\n",[252,71078,71079,71081,71083],{"class":254,"line":16802},[252,71080,70708],{"class":51440},[252,71082,51577],{"class":262},[252,71084,71085],{"class":367},"50px;\n",[252,71087,71088],{"class":254,"line":16816},[252,71089,1704],{"class":262},[19,71091,71092],{},"思路：",[19,71094,71095],{},[1601,71096],{"alt":169,"src":71097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71099,71100],{},[1601,71101],{"alt":169,"src":71102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71104,71105],{},[1601,71106],{"alt":169,"src":71107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[224,71109,71111],{"id":71110},"_3315-重绘回流","3.3.15 重绘回流",[19,71113,71114],{},[1601,71115],{"alt":169,"src":71116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71118,71119],{},[1601,71120],{"alt":169,"src":71121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71123,71124],{},[1601,71125],{"alt":169,"src":71126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71128,71130],{"id":71129},"_34-bom","3.4 BOM",[19,71132,71133],{},[1601,71134],{"alt":169,"src":71135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71137,71138],{},"平时写的document省略了window而已，实际上是window.document",[19,71140,71141],{},"函数也是这样，调用的时候实际为window.fn()",[19,71143,71144],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71146,71147],{},"window大部分情况下可以省略",[224,71149,71151],{"id":71150},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71153,71154],{},"只执行一次",[19,71156,71157],{},[1601,71158],{"alt":169,"src":71159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71161,71162],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71164,71165],{},[1601,71166],{"alt":169,"src":71167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[224,71169,71171],{"id":71170},"_342-js执行机制","3.4.2 JS执行机制",[19,71173,71174],{},[1601,71175],{"alt":169,"src":71176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71178,71179],{},"两个的结果都是1111 3333 2222",[19,71181,71182],{},[1601,71183],{"alt":169,"src":71184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71186,71187],{},[1601,71188],{"alt":169,"src":71189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71191,71192],{},[1601,71193],{"alt":169,"src":71194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71196,71197],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71199,71200],{},"工作流程：",[19,71202,71203],{},[1601,71204],{"alt":169,"src":71205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71207,71208],{},[1601,71209],{"alt":169,"src":71210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71212,71213],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71215,71216],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[224,71218,71220],{"id":71219},"_343-location对象","3.4.3 location对象",[19,71222,71223],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71225,71226],{},[1601,71227],{"alt":169,"src":71228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71230,71231],{},"href可以跳转页面",[207,71233,71234],{},[210,71235,71236],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71238,71239],{},"search得到提交信息之后网站后边的地址",[19,71241,71242],{},[1601,71243],{"alt":169,"src":71244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71246,71247],{},[1601,71248],{"alt":169,"src":71249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[207,71251,71252],{"start":170},[210,71253,71254],{},"hash:这个获取单页面应用#后边的地址",[19,71256,71257],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71259,71260],{},[1601,71261],{"alt":169,"src":71262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[244,71264,71266],{"className":53207,"code":71265,"language":53209,"meta":169,"style":169},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[22,71267,71268,71288,71308],{"__ignoreMap":169},[252,71269,71270,71272,71274,71276,71278,71281,71284,71286],{"class":254,"line":255},[252,71271,52284],{"class":262},[252,71273,501],{"class":51440},[252,71275,61197],{"class":2102},[252,71277,308],{"class":262},[252,71279,71280],{"class":367},"\"#\u002Fmy\"",[252,71282,71283],{"class":262},">我的\u003C\u002F",[252,71285,501],{"class":51440},[252,71287,51447],{"class":262},[252,71289,71290,71292,71294,71296,71298,71301,71304,71306],{"class":254,"line":170},[252,71291,52284],{"class":262},[252,71293,501],{"class":51440},[252,71295,61197],{"class":2102},[252,71297,308],{"class":262},[252,71299,71300],{"class":367},"\"#\u002Ffriend\"",[252,71302,71303],{"class":262},">关注\u003C\u002F",[252,71305,501],{"class":51440},[252,71307,51447],{"class":262},[252,71309,71310,71312,71314,71316,71318,71321,71324,71326],{"class":254,"line":1318},[252,71311,52284],{"class":262},[252,71313,501],{"class":51440},[252,71315,61197],{"class":2102},[252,71317,308],{"class":262},[252,71319,71320],{"class":367},"\"#\u002Fdownload\"",[252,71322,71323],{"class":262},">下载\u003C\u002F",[252,71325,501],{"class":51440},[252,71327,51447],{"class":262},[19,71329,71330],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[207,71332,71333],{"start":1318},[210,71334,71335,71336,71338,71339,71341],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53856,71337],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53856,71340],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[224,71343,71345],{"id":71344},"_345-navigator对象","3.4.5 navigator对象",[19,71347,71348],{},[1601,71349],{"alt":169,"src":71350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[244,71352,71356],{"className":71353,"code":71354,"language":71355,"meta":169,"style":169},"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",[22,71357,71358,71363,71374,71386,71391,71442,71483,71488,71501,71513,71518],{"__ignoreMap":169},[252,71359,71360],{"class":254,"line":255},[252,71361,71362],{"class":321},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[252,71364,71365,71367,71369,71371],{"class":254,"line":170},[252,71366,489],{"class":258},[252,71368,263],{"class":262},[252,71370,54589],{"class":258},[252,71372,71373],{"class":262}," () { \n",[252,71375,71376,71378,71381,71383],{"class":254,"line":1318},[252,71377,6932],{"class":258},[252,71379,71380],{"class":311}," userAgent",[252,71382,13704],{"class":258},[252,71384,71385],{"class":262}," navigator.userAgent \n",[252,71387,71388],{"class":254,"line":1333},[252,71389,71390],{"class":321},"\u002F\u002F 验证是否为Android或iPhone \n",[252,71392,71393,71395,71398,71400,71403,71406,71408,71410,71413,71415,71418,71422,71424,71426,71428,71431,71433,71435,71437,71439],{"class":254,"line":1339},[252,71394,6932],{"class":258},[252,71396,71397],{"class":311}," android",[252,71399,13704],{"class":258},[252,71401,71402],{"class":262}," userAgent.",[252,71404,71405],{"class":2102},"match",[252,71407,263],{"class":262},[252,71409,847],{"class":367},[252,71411,71412],{"class":48117},"(Android);",[252,71414,1249],{"class":258},[252,71416,71417],{"class":311},"[\\s",[252,71419,71421],{"class":71420},"snhLl","\\\u002F",[252,71423,1203],{"class":311},[252,71425,744],{"class":258},[252,71427,263],{"class":48117},[252,71429,71430],{"class":311},"[\\d.]",[252,71432,744],{"class":258},[252,71434,692],{"class":48117},[252,71436,1249],{"class":258},[252,71438,847],{"class":367},[252,71440,71441],{"class":262},") \n",[252,71443,71444,71446,71449,71451,71453,71455,71457,71459,71462,71465,71468,71470,71472,71475,71477,71479,71481],{"class":254,"line":1353},[252,71445,6932],{"class":258},[252,71447,71448],{"class":311}," iphone",[252,71450,13704],{"class":258},[252,71452,71402],{"class":262},[252,71454,71405],{"class":2102},[252,71456,263],{"class":262},[252,71458,847],{"class":367},[252,71460,71461],{"class":48117},"(iPhone",[252,71463,71464],{"class":311},"\\s",[252,71466,71467],{"class":48117},"OS)",[252,71469,71464],{"class":311},[252,71471,263],{"class":48117},[252,71473,71474],{"class":311},"[\\d_]",[252,71476,744],{"class":258},[252,71478,692],{"class":48117},[252,71480,847],{"class":367},[252,71482,71441],{"class":262},[252,71484,71485],{"class":254,"line":1359},[252,71486,71487],{"class":321},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[252,71489,71490,71492,71495,71498],{"class":254,"line":1450},[252,71491,1670],{"class":258},[252,71493,71494],{"class":262}," (android ",[252,71496,71497],{"class":258},"||",[252,71499,71500],{"class":262}," iphone) { \n",[252,71502,71503,71506,71508,71511],{"class":254,"line":1456},[252,71504,71505],{"class":262},"location.href ",[252,71507,308],{"class":258},[252,71509,71510],{"class":367}," 'http:\u002F\u002Fm.itcast.cn'",[252,71512,2813],{"class":262},[252,71514,71515],{"class":254,"line":1468},[252,71516,71517],{"class":262},"} \n",[252,71519,71520],{"class":254,"line":1751},[252,71521,71522],{"class":262},"})()\n",[224,71524,71526],{"id":71525},"_346-histroy对象","3.4.6 histroy对象",[19,71528,71529],{},[1601,71530],{"alt":169,"src":71531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71533,71534],{},"浏览器地址的前进与后退!!!",[19,71536,71537],{},"history.back() 等效于 history.go(-1)",[19,71539,71540],{},"history.forward() 等效于 history.go(1)",[14,71542,71544],{"id":71543},"_35-本地存储","3.5 本地存储",[207,71546,71547,71550,71553],{},[210,71548,71549],{},"数据存储在用户浏览器中",[210,71551,71552],{},"设置、读取方便、甚至页面刷新不丢失数据",[210,71554,71555],{},"容量较大，sessionStorage和localStorage约 5M 左右",[224,71557,71559],{"id":71558},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71561,71562],{},"只能存储字符串",[19,71564,71565],{},[1601,71566],{"alt":169,"src":71567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71569,71570],{},[1601,71571],{"alt":169,"src":71572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71574,71575],{},"键值对要加引号,不然就会当变量来看了",[19,71577,71578],{},"localStorage.setItem('uname', 'pink')",[19,71580,71581],{},"刷新之后信息不再丢失",[19,71583,71584],{},"操作key,value会跟着变",[19,71586,71587],{},"删除只删除键就可以,即名字",[19,71589,71578],{},[19,71591,71592],{},"改:",[19,71594,71595],{},"localStorage.setItem('uname','red')",[19,71597,71598],{},"有这个键就是改,没有这个键就是改",[19,71600,71601],{},[1601,71602],{"alt":169,"src":71603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71605,71606],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71608,71609],{},[1601,71610],{"alt":169,"src":71611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71613,71614],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[224,71616,71618],{"id":71617},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71620,71621],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71623,71624],{},"特性:",[207,71626,71627,71630,71633,71636],{},[210,71628,71629],{},"生命周期为关闭浏览器窗口",[210,71631,71632],{},"在同一个窗口(页面)下数据可以共享",[210,71634,71635],{},"以键值对的形式存储使用",[210,71637,71638],{},"用法跟localStorage 基本相同",[224,71640,71642],{"id":71641},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71644,71645],{},"本地只能存储字符串,无法直接存储复杂数据类型",[244,71647,71649],{"className":53207,"code":71648,"language":53209,"meta":169,"style":169},"\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",[22,71650,71651,71659,71664,71669,71674,71679,71683,71688,71693],{"__ignoreMap":169},[252,71652,71653,71655,71657],{"class":254,"line":255},[252,71654,1173],{"class":262},[252,71656,51953],{"class":51440},[252,71658,51447],{"class":262},[252,71660,71661],{"class":254,"line":170},[252,71662,71663],{"class":262},"    const obj = {\n",[252,71665,71666],{"class":254,"line":1318},[252,71667,71668],{"class":262},"      uname: 'pink老师',\n",[252,71670,71671],{"class":254,"line":1333},[252,71672,71673],{"class":262},"      age: 18,\n",[252,71675,71676],{"class":254,"line":1339},[252,71677,71678],{"class":262},"      gender: '女'\n",[252,71680,71681],{"class":254,"line":1353},[252,71682,2326],{"class":262},[252,71684,71685],{"class":254,"line":1359},[252,71686,71687],{"class":262},"    \u002F\u002F 存储复杂数据类型\n",[252,71689,71690],{"class":254,"line":1450},[252,71691,71692],{"class":262},"    localStorage.setItem('obj', obj)\n",[252,71694,71695,71697,71699],{"class":254,"line":1456},[252,71696,52557],{"class":262},[252,71698,51953],{"class":51440},[252,71700,51447],{"class":262},[19,71702,71703],{},[1601,71704],{"alt":169,"src":71705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71707,71708],{},"如果获取一下数据:",[19,71710,71711],{},"log(localStorage.getItem('obj'))",[19,71713,71714],{},[1601,71715],{"alt":169,"src":71716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71718,71719],{},"发现直接存对象是使用不了的!!!",[22137,71721,71723],{"id":71722},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71725,71726],{},[1601,71727],{"alt":169,"src":71728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[244,71730,71732],{"className":50773,"code":71731,"language":50775,"meta":169,"style":169},"\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",[22,71733,71734,71742,71752,71762,71771,71779,71783,71787,71813,71832,71840,71844,71849,71854],{"__ignoreMap":169},[252,71735,71736,71738,71740],{"class":254,"line":255},[252,71737,1173],{"class":262},[252,71739,51953],{"class":51440},[252,71741,51447],{"class":262},[252,71743,71744,71746,71748,71750],{"class":254,"line":170},[252,71745,11361],{"class":258},[252,71747,70111],{"class":311},[252,71749,13704],{"class":258},[252,71751,15712],{"class":262},[252,71753,71754,71757,71760],{"class":254,"line":1318},[252,71755,71756],{"class":262},"      uname: ",[252,71758,71759],{"class":367},"'pink老师'",[252,71761,31606],{"class":262},[252,71763,71764,71767,71769],{"class":254,"line":1333},[252,71765,71766],{"class":262},"      age: ",[252,71768,913],{"class":311},[252,71770,31606],{"class":262},[252,71772,71773,71776],{"class":254,"line":1339},[252,71774,71775],{"class":262},"      gender: ",[252,71777,71778],{"class":367},"'女'\n",[252,71780,71781],{"class":254,"line":1353},[252,71782,2326],{"class":262},[252,71784,71785],{"class":254,"line":1359},[252,71786,71687],{"class":321},[252,71788,71789,71792,71795,71797,71800,71802,71805,71807,71810],{"class":254,"line":1450},[252,71790,71791],{"class":262},"  localStorage.",[252,71793,71794],{"class":2102},"setItem",[252,71796,263],{"class":262},[252,71798,71799],{"class":367},"'obj'",[252,71801,12575],{"class":262},[252,71803,71804],{"class":311},"JSON",[252,71806,821],{"class":262},[252,71808,71809],{"class":2102},"stringify",[252,71811,71812],{"class":262},"(obj))\n",[252,71814,71815,71818,71820,71823,71826,71828,71830],{"class":254,"line":1456},[252,71816,71817],{"class":262},"  console.",[252,71819,58387],{"class":2102},[252,71821,71822],{"class":262},"(localStorage.",[252,71824,71825],{"class":2102},"getItem",[252,71827,263],{"class":262},[252,71829,71799],{"class":367},[252,71831,30637],{"class":262},[252,71833,71834,71836,71838],{"class":254,"line":1468},[252,71835,52557],{"class":262},[252,71837,51953],{"class":51440},[252,71839,51447],{"class":262},[252,71841,71842],{"class":254,"line":1751},[252,71843,70761],{"class":262},[252,71845,71846],{"class":254,"line":1756},[252,71847,71848],{"class":262},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[252,71850,71851],{"class":254,"line":1762},[252,71852,71853],{"class":262},"  类型是字符串的\n",[252,71855,71856],{"class":254,"line":1767},[252,71857,71858],{"class":262},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22137,71860,71862],{"id":71861},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,71864,71865],{},[1601,71866],{"alt":169,"src":71867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,71869,71870],{},[1601,71871],{"alt":169,"src":71872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[244,71874,71876],{"className":53207,"code":71875,"language":53209,"meta":169,"style":169},"  \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",[22,71877,71878,71886,71890,71894,71898,71902,71906,71911,71916,71921,71926,71931,71936,71941,71946],{"__ignoreMap":169},[252,71879,71880,71882,71884],{"class":254,"line":255},[252,71881,52284],{"class":262},[252,71883,51953],{"class":51440},[252,71885,51447],{"class":262},[252,71887,71888],{"class":254,"line":170},[252,71889,71663],{"class":262},[252,71891,71892],{"class":254,"line":1318},[252,71893,71668],{"class":262},[252,71895,71896],{"class":254,"line":1333},[252,71897,71673],{"class":262},[252,71899,71900],{"class":254,"line":1339},[252,71901,71678],{"class":262},[252,71903,71904],{"class":254,"line":1353},[252,71905,2326],{"class":262},[252,71907,71908],{"class":254,"line":1359},[252,71909,71910],{"class":262},"    \u002F\u002F 1.存储复杂数据类型\n",[252,71912,71913],{"class":254,"line":1450},[252,71914,71915],{"class":262},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[252,71917,71918],{"class":254,"line":1456},[252,71919,71920],{"class":262},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[252,71922,71923],{"class":254,"line":1468},[252,71924,71925],{"class":262},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[252,71927,71928],{"class":254,"line":1751},[252,71929,71930],{"class":262},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[252,71932,71933],{"class":254,"line":1756},[252,71934,71935],{"class":262},"    \u002F\u002F 取\n",[252,71937,71938],{"class":254,"line":1762},[252,71939,71940],{"class":262},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[252,71942,71943],{"class":254,"line":1767},[252,71944,71945],{"class":262},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[252,71947,71948,71950,71952],{"class":254,"line":1781},[252,71949,52557],{"class":262},[252,71951,51953],{"class":51440},[252,71953,51447],{"class":262},[19,71955,71956],{},[1601,71957],{"alt":169,"src":71958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[224,71960,71962],{"id":71961},"_356-数组map方法","3.5.6 数组map方法",[19,71964,71965],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,71967,71968],{},[1601,71969],{"alt":169,"src":71970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,71972,71973],{},[1601,71974],{"alt":169,"src":71975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,71977,71978,71981],{},[412,71979,71980],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,71983,71984],{},"map有返回值，但是forEach没有返回值",[19,71986,71987],{},"map是个方法。用的时候要加 ()",[19,71989,71990],{},"map返回的是一个数组",[224,71992,71994],{"id":71993},"_357-数组中join方法","3.5.7 数组中join方法",[19,71996,71997],{},[1601,71998],{"alt":169,"src":71999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72001,72002],{},"类似于python中拼接字符串一样！",[207,72004,72005,72008,72011],{},[210,72006,72007],{},"小括号为空则逗号分开",[210,72009,72010],{},"小括号为空字符串 ''，则元素之间没有分隔符",[210,72012,72013],{},"小括号用啥符号就用进行分割",[224,72015,72017],{"id":72016},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[207,72019,72020,72023,72026,72029,72032],{},[210,72021,72022],{},"记住本地时间获取快速方式：new Date().toDateString()",[210,72024,72025],{},"尽量减少DOM操作，用好map+join的渲染方式",[210,72027,72028],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[210,72030,72031],{},"return可以实现函数的结束",[210,72033,72034],{},"禁止跳转是 preventDefault() 不要忘记",[244,72036,72038],{"className":50773,"code":72037,"language":50775,"meta":169,"style":169},"\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",[22,72039,72040,72050,72064,72068,72076,72090,72110,72122,72130,72136,72146,72156,72160,72164,72170,72180,72192,72196,72200,72207,72219,72233,72243,72247,72251,72258,72265,72272,72284,72296,72306,72318,72322,72326,72333,72340,72352,72364,72374,72386,72416,72420,72424,72431,72443,72455,72479,72489,72499,72503,72507,72515,72526,72538,72550,72562,72579,72591,72603,72607,72611,72618,72630,72642,72654,72665,72683,72696,72708,72732,72743,72747,72751,72759,72769,72773,72777,72783,72795,72806,72816,72820,72824,72830,72852,72856,72860,72866,72872,72884,72894,72906,72936,72949,72966,72970,72974,72985,73007,73017,73021,73025,73038,73048,73060,73072,73084,73096,73106,73116,73126,73137,73150,73154,73162,73170,73174,73182,73195,73215,73248,73281,73314,73340,73358,73376,73384,73410,73428,73446,73464,73482,73500,73508,73516,73534,73542,73571,73579,73587,73595,73608,73620,73632,73644,73656,73668,73681,73693,73701,73709,73717,73722,73727,73731,73735,73739,73743,73747,73751,73756,73761,73766,73771,73779,73787,73795,73800,73805,73810,73815,73820,73825,73830,73835,73840,73845,73850,73855,73860,73865,73869,73874,73879,73889,73898,73902,73907,73916,73932,73974,74014,74053,74118,74126,74130,74135,74153,74161,74166,74171,74201,74207,74212,74225,74237,74249,74261,74273,74285,74297,74301,74311,74315,74320,74325,74329,74338,74342,74347,74352,74371,74376,74396,74400,74405,74409,74414,74432,74450,74468,74487,74506,74525,74530,74536,74557,74563,74572,74578,74584,74590,74617,74630,74635,74645,74651,74657,74663,74669,74674,74680,74686,74692,74698,74731,74736,74741,74746,74751,74757,74763,74769,74780,74785,74791,74798,74812,74818,74842,74847,74852,74858,74864,74885,74891,74904,74910,74916,74922,74928,74933,74939,74945,74951,74969,74983,74989,74997,75003,75025,75030,75035,75040,75045,75050,75059,75068,75073],{"__ignoreMap":169},[252,72041,72042,72044,72046,72048],{"class":254,"line":255},[252,72043,51437],{"class":262},[252,72045,51441],{"class":51440},[252,72047,51444],{"class":2102},[252,72049,51447],{"class":262},[252,72051,72052,72054,72056,72058,72060,72062],{"class":254,"line":170},[252,72053,1173],{"class":262},[252,72055,50775],{"class":51440},[252,72057,51456],{"class":2102},[252,72059,308],{"class":262},[252,72061,51461],{"class":367},[252,72063,51447],{"class":262},[252,72065,72066],{"class":254,"line":1318},[252,72067,2539],{"emptyLinePlaceholder":181},[252,72069,72070,72072,72074],{"class":254,"line":1333},[252,72071,1173],{"class":262},[252,72073,51474],{"class":51440},[252,72075,51447],{"class":262},[252,72077,72078,72080,72082,72084,72086,72088],{"class":254,"line":1339},[252,72079,52284],{"class":262},[252,72081,51484],{"class":51440},[252,72083,51487],{"class":2102},[252,72085,308],{"class":262},[252,72087,51492],{"class":367},[252,72089,51447],{"class":262},[252,72091,72092,72094,72096,72098,72100,72102,72104,72106,72108],{"class":254,"line":1353},[252,72093,52284],{"class":262},[252,72095,51484],{"class":51440},[252,72097,15060],{"class":2102},[252,72099,308],{"class":262},[252,72101,51531],{"class":367},[252,72103,51511],{"class":2102},[252,72105,308],{"class":262},[252,72107,51538],{"class":367},[252,72109,51447],{"class":262},[252,72111,72112,72114,72116,72118,72120],{"class":254,"line":1359},[252,72113,52284],{"class":262},[252,72115,51547],{"class":51440},[252,72117,51550],{"class":262},[252,72119,51547],{"class":51440},[252,72121,51447],{"class":262},[252,72123,72124,72126,72128],{"class":254,"line":1450},[252,72125,52284],{"class":262},[252,72127,5266],{"class":51440},[252,72129,51447],{"class":262},[252,72131,72132,72134],{"class":254,"line":1456},[252,72133,6543],{"class":51440},[252,72135,15712],{"class":262},[252,72137,72138,72140,72142,72144],{"class":254,"line":1468},[252,72139,54835],{"class":311},[252,72141,51577],{"class":262},[252,72143,454],{"class":311},[252,72145,1429],{"class":262},[252,72147,72148,72150,72152,72154],{"class":254,"line":1751},[252,72149,54846],{"class":311},[252,72151,51577],{"class":262},[252,72153,454],{"class":311},[252,72155,1429],{"class":262},[252,72157,72158],{"class":254,"line":1756},[252,72159,2326],{"class":262},[252,72161,72162],{"class":254,"line":1762},[252,72163,2539],{"emptyLinePlaceholder":181},[252,72165,72166,72168],{"class":254,"line":1767},[252,72167,57419],{"class":51440},[252,72169,15712],{"class":262},[252,72171,72172,72174,72176,72178],{"class":254,"line":1781},[252,72173,57426],{"class":311},[252,72175,51577],{"class":262},[252,72177,51732],{"class":311},[252,72179,1429],{"class":262},[252,72181,72182,72184,72186,72188,72190],{"class":254,"line":1786},[252,72183,62217],{"class":311},[252,72185,51577],{"class":262},[252,72187,963],{"class":311},[252,72189,51632],{"class":258},[252,72191,1429],{"class":262},[252,72193,72194],{"class":254,"line":1792},[252,72195,2326],{"class":262},[252,72197,72198],{"class":254,"line":1813},[252,72199,2539],{"emptyLinePlaceholder":181},[252,72201,72202,72205],{"class":254,"line":1818},[252,72203,72204],{"class":2102},"    .info",[252,72206,15712],{"class":262},[252,72208,72209,72211,72213,72215,72217],{"class":254,"line":1832},[252,72210,54911],{"class":311},[252,72212,51577],{"class":262},[252,72214,51629],{"class":311},[252,72216,51632],{"class":258},[252,72218,1429],{"class":262},[252,72220,72221,72223,72225,72227,72229,72231],{"class":254,"line":1837},[252,72222,54846],{"class":311},[252,72224,51577],{"class":262},[252,72226,709],{"class":311},[252,72228,51632],{"class":258},[252,72230,51696],{"class":311},[252,72232,1429],{"class":262},[252,72234,72235,72237,72239,72241],{"class":254,"line":1866},[252,72236,57426],{"class":311},[252,72238,51577],{"class":262},[252,72240,51732],{"class":311},[252,72242,1429],{"class":262},[252,72244,72245],{"class":254,"line":1871},[252,72246,2326],{"class":262},[252,72248,72249],{"class":254,"line":1888},[252,72250,2539],{"emptyLinePlaceholder":181},[252,72252,72253,72256],{"class":254,"line":1893},[252,72254,72255],{"class":2102},"    .uname",[252,72257,31606],{"class":262},[252,72259,72260,72263],{"class":254,"line":1898},[252,72261,72262],{"class":2102},"    .age",[252,72264,31606],{"class":262},[252,72266,72267,72270],{"class":254,"line":1903},[252,72268,72269],{"class":2102},"    .salary",[252,72271,15712],{"class":262},[252,72273,72274,72276,72278,72280,72282],{"class":254,"line":1917},[252,72275,54911],{"class":311},[252,72277,51577],{"class":262},[252,72279,574],{"class":311},[252,72281,51632],{"class":258},[252,72283,1429],{"class":262},[252,72285,72286,72288,72290,72292,72294],{"class":254,"line":1922},[252,72287,54925],{"class":311},[252,72289,51577],{"class":262},[252,72291,963],{"class":311},[252,72293,51632],{"class":258},[252,72295,1429],{"class":262},[252,72297,72298,72300,72302,72304],{"class":254,"line":2716},[252,72299,61920],{"class":311},[252,72301,51577],{"class":262},[252,72303,54877],{"class":311},[252,72305,1429],{"class":262},[252,72307,72308,72310,72312,72314,72316],{"class":254,"line":2730},[252,72309,61890],{"class":311},[252,72311,51577],{"class":262},[252,72313,838],{"class":311},[252,72315,51632],{"class":258},[252,72317,1429],{"class":262},[252,72319,72320],{"class":254,"line":2738},[252,72321,2326],{"class":262},[252,72323,72324],{"class":254,"line":2743},[252,72325,2539],{"emptyLinePlaceholder":181},[252,72327,72328,72331],{"class":254,"line":2749},[252,72329,72330],{"class":2102},"    .gender",[252,72332,31606],{"class":262},[252,72334,72335,72338],{"class":254,"line":2755},[252,72336,72337],{"class":2102},"    .city",[252,72339,15712],{"class":262},[252,72341,72342,72344,72346,72348,72350],{"class":254,"line":2760},[252,72343,54911],{"class":311},[252,72345,51577],{"class":262},[252,72347,574],{"class":311},[252,72349,51632],{"class":258},[252,72351,1429],{"class":262},[252,72353,72354,72356,72358,72360,72362],{"class":254,"line":8088},[252,72355,54925],{"class":311},[252,72357,51577],{"class":262},[252,72359,1088],{"class":311},[252,72361,51632],{"class":258},[252,72363,1429],{"class":262},[252,72365,72366,72368,72370,72372],{"class":254,"line":8112},[252,72367,61920],{"class":311},[252,72369,51577],{"class":262},[252,72371,54877],{"class":311},[252,72373,1429],{"class":262},[252,72375,72376,72378,72380,72382,72384],{"class":254,"line":8117},[252,72377,61890],{"class":311},[252,72379,51577],{"class":262},[252,72381,838],{"class":311},[252,72383,51632],{"class":258},[252,72385,1429],{"class":262},[252,72387,72388,72390,72392,72394,72396,72398,72401,72403,72405,72407,72410,72412,72414],{"class":254,"line":8123},[252,72389,62117],{"class":311},[252,72391,51577],{"class":262},[252,72393,480],{"class":311},[252,72395,51632],{"class":258},[252,72397,51661],{"class":311},[252,72399,72400],{"class":311}," rgb",[252,72402,263],{"class":262},[252,72404,1861],{"class":311},[252,72406,12575],{"class":262},[252,72408,72409],{"class":311},"197",[252,72411,12575],{"class":262},[252,72413,72409],{"class":311},[252,72415,2858],{"class":262},[252,72417,72418],{"class":254,"line":8150},[252,72419,2326],{"class":262},[252,72421,72422],{"class":254,"line":8155},[252,72423,2539],{"emptyLinePlaceholder":181},[252,72425,72426,72429],{"class":254,"line":8161},[252,72427,72428],{"class":51440},"    button",[252,72430,15712],{"class":262},[252,72432,72433,72435,72437,72439,72441],{"class":254,"line":8173},[252,72434,54925],{"class":311},[252,72436,51577],{"class":262},[252,72438,1088],{"class":311},[252,72440,51632],{"class":258},[252,72442,1429],{"class":262},[252,72444,72445,72447,72449,72451,72453],{"class":254,"line":8185},[252,72446,54911],{"class":311},[252,72448,51577],{"class":262},[252,72450,747],{"class":311},[252,72452,51632],{"class":258},[252,72454,1429],{"class":262},[252,72456,72457,72459,72461,72464,72466,72468,72470,72473,72475,72477],{"class":254,"line":8197},[252,72458,55024],{"class":311},[252,72460,51577],{"class":262},[252,72462,72463],{"class":311},"rgb",[252,72465,263],{"class":262},[252,72467,1232],{"class":311},[252,72469,12575],{"class":262},[252,72471,72472],{"class":311},"187",[252,72474,12575],{"class":262},[252,72476,562],{"class":311},[252,72478,2858],{"class":262},[252,72480,72481,72483,72485,72487],{"class":254,"line":9856},[252,72482,57556],{"class":311},[252,72484,51577],{"class":262},[252,72486,60982],{"class":311},[252,72488,1429],{"class":262},[252,72490,72491,72493,72495,72497],{"class":254,"line":9881},[252,72492,62117],{"class":311},[252,72494,51577],{"class":262},[252,72496,454],{"class":311},[252,72498,1429],{"class":262},[252,72500,72501],{"class":254,"line":9904},[252,72502,2326],{"class":262},[252,72504,72505],{"class":254,"line":9928},[252,72506,2539],{"emptyLinePlaceholder":181},[252,72508,72509,72511,72513],{"class":254,"line":9933},[252,72510,72428],{"class":51440},[252,72512,51828],{"class":51440},[252,72514,15712],{"class":262},[252,72516,72517,72519,72521,72524],{"class":254,"line":9938},[252,72518,55149],{"class":311},[252,72520,51577],{"class":262},[252,72522,72523],{"class":311},"inline-block",[252,72525,1429],{"class":262},[252,72527,72528,72530,72532,72534,72536],{"class":254,"line":9943},[252,72529,54911],{"class":311},[252,72531,51577],{"class":262},[252,72533,709],{"class":311},[252,72535,51632],{"class":258},[252,72537,1429],{"class":262},[252,72539,72540,72542,72544,72546,72548],{"class":254,"line":9952},[252,72541,54925],{"class":311},[252,72543,51577],{"class":262},[252,72545,709],{"class":311},[252,72547,51632],{"class":258},[252,72549,1429],{"class":262},[252,72551,72552,72554,72556,72558,72560],{"class":254,"line":9957},[252,72553,57499],{"class":311},[252,72555,51577],{"class":262},[252,72557,735],{"class":311},[252,72559,51632],{"class":258},[252,72561,1429],{"class":262},[252,72563,72564,72566,72568,72570,72572,72574,72577],{"class":254,"line":9963},[252,72565,62117],{"class":311},[252,72567,51577],{"class":262},[252,72569,480],{"class":311},[252,72571,51632],{"class":258},[252,72573,51661],{"class":311},[252,72575,72576],{"class":311}," #fff",[252,72578,1429],{"class":262},[252,72580,72581,72583,72585,72587,72589],{"class":254,"line":9984},[252,72582,55274],{"class":311},[252,72584,51577],{"class":262},[252,72586,582],{"class":311},[252,72588,51632],{"class":258},[252,72590,1429],{"class":262},[252,72592,72593,72595,72597,72599,72601],{"class":254,"line":9990},[252,72594,61890],{"class":311},[252,72596,51577],{"class":262},[252,72598,480],{"class":311},[252,72600,51632],{"class":258},[252,72602,1429],{"class":262},[252,72604,72605],{"class":254,"line":10004},[252,72606,2326],{"class":262},[252,72608,72609],{"class":254,"line":10010},[252,72610,2539],{"emptyLinePlaceholder":181},[252,72612,72613,72616],{"class":254,"line":10037},[252,72614,72615],{"class":2102},"    .total",[252,72617,15712],{"class":262},[252,72619,72620,72622,72624,72626,72628],{"class":254,"line":10046},[252,72621,54911],{"class":311},[252,72623,51577],{"class":262},[252,72625,61769],{"class":311},[252,72627,51632],{"class":258},[252,72629,1429],{"class":262},[252,72631,72632,72634,72636,72638,72640],{"class":254,"line":10052},[252,72633,54925],{"class":311},[252,72635,51577],{"class":262},[252,72637,664],{"class":311},[252,72639,51632],{"class":258},[252,72641,1429],{"class":262},[252,72643,72644,72646,72648,72650,72652],{"class":254,"line":10060},[252,72645,57499],{"class":311},[252,72647,51577],{"class":262},[252,72649,664],{"class":311},[252,72651,51632],{"class":258},[252,72653,1429],{"class":262},[252,72655,72656,72658,72660,72663],{"class":254,"line":10065},[252,72657,57426],{"class":311},[252,72659,51577],{"class":262},[252,72661,72662],{"class":311},"right",[252,72664,1429],{"class":262},[252,72666,72667,72669,72671,72673,72675,72677,72679,72681],{"class":254,"line":16744},[252,72668,54846],{"class":311},[252,72670,51577],{"class":262},[252,72672,664],{"class":311},[252,72674,51632],{"class":258},[252,72676,51696],{"class":311},[252,72678,2177],{"class":311},[252,72680,51632],{"class":258},[252,72682,1429],{"class":262},[252,72684,72685,72688,72690,72692,72694],{"class":254,"line":16750},[252,72686,72687],{"class":311},"      padding-right",[252,72689,51577],{"class":262},[252,72691,709],{"class":311},[252,72693,51632],{"class":258},[252,72695,1429],{"class":262},[252,72697,72698,72700,72702,72704,72706],{"class":254,"line":16773},[252,72699,55062],{"class":311},[252,72701,51577],{"class":262},[252,72703,786],{"class":311},[252,72705,51632],{"class":258},[252,72707,1429],{"class":262},[252,72709,72710,72712,72714,72716,72718,72721,72723,72726,72728,72730],{"class":254,"line":16779},[252,72711,55024],{"class":311},[252,72713,51577],{"class":262},[252,72715,72463],{"class":311},[252,72717,263],{"class":262},[252,72719,72720],{"class":311},"237",[252,72722,12575],{"class":262},[252,72724,72725],{"class":311},"235",[252,72727,12575],{"class":262},[252,72729,72725],{"class":311},[252,72731,2858],{"class":262},[252,72733,72734,72737,72739,72741],{"class":254,"line":16802},[252,72735,72736],{"class":311},"      box-sizing",[252,72738,51577],{"class":262},[252,72740,60645],{"class":311},[252,72742,1429],{"class":262},[252,72744,72745],{"class":254,"line":16816},[252,72746,2326],{"class":262},[252,72748,72749],{"class":254,"line":16836},[252,72750,2539],{"emptyLinePlaceholder":181},[252,72752,72753,72755,72757],{"class":254,"line":16842},[252,72754,72615],{"class":2102},[252,72756,51828],{"class":51440},[252,72758,15712],{"class":262},[252,72760,72761,72763,72765,72767],{"class":254,"line":16853},[252,72762,57556],{"class":311},[252,72764,51577],{"class":262},[252,72766,57561],{"class":311},[252,72768,1429],{"class":262},[252,72770,72771],{"class":254,"line":16876},[252,72772,2326],{"class":262},[252,72774,72775],{"class":254,"line":16898},[252,72776,2539],{"emptyLinePlaceholder":181},[252,72778,72779,72781],{"class":254,"line":16903},[252,72780,65163],{"class":51440},[252,72782,15712],{"class":262},[252,72784,72785,72787,72789,72791,72793],{"class":254,"line":16909},[252,72786,54911],{"class":311},[252,72788,51577],{"class":262},[252,72790,61769],{"class":311},[252,72792,51632],{"class":258},[252,72794,1429],{"class":262},[252,72796,72797,72799,72801,72804],{"class":254,"line":16923},[252,72798,54846],{"class":311},[252,72800,51577],{"class":262},[252,72802,72803],{"class":311},"auto",[252,72805,1429],{"class":262},[252,72807,72808,72810,72812,72814],{"class":254,"line":16936},[252,72809,65170],{"class":311},[252,72811,51577],{"class":262},[252,72813,65175],{"class":311},[252,72815,1429],{"class":262},[252,72817,72818],{"class":254,"line":16941},[252,72819,2326],{"class":262},[252,72821,72822],{"class":254,"line":16955},[252,72823,2539],{"emptyLinePlaceholder":181},[252,72825,72826,72828],{"class":254,"line":16960},[252,72827,65255],{"class":51440},[252,72829,15712],{"class":262},[252,72831,72832,72834,72836,72838,72840,72842,72844,72846,72848,72850],{"class":254,"line":16966},[252,72833,55024],{"class":311},[252,72835,51577],{"class":262},[252,72837,72463],{"class":311},[252,72839,263],{"class":262},[252,72841,72720],{"class":311},[252,72843,12575],{"class":262},[252,72845,72725],{"class":311},[252,72847,12575],{"class":262},[252,72849,72725],{"class":311},[252,72851,2858],{"class":262},[252,72853,72854],{"class":254,"line":16971},[252,72855,2326],{"class":262},[252,72857,72858],{"class":254,"line":16985},[252,72859,2539],{"emptyLinePlaceholder":181},[252,72861,72862,72864],{"class":254,"line":16990},[252,72863,65255],{"class":51440},[252,72865,31606],{"class":262},[252,72867,72868,72870],{"class":254,"line":16995},[252,72869,65321],{"class":51440},[252,72871,15712],{"class":262},[252,72873,72874,72876,72878,72880,72882],{"class":254,"line":17009},[252,72875,54925],{"class":311},[252,72877,51577],{"class":262},[252,72879,536],{"class":311},[252,72881,51632],{"class":258},[252,72883,1429],{"class":262},[252,72885,72886,72888,72890,72892],{"class":254,"line":17021},[252,72887,57426],{"class":311},[252,72889,51577],{"class":262},[252,72891,23875],{"class":311},[252,72893,1429],{"class":262},[252,72895,72896,72898,72900,72902,72904],{"class":254,"line":17026},[252,72897,55062],{"class":311},[252,72899,51577],{"class":262},[252,72901,812],{"class":311},[252,72903,51632],{"class":258},[252,72905,1429],{"class":262},[252,72907,72908,72910,72912,72914,72916,72918,72920,72922,72925,72927,72930,72932,72934],{"class":254,"line":17039},[252,72909,62117],{"class":311},[252,72911,51577],{"class":262},[252,72913,480],{"class":311},[252,72915,51632],{"class":258},[252,72917,51661],{"class":311},[252,72919,72400],{"class":311},[252,72921,263],{"class":262},[252,72923,72924],{"class":311},"228",[252,72926,12575],{"class":262},[252,72928,72929],{"class":311},"225",[252,72931,12575],{"class":262},[252,72933,72929],{"class":311},[252,72935,2858],{"class":262},[252,72937,72938,72941,72943,72945,72947],{"class":254,"line":17044},[252,72939,72940],{"class":311},"      padding-left",[252,72942,51577],{"class":262},[252,72944,582],{"class":311},[252,72946,51632],{"class":258},[252,72948,1429],{"class":262},[252,72950,72951,72953,72955,72957,72960,72962,72964],{"class":254,"line":17049},[252,72952,62000],{"class":311},[252,72954,51577],{"class":262},[252,72956,28261],{"class":311},[252,72958,72959],{"class":311}," linear",[252,72961,62007],{"class":311},[252,72963,958],{"class":258},[252,72965,1429],{"class":262},[252,72967,72968],{"class":254,"line":17054},[252,72969,2326],{"class":262},[252,72971,72972],{"class":254,"line":17067},[252,72973,2539],{"emptyLinePlaceholder":181},[252,72975,72976,72979,72981,72983],{"class":254,"line":17072},[252,72977,72978],{"class":51440},"    tbody",[252,72980,70284],{"class":51440},[252,72982,61080],{"class":2102},[252,72984,15712],{"class":262},[252,72986,72987,72989,72991,72993,72995,72997,72999,73001,73003,73005],{"class":254,"line":32773},[252,72988,55024],{"class":311},[252,72990,51577],{"class":262},[252,72992,72463],{"class":311},[252,72994,263],{"class":262},[252,72996,72720],{"class":311},[252,72998,12575],{"class":262},[252,73000,72725],{"class":311},[252,73002,12575],{"class":262},[252,73004,72725],{"class":311},[252,73006,2858],{"class":262},[252,73008,73009,73011,73013,73015],{"class":254,"line":32779},[252,73010,62165],{"class":311},[252,73012,51577],{"class":262},[252,73014,62170],{"class":311},[252,73016,1429],{"class":262},[252,73018,73019],{"class":254,"line":32785},[252,73020,2326],{"class":262},[252,73022,73023],{"class":254,"line":32791},[252,73024,2539],{"emptyLinePlaceholder":181},[252,73026,73027,73029,73031,73034,73036],{"class":254,"line":32797},[252,73028,72978],{"class":51440},[252,73030,70284],{"class":51440},[252,73032,73033],{"class":51440}," td",[252,73035,1537],{"class":51440},[252,73037,15712],{"class":262},[252,73039,73040,73042,73044,73046],{"class":254,"line":32808},[252,73041,55149],{"class":311},[252,73043,51577],{"class":262},[252,73045,61009],{"class":311},[252,73047,1429],{"class":262},[252,73049,73050,73052,73054,73056,73058],{"class":254,"line":32814},[252,73051,54911],{"class":311},[252,73053,51577],{"class":262},[252,73055,1170],{"class":311},[252,73057,51632],{"class":258},[252,73059,1429],{"class":262},[252,73061,73062,73064,73066,73068,73070],{"class":254,"line":32834},[252,73063,54925],{"class":311},[252,73065,51577],{"class":262},[252,73067,1088],{"class":311},[252,73069,51632],{"class":258},[252,73071,1429],{"class":262},[252,73073,73074,73076,73078,73080,73082],{"class":254,"line":32840},[252,73075,57499],{"class":311},[252,73077,51577],{"class":262},[252,73079,1088],{"class":311},[252,73081,51632],{"class":258},[252,73083,1429],{"class":262},[252,73085,73086,73088,73090,73092,73094],{"class":254,"line":32851},[252,73087,62217],{"class":311},[252,73089,51577],{"class":262},[252,73091,340],{"class":311},[252,73093,51632],{"class":258},[252,73095,1429],{"class":262},[252,73097,73098,73100,73102,73104],{"class":254,"line":32857},[252,73099,57556],{"class":311},[252,73101,51577],{"class":262},[252,73103,60982],{"class":311},[252,73105,1429],{"class":262},[252,73107,73108,73110,73112,73114],{"class":254,"line":32863},[252,73109,57426],{"class":311},[252,73111,51577],{"class":262},[252,73113,51732],{"class":311},[252,73115,1429],{"class":262},[252,73117,73118,73120,73122,73124],{"class":254,"line":32869},[252,73119,64110],{"class":311},[252,73121,51577],{"class":262},[252,73123,54877],{"class":311},[252,73125,1429],{"class":262},[252,73127,73128,73130,73132,73135],{"class":254,"line":32875},[252,73129,55024],{"class":311},[252,73131,51577],{"class":262},[252,73133,73134],{"class":311},"orange",[252,73136,1429],{"class":262},[252,73138,73139,73141,73143,73146,73148],{"class":254,"line":32881},[252,73140,55274],{"class":311},[252,73142,51577],{"class":262},[252,73144,73145],{"class":311},"12.5",[252,73147,51632],{"class":258},[252,73149,1429],{"class":262},[252,73151,73152],{"class":254,"line":32887},[252,73153,2326],{"class":262},[252,73155,73156,73158,73160],{"class":254,"line":32893},[252,73157,52557],{"class":262},[252,73159,5266],{"class":51440},[252,73161,51447],{"class":262},[252,73163,73164,73166,73168],{"class":254,"line":32913},[252,73165,51925],{"class":262},[252,73167,51474],{"class":51440},[252,73169,51447],{"class":262},[252,73171,73172],{"class":254,"line":32919},[252,73173,2539],{"emptyLinePlaceholder":181},[252,73175,73176,73178,73180],{"class":254,"line":32935},[252,73177,1173],{"class":262},[252,73179,51940],{"class":51440},[252,73181,51447],{"class":262},[252,73183,73184,73186,73188,73191,73193],{"class":254,"line":32941},[252,73185,52284],{"class":262},[252,73187,14],{"class":51440},[252,73189,73190],{"class":262},">学生就业统计表\u003C\u002F",[252,73192,14],{"class":51440},[252,73194,51447],{"class":262},[252,73196,73197,73199,73201,73203,73205,73207,73209,73211,73213],{"class":254,"line":32955},[252,73198,52284],{"class":262},[252,73200,66765],{"class":51440},[252,73202,53626],{"class":2102},[252,73204,308],{"class":262},[252,73206,62804],{"class":367},[252,73208,69210],{"class":2102},[252,73210,308],{"class":262},[252,73212,31916],{"class":367},[252,73214,51447],{"class":262},[252,73216,73217,73219,73221,73223,73225,73227,73229,73231,73233,73235,73237,73240,73242,73244,73246],{"class":254,"line":32961},[252,73218,51481],{"class":262},[252,73220,53961],{"class":51440},[252,73222,53964],{"class":2102},[252,73224,308],{"class":262},[252,73226,62839],{"class":367},[252,73228,15060],{"class":2102},[252,73230,308],{"class":262},[252,73232,69236],{"class":367},[252,73234,61160],{"class":2102},[252,73236,308],{"class":262},[252,73238,73239],{"class":367},"\"姓名\"",[252,73241,53626],{"class":2102},[252,73243,308],{"class":262},[252,73245,69236],{"class":367},[252,73247,51447],{"class":262},[252,73249,73250,73252,73254,73256,73258,73260,73262,73264,73266,73268,73270,73273,73275,73277,73279],{"class":254,"line":32976},[252,73251,51481],{"class":262},[252,73253,53961],{"class":51440},[252,73255,53964],{"class":2102},[252,73257,308],{"class":262},[252,73259,62839],{"class":367},[252,73261,15060],{"class":2102},[252,73263,308],{"class":262},[252,73265,69264],{"class":367},[252,73267,61160],{"class":2102},[252,73269,308],{"class":262},[252,73271,73272],{"class":367},"\"年龄\"",[252,73274,53626],{"class":2102},[252,73276,308],{"class":262},[252,73278,69264],{"class":367},[252,73280,51447],{"class":262},[252,73282,73283,73285,73287,73289,73291,73293,73295,73297,73299,73301,73303,73306,73308,73310,73312],{"class":254,"line":32982},[252,73284,51481],{"class":262},[252,73286,53961],{"class":51440},[252,73288,53964],{"class":2102},[252,73290,308],{"class":262},[252,73292,62839],{"class":367},[252,73294,15060],{"class":2102},[252,73296,308],{"class":262},[252,73298,69366],{"class":367},[252,73300,61160],{"class":2102},[252,73302,308],{"class":262},[252,73304,73305],{"class":367},"\"薪资\"",[252,73307,53626],{"class":2102},[252,73309,308],{"class":262},[252,73311,69366],{"class":367},[252,73313,51447],{"class":262},[252,73315,73316,73318,73320,73322,73324,73326,73328,73330,73332,73334,73336,73338],{"class":254,"line":32991},[252,73317,51481],{"class":262},[252,73319,69284],{"class":51440},[252,73321,15060],{"class":2102},[252,73323,308],{"class":262},[252,73325,69291],{"class":367},[252,73327,15099],{"class":2102},[252,73329,308],{"class":262},[252,73331,7792],{"class":367},[252,73333,53626],{"class":2102},[252,73335,308],{"class":262},[252,73337,69291],{"class":367},[252,73339,51447],{"class":262},[252,73341,73342,73344,73346,73348,73350,73352,73354,73356],{"class":254,"line":32997},[252,73343,55374],{"class":262},[252,73345,69306],{"class":51440},[252,73347,66791],{"class":2102},[252,73349,308],{"class":262},[252,73351,10101],{"class":367},[252,73353,69315],{"class":262},[252,73355,69306],{"class":51440},[252,73357,51447],{"class":262},[252,73359,73360,73362,73364,73366,73368,73370,73372,73374],{"class":254,"line":33006},[252,73361,55374],{"class":262},[252,73363,69306],{"class":51440},[252,73365,66791],{"class":2102},[252,73367,308],{"class":262},[252,73369,10170],{"class":367},[252,73371,69334],{"class":262},[252,73373,69306],{"class":51440},[252,73375,51447],{"class":262},[252,73377,73378,73380,73382],{"class":254,"line":33012},[252,73379,51916],{"class":262},[252,73381,69284],{"class":51440},[252,73383,51447],{"class":262},[252,73385,73386,73388,73390,73392,73394,73396,73398,73400,73402,73404,73406,73408],{"class":254,"line":33018},[252,73387,51481],{"class":262},[252,73389,69284],{"class":51440},[252,73391,15060],{"class":2102},[252,73393,308],{"class":262},[252,73395,69388],{"class":367},[252,73397,15099],{"class":2102},[252,73399,308],{"class":262},[252,73401,7792],{"class":367},[252,73403,53626],{"class":2102},[252,73405,308],{"class":262},[252,73407,69388],{"class":367},[252,73409,51447],{"class":262},[252,73411,73412,73414,73416,73418,73420,73422,73424,73426],{"class":254,"line":33027},[252,73413,55374],{"class":262},[252,73415,69306],{"class":51440},[252,73417,66791],{"class":2102},[252,73419,308],{"class":262},[252,73421,69409],{"class":367},[252,73423,69412],{"class":262},[252,73425,69306],{"class":51440},[252,73427,51447],{"class":262},[252,73429,73430,73432,73434,73436,73438,73440,73442,73444],{"class":254,"line":33033},[252,73431,55374],{"class":262},[252,73433,69306],{"class":51440},[252,73435,66791],{"class":2102},[252,73437,308],{"class":262},[252,73439,69429],{"class":367},[252,73441,69432],{"class":262},[252,73443,69306],{"class":51440},[252,73445,51447],{"class":262},[252,73447,73448,73450,73452,73454,73456,73458,73460,73462],{"class":254,"line":33044},[252,73449,55374],{"class":262},[252,73451,69306],{"class":51440},[252,73453,66791],{"class":2102},[252,73455,308],{"class":262},[252,73457,69449],{"class":367},[252,73459,69452],{"class":262},[252,73461,69306],{"class":51440},[252,73463,51447],{"class":262},[252,73465,73466,73468,73470,73472,73474,73476,73478,73480],{"class":254,"line":33050},[252,73467,55374],{"class":262},[252,73469,69306],{"class":51440},[252,73471,66791],{"class":2102},[252,73473,308],{"class":262},[252,73475,69469],{"class":367},[252,73477,69472],{"class":262},[252,73479,69306],{"class":51440},[252,73481,51447],{"class":262},[252,73483,73484,73486,73488,73490,73492,73494,73496,73498],{"class":254,"line":33069},[252,73485,55374],{"class":262},[252,73487,69306],{"class":51440},[252,73489,66791],{"class":2102},[252,73491,308],{"class":262},[252,73493,69489],{"class":367},[252,73495,69492],{"class":262},[252,73497,69306],{"class":51440},[252,73499,51447],{"class":262},[252,73501,73502,73504,73506],{"class":254,"line":33075},[252,73503,51916],{"class":262},[252,73505,69284],{"class":51440},[252,73507,51447],{"class":262},[252,73509,73510,73512,73514],{"class":254,"line":33086},[252,73511,51481],{"class":262},[252,73513,54027],{"class":51440},[252,73515,51447],{"class":262},[252,73517,73518,73520,73522,73525,73527,73530,73532],{"class":254,"line":33092},[252,73519,55374],{"class":262},[252,73521,252],{"class":51440},[252,73523,73524],{"class":262},">+\u003C\u002F",[252,73526,252],{"class":51440},[252,73528,73529],{"class":262},">添加\u003C\u002F",[252,73531,54027],{"class":51440},[252,73533,51447],{"class":262},[252,73535,73536,73538,73540],{"class":254,"line":33112},[252,73537,52557],{"class":262},[252,73539,66765],{"class":51440},[252,73541,51447],{"class":262},[252,73543,73544,73546,73548,73550,73552,73554,73557,73559,73562,73564,73567,73569],{"class":254,"line":33128},[252,73545,52284],{"class":262},[252,73547,51751],{"class":51440},[252,73549,53626],{"class":2102},[252,73551,308],{"class":262},[252,73553,62720],{"class":367},[252,73555,73556],{"class":262},">共有数据 \u003C",[252,73558,252],{"class":51440},[252,73560,73561],{"class":262},">0\u003C\u002F",[252,73563,252],{"class":51440},[252,73565,73566],{"class":262},"> 条\u003C\u002F",[252,73568,51751],{"class":51440},[252,73570,51447],{"class":262},[252,73572,73573,73575,73577],{"class":254,"line":33134},[252,73574,52284],{"class":262},[252,73576,400],{"class":51440},[252,73578,51447],{"class":262},[252,73580,73581,73583,73585],{"class":254,"line":33148},[252,73582,51481],{"class":262},[252,73584,403],{"class":51440},[252,73586,51447],{"class":262},[252,73588,73589,73591,73593],{"class":254,"line":33154},[252,73590,55374],{"class":262},[252,73592,406],{"class":51440},[252,73594,51447],{"class":262},[252,73596,73597,73599,73601,73604,73606],{"class":254,"line":33160},[252,73598,55442],{"class":262},[252,73600,409],{"class":51440},[252,73602,73603],{"class":262},">ID\u003C\u002F",[252,73605,409],{"class":51440},[252,73607,51447],{"class":262},[252,73609,73610,73612,73614,73616,73618],{"class":254,"line":33171},[252,73611,55442],{"class":262},[252,73613,409],{"class":51440},[252,73615,69595],{"class":262},[252,73617,409],{"class":51440},[252,73619,51447],{"class":262},[252,73621,73622,73624,73626,73628,73630],{"class":254,"line":33177},[252,73623,55442],{"class":262},[252,73625,409],{"class":51440},[252,73627,69608],{"class":262},[252,73629,409],{"class":51440},[252,73631,51447],{"class":262},[252,73633,73634,73636,73638,73640,73642],{"class":254,"line":33183},[252,73635,55442],{"class":262},[252,73637,409],{"class":51440},[252,73639,69621],{"class":262},[252,73641,409],{"class":51440},[252,73643,51447],{"class":262},[252,73645,73646,73648,73650,73652,73654],{"class":254,"line":33193},[252,73647,55442],{"class":262},[252,73649,409],{"class":51440},[252,73651,69634],{"class":262},[252,73653,409],{"class":51440},[252,73655,51447],{"class":262},[252,73657,73658,73660,73662,73664,73666],{"class":254,"line":33199},[252,73659,55442],{"class":262},[252,73661,409],{"class":51440},[252,73663,69647],{"class":262},[252,73665,409],{"class":51440},[252,73667,51447],{"class":262},[252,73669,73670,73672,73674,73677,73679],{"class":254,"line":33210},[252,73671,55442],{"class":262},[252,73673,409],{"class":51440},[252,73675,73676],{"class":262},">录入时间\u003C\u002F",[252,73678,409],{"class":51440},[252,73680,51447],{"class":262},[252,73682,73683,73685,73687,73689,73691],{"class":254,"line":33216},[252,73684,55442],{"class":262},[252,73686,409],{"class":51440},[252,73688,69660],{"class":262},[252,73690,409],{"class":51440},[252,73692,51447],{"class":262},[252,73694,73695,73697,73699],{"class":254,"line":33226},[252,73696,55547],{"class":262},[252,73698,406],{"class":51440},[252,73700,51447],{"class":262},[252,73702,73703,73705,73707],{"class":254,"line":33231},[252,73704,51916],{"class":262},[252,73706,403],{"class":51440},[252,73708,51447],{"class":262},[252,73710,73711,73713,73715],{"class":254,"line":33237},[252,73712,51481],{"class":262},[252,73714,447],{"class":51440},[252,73716,51447],{"class":262},[252,73718,73719],{"class":254,"line":33286},[252,73720,73721],{"class":321},"      \u003C!-- \u003Ctr>\n",[252,73723,73724],{"class":254,"line":33333},[252,73725,73726],{"class":321},"        \u003Ctd>1\u003C\u002Ftd>\n",[252,73728,73729],{"class":254,"line":33338},[252,73730,73726],{"class":321},[252,73732,73733],{"class":254,"line":33344},[252,73734,73726],{"class":321},[252,73736,73737],{"class":254,"line":33363},[252,73738,73726],{"class":321},[252,73740,73741],{"class":254,"line":33369},[252,73742,73726],{"class":321},[252,73744,73745],{"class":254,"line":33389},[252,73746,73726],{"class":321},[252,73748,73749],{"class":254,"line":33395},[252,73750,73726],{"class":321},[252,73752,73753],{"class":254,"line":33401},[252,73754,73755],{"class":321},"        \u003Ctd>\n",[252,73757,73758],{"class":254,"line":33411},[252,73759,73760],{"class":321},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[252,73762,73763],{"class":254,"line":33416},[252,73764,73765],{"class":321},"        \u003C\u002Ftd>\n",[252,73767,73768],{"class":254,"line":33422},[252,73769,73770],{"class":321},"      \u003C\u002Ftr> -->\n",[252,73772,73773,73775,73777],{"class":254,"line":33438},[252,73774,51916],{"class":262},[252,73776,447],{"class":51440},[252,73778,51447],{"class":262},[252,73780,73781,73783,73785],{"class":254,"line":33483},[252,73782,52557],{"class":262},[252,73784,400],{"class":51440},[252,73786,51447],{"class":262},[252,73788,73789,73791,73793],{"class":254,"line":33489},[252,73790,52284],{"class":262},[252,73792,51953],{"class":51440},[252,73794,51447],{"class":262},[252,73796,73797],{"class":254,"line":33495},[252,73798,73799],{"class":321},"    \u002F\u002F const initData = [{\n",[252,73801,73802],{"class":254,"line":33501},[252,73803,73804],{"class":321},"    \u002F\u002F   unameId: 1,\n",[252,73806,73807],{"class":254,"line":33512},[252,73808,73809],{"class":321},"    \u002F\u002F   uname: '华晨宇',\n",[252,73811,73812],{"class":254,"line":33518},[252,73813,73814],{"class":321},"    \u002F\u002F   age: 22,\n",[252,73816,73817],{"class":254,"line":33524},[252,73818,73819],{"class":321},"    \u002F\u002F   salary: 12000,\n",[252,73821,73822],{"class":254,"line":33530},[252,73823,73824],{"class":321},"    \u002F\u002F   gender: '男',\n",[252,73826,73827],{"class":254,"line":33548},[252,73828,73829],{"class":321},"    \u002F\u002F   city: '北京',\n",[252,73831,73832],{"class":254,"line":33562},[252,73833,73834],{"class":321},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[252,73836,73837],{"class":254,"line":33571},[252,73838,73839],{"class":321},"    \u002F\u002F }]\n",[252,73841,73842],{"class":254,"line":33580},[252,73843,73844],{"class":321},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[252,73846,73847],{"class":254,"line":33589},[252,73848,73849],{"class":321},"    \u002F\u002F 1.渲染业务\n",[252,73851,73852],{"class":254,"line":33598},[252,73853,73854],{"class":321},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[252,73856,73857],{"class":254,"line":33604},[252,73858,73859],{"class":321},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[252,73861,73862],{"class":254,"line":33610},[252,73863,73864],{"class":321},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[252,73866,73867],{"class":254,"line":33618},[252,73868,2539],{"emptyLinePlaceholder":181},[252,73870,73871],{"class":254,"line":33623},[252,73872,73873],{"class":321},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[252,73875,73876],{"class":254,"line":33629},[252,73877,73878],{"class":321},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[252,73880,73881,73883,73885,73887],{"class":254,"line":33640},[252,73882,11361],{"class":258},[252,73884,57835],{"class":311},[252,73886,13704],{"class":258},[252,73888,51978],{"class":262},[252,73890,73891,73894,73896],{"class":254,"line":33646},[252,73892,73893],{"class":262},"    console.",[252,73895,58387],{"class":2102},[252,73897,52552],{"class":262},[252,73899,73900],{"class":254,"line":33666},[252,73901,2539],{"emptyLinePlaceholder":181},[252,73903,73904],{"class":254,"line":33672},[252,73905,73906],{"class":321},"    \u002F\u002F 时间函数\n",[252,73908,73909,73911,73914],{"class":254,"line":33678},[252,73910,70224],{"class":258},[252,73912,73913],{"class":2102}," getTime",[252,73915,10993],{"class":262},[252,73917,73918,73920,73923,73925,73927,73930],{"class":254,"line":33684},[252,73919,58368],{"class":258},[252,73921,73922],{"class":311}," date",[252,73924,13704],{"class":258},[252,73926,11718],{"class":258},[252,73928,73929],{"class":2102}," Date",[252,73931,2115],{"class":262},[252,73933,73934,73936,73938,73940,73943,73946,73948,73950,73952,73955,73958,73960,73962,73964,73966,73968,73970,73972],{"class":254,"line":33701},[252,73935,58368],{"class":258},[252,73937,16231],{"class":311},[252,73939,13704],{"class":258},[252,73941,73942],{"class":262}," date.",[252,73944,73945],{"class":2102},"getHours",[252,73947,13190],{"class":262},[252,73949,1173],{"class":258},[252,73951,2177],{"class":311},[252,73953,73954],{"class":258}," ?",[252,73956,73957],{"class":367}," '0'",[252,73959,45706],{"class":258},[252,73961,73942],{"class":262},[252,73963,73945],{"class":2102},[252,73965,13190],{"class":262},[252,73967,1122],{"class":258},[252,73969,73942],{"class":262},[252,73971,73945],{"class":2102},[252,73973,2115],{"class":262},[252,73975,73976,73978,73981,73983,73985,73988,73990,73992,73994,73996,73998,74000,74002,74004,74006,74008,74010,74012],{"class":254,"line":33707},[252,73977,58368],{"class":258},[252,73979,73980],{"class":311}," m",[252,73982,13704],{"class":258},[252,73984,73942],{"class":262},[252,73986,73987],{"class":2102},"getMinutes",[252,73989,13190],{"class":262},[252,73991,1173],{"class":258},[252,73993,2177],{"class":311},[252,73995,73954],{"class":258},[252,73997,73957],{"class":367},[252,73999,45706],{"class":258},[252,74001,73942],{"class":262},[252,74003,73987],{"class":2102},[252,74005,13190],{"class":262},[252,74007,1122],{"class":258},[252,74009,73942],{"class":262},[252,74011,73987],{"class":2102},[252,74013,2115],{"class":262},[252,74015,74016,74018,74020,74022,74024,74027,74029,74031,74033,74035,74037,74039,74041,74043,74045,74047,74049,74051],{"class":254,"line":33713},[252,74017,58368],{"class":258},[252,74019,8568],{"class":311},[252,74021,13704],{"class":258},[252,74023,73942],{"class":262},[252,74025,74026],{"class":2102},"getSeconds",[252,74028,13190],{"class":262},[252,74030,1173],{"class":258},[252,74032,2177],{"class":311},[252,74034,73954],{"class":258},[252,74036,73957],{"class":367},[252,74038,45706],{"class":258},[252,74040,73942],{"class":262},[252,74042,74026],{"class":2102},[252,74044,13190],{"class":262},[252,74046,1122],{"class":258},[252,74048,73942],{"class":262},[252,74050,74026],{"class":2102},[252,74052,2115],{"class":262},[252,74054,74055,74057,74060,74062,74064,74067,74069,74072,74074,74077,74079,74081,74084,74086,74088,74090,74092,74094,74096,74099,74101,74104,74106,74109,74111,74113,74115],{"class":254,"line":33719},[252,74056,58368],{"class":258},[252,74058,74059],{"class":311}," str",[252,74061,13704],{"class":258},[252,74063,63043],{"class":367},[252,74065,74066],{"class":262},"date",[252,74068,821],{"class":367},[252,74070,74071],{"class":2102},"getFullYear",[252,74073,2566],{"class":367},[252,74075,74076],{"class":367},"}\u002F${",[252,74078,74066],{"class":262},[252,74080,821],{"class":367},[252,74082,74083],{"class":2102},"getMonth",[252,74085,13190],{"class":367},[252,74087,744],{"class":258},[252,74089,25258],{"class":311},[252,74091,74076],{"class":367},[252,74093,74066],{"class":262},[252,74095,821],{"class":367},[252,74097,74098],{"class":2102},"getDate",[252,74100,2566],{"class":367},[252,74102,74103],{"class":367},"} ${",[252,74105,678],{"class":262},[252,74107,74108],{"class":367},"}:${",[252,74110,807],{"class":262},[252,74112,74108],{"class":367},[252,74114,958],{"class":262},[252,74116,74117],{"class":367},"}`\n",[252,74119,74120,74123],{"class":254,"line":33725},[252,74121,74122],{"class":258},"      return",[252,74124,74125],{"class":262}," str\n",[252,74127,74128],{"class":254,"line":33731},[252,74129,2326],{"class":262},[252,74131,74132],{"class":254,"line":33758},[252,74133,74134],{"class":321},"    \u002F\u002F 渲染函数\n",[252,74136,74137,74139,74141,74143,74145,74147,74149,74151],{"class":254,"line":33782},[252,74138,11361],{"class":258},[252,74140,69887],{"class":311},[252,74142,13704],{"class":258},[252,74144,54536],{"class":262},[252,74146,54539],{"class":2102},[252,74148,263],{"class":262},[252,74150,69898],{"class":367},[252,74152,269],{"class":262},[252,74154,74155,74157,74159],{"class":254,"line":33788},[252,74156,70224],{"class":258},[252,74158,70227],{"class":2102},[252,74160,10993],{"class":262},[252,74162,74163],{"class":254,"line":33794},[252,74164,74165],{"class":321},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[252,74167,74168],{"class":254,"line":33800},[252,74169,74170],{"class":321},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[252,74172,74173,74175,74178,74180,74182,74185,74187,74189,74191,74194,74196,74199],{"class":254,"line":33811},[252,74174,58368],{"class":258},[252,74176,74177],{"class":311}," trArr",[252,74179,13704],{"class":258},[252,74181,52105],{"class":262},[252,74183,74184],{"class":2102},"map",[252,74186,263],{"class":262},[252,74188,54589],{"class":258},[252,74190,1797],{"class":262},[252,74192,74193],{"class":5356},"ele",[252,74195,12575],{"class":262},[252,74197,74198],{"class":5356},"index",[252,74200,12582],{"class":262},[252,74202,74203,74205],{"class":254,"line":33822},[252,74204,14892],{"class":258},[252,74206,70308],{"class":367},[252,74208,74209],{"class":254,"line":33828},[252,74210,74211],{"class":367},"      \u003Ctr>\n",[252,74213,74214,74216,74218,74220,74223],{"class":254,"line":33845},[252,74215,70313],{"class":367},[252,74217,74193],{"class":262},[252,74219,821],{"class":367},[252,74221,74222],{"class":262},"unameId",[252,74224,70328],{"class":367},[252,74226,74227,74229,74231,74233,74235],{"class":254,"line":33868},[252,74228,70313],{"class":367},[252,74230,74193],{"class":262},[252,74232,821],{"class":367},[252,74234,70344],{"class":262},[252,74236,70328],{"class":367},[252,74238,74239,74241,74243,74245,74247],{"class":254,"line":33891},[252,74240,70313],{"class":367},[252,74242,74193],{"class":262},[252,74244,821],{"class":367},[252,74246,70361],{"class":262},[252,74248,70328],{"class":367},[252,74250,74251,74253,74255,74257,74259],{"class":254,"line":33897},[252,74252,70313],{"class":367},[252,74254,74193],{"class":262},[252,74256,821],{"class":367},[252,74258,70378],{"class":262},[252,74260,70328],{"class":367},[252,74262,74263,74265,74267,74269,74271],{"class":254,"line":33902},[252,74264,70313],{"class":367},[252,74266,74193],{"class":262},[252,74268,821],{"class":367},[252,74270,70395],{"class":262},[252,74272,70328],{"class":367},[252,74274,74275,74277,74279,74281,74283],{"class":254,"line":33911},[252,74276,70313],{"class":367},[252,74278,74193],{"class":262},[252,74280,821],{"class":367},[252,74282,70412],{"class":262},[252,74284,70328],{"class":367},[252,74286,74287,74289,74291,74293,74295],{"class":254,"line":33921},[252,74288,70313],{"class":367},[252,74290,74193],{"class":262},[252,74292,821],{"class":367},[252,74294,2526],{"class":262},[252,74296,70328],{"class":367},[252,74298,74299],{"class":254,"line":33927},[252,74300,73755],{"class":367},[252,74302,74303,74306,74308],{"class":254,"line":33932},[252,74304,74305],{"class":367},"          \u003Ca href=\"#\" data-id=\"${",[252,74307,74198],{"class":262},[252,74309,74310],{"class":367},"}\">删除\u003C\u002Fa>\n",[252,74312,74313],{"class":254,"line":33938},[252,74314,73765],{"class":367},[252,74316,74317],{"class":254,"line":33951},[252,74318,74319],{"class":367},"      \u003C\u002Ftr>\n",[252,74321,74322],{"class":254,"line":33957},[252,74323,74324],{"class":367},"  `\n",[252,74326,74327],{"class":254,"line":33968},[252,74328,64955],{"class":262},[252,74330,74331,74333,74335],{"class":254,"line":33979},[252,74332,58384],{"class":262},[252,74334,58387],{"class":2102},[252,74336,74337],{"class":262},"(trArr)\n",[252,74339,74340],{"class":254,"line":33998},[252,74341,2539],{"emptyLinePlaceholder":181},[252,74343,74344],{"class":254,"line":49658},[252,74345,74346],{"class":321},"      \u002F\u002F (2) 把数组转换为字符串join\n",[252,74348,74349],{"class":254,"line":49663},[252,74350,74351],{"class":321},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[252,74353,74354,74356,74358,74361,74364,74366,74369],{"class":254,"line":49672},[252,74355,70239],{"class":262},[252,74357,308],{"class":258},[252,74359,74360],{"class":262}," trArr.",[252,74362,74363],{"class":2102},"join",[252,74365,263],{"class":262},[252,74367,74368],{"class":367},"''",[252,74370,269],{"class":262},[252,74372,74373],{"class":254,"line":49681},[252,74374,74375],{"class":321},"      \u002F\u002F 显示共有几条\n",[252,74377,74378,74380,74382,74384,74387,74390,74392,74394],{"class":254,"line":49686},[252,74379,55911],{"class":262},[252,74381,54539],{"class":2102},[252,74383,263],{"class":262},[252,74385,74386],{"class":367},"'.total span'",[252,74388,74389],{"class":262},").innerHTML ",[252,74391,308],{"class":258},[252,74393,52105],{"class":262},[252,74395,55971],{"class":311},[252,74397,74398],{"class":254,"line":49691},[252,74399,2326],{"class":262},[252,74401,74402],{"class":254,"line":49696},[252,74403,74404],{"class":321},"    \u002F\u002F render()\n",[252,74406,74407],{"class":254,"line":49709},[252,74408,2539],{"emptyLinePlaceholder":181},[252,74410,74411],{"class":254,"line":49714},[252,74412,74413],{"class":321},"    \u002F\u002F 获取DOM对象\n",[252,74415,74416,74418,74420,74422,74424,74426,74428,74430],{"class":254,"line":49723},[252,74417,11361],{"class":258},[252,74419,69961],{"class":311},[252,74421,13704],{"class":258},[252,74423,54536],{"class":262},[252,74425,54539],{"class":2102},[252,74427,263],{"class":262},[252,74429,69972],{"class":367},[252,74431,269],{"class":262},[252,74433,74434,74436,74438,74440,74442,74444,74446,74448],{"class":254,"line":49732},[252,74435,11361],{"class":258},[252,74437,69788],{"class":311},[252,74439,13704],{"class":258},[252,74441,54536],{"class":262},[252,74443,54539],{"class":2102},[252,74445,263],{"class":262},[252,74447,69799],{"class":367},[252,74449,269],{"class":262},[252,74451,74452,74454,74456,74458,74460,74462,74464,74466],{"class":254,"line":49749},[252,74453,11361],{"class":258},[252,74455,15829],{"class":311},[252,74457,13704],{"class":258},[252,74459,54536],{"class":262},[252,74461,54539],{"class":2102},[252,74463,263],{"class":262},[252,74465,69818],{"class":367},[252,74467,269],{"class":262},[252,74469,74471,74473,74475,74477,74479,74481,74483,74485],{"class":254,"line":74470},231,[252,74472,11361],{"class":258},[252,74474,69847],{"class":311},[252,74476,13704],{"class":258},[252,74478,54536],{"class":262},[252,74480,54539],{"class":2102},[252,74482,263],{"class":262},[252,74484,69858],{"class":367},[252,74486,269],{"class":262},[252,74488,74490,74492,74494,74496,74498,74500,74502,74504],{"class":254,"line":74489},232,[252,74491,11361],{"class":258},[252,74493,69827],{"class":311},[252,74495,13704],{"class":258},[252,74497,54536],{"class":262},[252,74499,54539],{"class":2102},[252,74501,263],{"class":262},[252,74503,69838],{"class":367},[252,74505,269],{"class":262},[252,74507,74509,74511,74513,74515,74517,74519,74521,74523],{"class":254,"line":74508},233,[252,74510,11361],{"class":258},[252,74512,69867],{"class":311},[252,74514,13704],{"class":258},[252,74516,54536],{"class":262},[252,74518,54539],{"class":2102},[252,74520,263],{"class":262},[252,74522,69878],{"class":367},[252,74524,269],{"class":262},[252,74526,74528],{"class":254,"line":74527},234,[252,74529,2539],{"emptyLinePlaceholder":181},[252,74531,74533],{"class":254,"line":74532},235,[252,74534,74535],{"class":321},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[252,74537,74539,74541,74543,74545,74547,74549,74551,74553,74555],{"class":254,"line":74538},236,[252,74540,69979],{"class":262},[252,74542,57953],{"class":2102},[252,74544,263],{"class":262},[252,74546,69986],{"class":367},[252,74548,12575],{"class":262},[252,74550,54589],{"class":258},[252,74552,1797],{"class":262},[252,74554,337],{"class":5356},[252,74556,12582],{"class":262},[252,74558,74560],{"class":254,"line":74559},237,[252,74561,74562],{"class":321},"      \u002F\u002F 禁止浏览器跳转\n",[252,74564,74566,74568,74570],{"class":254,"line":74565},238,[252,74567,70006],{"class":262},[252,74569,70009],{"class":2102},[252,74571,2115],{"class":262},[252,74573,74575],{"class":254,"line":74574},239,[252,74576,74577],{"class":321},"      \u002F\u002F 非空判断\n",[252,74579,74581],{"class":254,"line":74580},240,[252,74582,74583],{"class":321},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[252,74585,74587],{"class":254,"line":74586},241,[252,74588,74589],{"class":321},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[252,74591,74593,74595,74597,74599,74602,74604,74607,74610,74612,74614],{"class":254,"line":74592},242,[252,74594,54620],{"class":258},[252,74596,1797],{"class":262},[252,74598,489],{"class":258},[252,74600,74601],{"class":262},"uname.value ",[252,74603,71497],{"class":258},[252,74605,74606],{"class":258}," !",[252,74608,74609],{"class":262},"age.value ",[252,74611,71497],{"class":258},[252,74613,74606],{"class":258},[252,74615,74616],{"class":262},"salary.value) {\n",[252,74618,74620,74622,74624,74626,74628],{"class":254,"line":74619},243,[252,74621,14892],{"class":258},[252,74623,70080],{"class":2102},[252,74625,263],{"class":262},[252,74627,70085],{"class":367},[252,74629,269],{"class":262},[252,74631,74633],{"class":254,"line":74632},244,[252,74634,52538],{"class":262},[252,74636,74638,74640,74642],{"class":254,"line":74637},245,[252,74639,58147],{"class":262},[252,74641,52024],{"class":2102},[252,74643,74644],{"class":262},"({\n",[252,74646,74648],{"class":254,"line":74647},246,[252,74649,74650],{"class":321},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[252,74652,74654],{"class":254,"line":74653},247,[252,74655,74656],{"class":321},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[252,74658,74660],{"class":254,"line":74659},248,[252,74661,74662],{"class":321},"        \u002F\u002F 对象的序号应为数组长度+1\n",[252,74664,74666],{"class":254,"line":74665},249,[252,74667,74668],{"class":321},"        \u002F\u002F unameId: arr.length + 1,\n",[252,74670,74672],{"class":254,"line":74671},250,[252,74673,2539],{"emptyLinePlaceholder":181},[252,74675,74677],{"class":254,"line":74676},251,[252,74678,74679],{"class":321},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[252,74681,74683],{"class":254,"line":74682},252,[252,74684,74685],{"class":321},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[252,74687,74689],{"class":254,"line":74688},253,[252,74690,74691],{"class":321},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[252,74693,74695],{"class":254,"line":74694},254,[252,74696,74697],{"class":321},"        \u002F\u002F 0当假看\n",[252,74699,74701,74704,74706,74708,74711,74713,74715,74717,74720,74722,74724,74727,74729],{"class":254,"line":74700},255,[252,74702,74703],{"class":262},"        unameId: arr.",[252,74705,52108],{"class":311},[252,74707,73954],{"class":258},[252,74709,74710],{"class":262}," arr[arr.",[252,74712,52108],{"class":311},[252,74714,52411],{"class":258},[252,74716,25258],{"class":311},[252,74718,74719],{"class":262},"].unameId ",[252,74721,744],{"class":258},[252,74723,25258],{"class":311},[252,74725,74726],{"class":258}," :",[252,74728,25258],{"class":311},[252,74730,31606],{"class":262},[252,74732,74734],{"class":254,"line":74733},256,[252,74735,70133],{"class":262},[252,74737,74739],{"class":254,"line":74738},257,[252,74740,70138],{"class":262},[252,74742,74744],{"class":254,"line":74743},258,[252,74745,70148],{"class":262},[252,74747,74749],{"class":254,"line":74748},259,[252,74750,70143],{"class":262},[252,74752,74754],{"class":254,"line":74753},260,[252,74755,74756],{"class":262},"        city: city.value,\n",[252,74758,74760],{"class":254,"line":74759},261,[252,74761,74762],{"class":321},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[252,74764,74766],{"class":254,"line":74765},262,[252,74767,74768],{"class":321},"        \u002F\u002F time: new Date().toDateString()\n",[252,74770,74772,74775,74778],{"class":254,"line":74771},263,[252,74773,74774],{"class":262},"        time: ",[252,74776,74777],{"class":2102},"getTime",[252,74779,2115],{"class":262},[252,74781,74783],{"class":254,"line":74782},264,[252,74784,64955],{"class":262},[252,74786,74788],{"class":254,"line":74787},265,[252,74789,74790],{"class":321},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[252,74792,74794,74796],{"class":254,"line":74793},266,[252,74795,70208],{"class":2102},[252,74797,2115],{"class":262},[252,74799,74801,74803,74805,74807,74809],{"class":254,"line":74800},267,[252,74802,70191],{"class":311},[252,74804,821],{"class":262},[252,74806,70196],{"class":2102},[252,74808,13190],{"class":262},[252,74810,74811],{"class":321},"\u002F\u002F重置表单\n",[252,74813,74815],{"class":254,"line":74814},268,[252,74816,74817],{"class":321},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[252,74819,74821,74824,74826,74828,74831,74833,74835,74837,74839],{"class":254,"line":74820},269,[252,74822,74823],{"class":262},"      localStorage.",[252,74825,71794],{"class":2102},[252,74827,263],{"class":262},[252,74829,74830],{"class":367},"'data'",[252,74832,12575],{"class":262},[252,74834,71804],{"class":311},[252,74836,821],{"class":262},[252,74838,71809],{"class":2102},[252,74840,74841],{"class":262},"(arr))\n",[252,74843,74845],{"class":254,"line":74844},270,[252,74846,33601],{"class":262},[252,74848,74850],{"class":254,"line":74849},271,[252,74851,2539],{"emptyLinePlaceholder":181},[252,74853,74855],{"class":254,"line":74854},272,[252,74856,74857],{"class":321},"    \u002F\u002F 3.删除业务\n",[252,74859,74861],{"class":254,"line":74860},273,[252,74862,74863],{"class":321},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[252,74865,74867,74869,74871,74873,74875,74877,74879,74881,74883],{"class":254,"line":74866},274,[252,74868,70481],{"class":262},[252,74870,57953],{"class":2102},[252,74872,263],{"class":262},[252,74874,57958],{"class":367},[252,74876,12575],{"class":262},[252,74878,54589],{"class":258},[252,74880,1797],{"class":262},[252,74882,337],{"class":5356},[252,74884,12582],{"class":262},[252,74886,74888],{"class":254,"line":74887},275,[252,74889,74890],{"class":321},"      \u002F\u002F 判断是否点击的是删除按钮\n",[252,74892,74894,74896,74898,74900,74902],{"class":254,"line":74893},276,[252,74895,54620],{"class":258},[252,74897,67174],{"class":262},[252,74899,54626],{"class":258},[252,74901,68396],{"class":367},[252,74903,12582],{"class":262},[252,74905,74907],{"class":254,"line":74906},277,[252,74908,74909],{"class":321},"        \u002F\u002F alert(1)\n",[252,74911,74913],{"class":254,"line":74912},278,[252,74914,74915],{"class":321},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[252,74917,74919],{"class":254,"line":74918},279,[252,74920,74921],{"class":321},"        \u002F\u002F console.log(e.target)\n",[252,74923,74925],{"class":254,"line":74924},280,[252,74926,74927],{"class":321},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[252,74929,74931],{"class":254,"line":74930},281,[252,74932,2539],{"emptyLinePlaceholder":181},[252,74934,74936],{"class":254,"line":74935},282,[252,74937,74938],{"class":321},"        \u002F\u002F 确认框，确然是否真的要删除\n",[252,74940,74942],{"class":254,"line":74941},283,[252,74943,74944],{"class":321},"        \u002F\u002F confirm()为确认框\n",[252,74946,74948],{"class":254,"line":74947},284,[252,74949,74950],{"class":321},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[252,74952,74954,74956,74958,74961,74963,74966],{"class":254,"line":74953},285,[252,74955,2636],{"class":258},[252,74957,1797],{"class":262},[252,74959,74960],{"class":2102},"confirm",[252,74962,263],{"class":262},[252,74964,74965],{"class":367},"'您确定要删除这条数据吗？'",[252,74967,74968],{"class":262},")) {\n",[252,74970,74972,74975,74977,74979,74981],{"class":254,"line":74971},286,[252,74973,74974],{"class":262},"          arr.",[252,74976,58150],{"class":2102},[252,74978,70534],{"class":262},[252,74980,480],{"class":311},[252,74982,269],{"class":262},[252,74984,74986],{"class":254,"line":74985},287,[252,74987,74988],{"class":321},"          \u002F\u002F 3.4 重新渲染页面\n",[252,74990,74992,74995],{"class":254,"line":74991},288,[252,74993,74994],{"class":2102},"          render",[252,74996,2115],{"class":262},[252,74998,75000],{"class":254,"line":74999},289,[252,75001,75002],{"class":321},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[252,75004,75006,75009,75011,75013,75015,75017,75019,75021,75023],{"class":254,"line":75005},290,[252,75007,75008],{"class":262},"          localStorage.",[252,75010,71794],{"class":2102},[252,75012,263],{"class":262},[252,75014,74830],{"class":367},[252,75016,12575],{"class":262},[252,75018,71804],{"class":311},[252,75020,821],{"class":262},[252,75022,71809],{"class":2102},[252,75024,74841],{"class":262},[252,75026,75028],{"class":254,"line":75027},291,[252,75029,2668],{"class":262},[252,75031,75033],{"class":254,"line":75032},292,[252,75034,52538],{"class":262},[252,75036,75038],{"class":254,"line":75037},293,[252,75039,2539],{"emptyLinePlaceholder":181},[252,75041,75043],{"class":254,"line":75042},294,[252,75044,33601],{"class":262},[252,75046,75048],{"class":254,"line":75047},295,[252,75049,2539],{"emptyLinePlaceholder":181},[252,75051,75053,75055,75057],{"class":254,"line":75052},296,[252,75054,52557],{"class":262},[252,75056,51953],{"class":51440},[252,75058,51447],{"class":262},[252,75060,75062,75064,75066],{"class":254,"line":75061},297,[252,75063,51925],{"class":262},[252,75065,51940],{"class":51440},[252,75067,51447],{"class":262},[252,75069,75071],{"class":254,"line":75070},298,[252,75072,2539],{"emptyLinePlaceholder":181},[252,75074,75076,75078,75080],{"class":254,"line":75075},299,[252,75077,51925],{"class":262},[252,75079,50775],{"class":51440},[252,75081,51447],{"class":262},[14,75083,75085],{"id":75084},"_36-正则表达式","3.6 正则表达式",[19,75087,75088],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75090,75091],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75093,75094],{},"正则表达式的作用：",[1270,75096,75097,75104,75110],{},[210,75098,75099,75100,75103],{},"表单验证（ ",[412,75101,75102],{},"匹配"," ）",[210,75105,75106,75107,75103],{},"过滤敏感词（ ",[412,75108,75109],{},"替换",[210,75111,75112,75113,75103],{},"字符串中提取我们想要的部分（ ",[412,75114,75115],{},"提取",[224,75117,75119],{"id":75118},"_361-语法","3.6.1 语法",[19,75121,75122],{},"正则表达式使用步骤：",[207,75124,75125,75128],{},[210,75126,75127],{},"定义规则",[210,75129,75130],{},"查找是否匹配",[19,75132,75133],{},"正则表达式里边不需要写引号",[19,75135,75136],{},[1601,75137],{"alt":169,"src":75138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75140,75141],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75143,75144],{},"reg.test(str)",[19,75146,75147],{},[1601,75148],{"alt":169,"src":75149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75151,75152],{},[1601,75153],{"alt":169,"src":75154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[224,75156,75158],{"id":75157},"_362-元字符","3.6.2 元字符",[207,75160,75161,75164,75167,75170,75177],{},[210,75162,75163],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[210,75165,75166],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[210,75168,75169],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[210,75171,75172,75173],{},"正则验证工具：",[501,75174,75175],{"href":75175,"rel":75176},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24004],[210,75178,75179],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22137,75181,75183],{"id":75182},"_3621-边界符","3.6.2.1 边界符",[19,75185,75186],{},[1601,75187],{"alt":169,"src":75188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75190,75191],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75193,75194],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75196,75197],{},"只匹配一次",[19,75199,75200],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22137,75202,75204],{"id":75203},"_3622-量词","3.6.2.2 量词",[19,75206,75207],{},[1601,75208],{"alt":169,"src":75209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75211,75212],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22137,75214,75216],{"id":75215},"_3623-元字符","3.6.2.3 元字符",[19,75218,75219],{},[1601,75220],{"alt":169,"src":75221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75223,75224],{},"匹配的是a或b或c []只选一个",[19,75226,75227],{},[1601,75228],{"alt":169,"src":75229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75231,75232],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75234,75235],{},[1601,75236],{"alt":169,"src":75237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75239,75240],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75242,75243],{},[1601,75244],{"alt":169,"src":75245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[244,75247,75249],{"className":50773,"code":75248,"language":50775,"meta":169,"style":169},"\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",[22,75250,75251,75261,75275,75279,75287,75301,75321,75333,75341,75345,75353,75361,75366,75397,75424,75452,75456,75461,75489,75520,75525,75530,75561,75593,75625,75629,75634,75665,75695,75725,75729,75734,75765,75796,75826,75856,75860,75865,75898,75902,75907,75938,75969,75973,75978,76009,76039,76070,76074,76079,76111,76142,76173,76200,76231,76263,76296,76327,76358,76390,76421,76429,76437,76441],{"__ignoreMap":169},[252,75252,75253,75255,75257,75259],{"class":254,"line":255},[252,75254,51437],{"class":262},[252,75256,51441],{"class":51440},[252,75258,51444],{"class":2102},[252,75260,51447],{"class":262},[252,75262,75263,75265,75267,75269,75271,75273],{"class":254,"line":170},[252,75264,1173],{"class":262},[252,75266,50775],{"class":51440},[252,75268,51456],{"class":2102},[252,75270,308],{"class":262},[252,75272,51461],{"class":367},[252,75274,51447],{"class":262},[252,75276,75277],{"class":254,"line":1318},[252,75278,2539],{"emptyLinePlaceholder":181},[252,75280,75281,75283,75285],{"class":254,"line":1333},[252,75282,1173],{"class":262},[252,75284,51474],{"class":51440},[252,75286,51447],{"class":262},[252,75288,75289,75291,75293,75295,75297,75299],{"class":254,"line":1339},[252,75290,52284],{"class":262},[252,75292,51484],{"class":51440},[252,75294,51487],{"class":2102},[252,75296,308],{"class":262},[252,75298,51492],{"class":367},[252,75300,51447],{"class":262},[252,75302,75303,75305,75307,75309,75311,75313,75315,75317,75319],{"class":254,"line":1353},[252,75304,52284],{"class":262},[252,75306,51484],{"class":51440},[252,75308,15060],{"class":2102},[252,75310,308],{"class":262},[252,75312,51531],{"class":367},[252,75314,51511],{"class":2102},[252,75316,308],{"class":262},[252,75318,51538],{"class":367},[252,75320,51447],{"class":262},[252,75322,75323,75325,75327,75329,75331],{"class":254,"line":1359},[252,75324,52284],{"class":262},[252,75326,51547],{"class":51440},[252,75328,51550],{"class":262},[252,75330,51547],{"class":51440},[252,75332,51447],{"class":262},[252,75334,75335,75337,75339],{"class":254,"line":1450},[252,75336,51925],{"class":262},[252,75338,51474],{"class":51440},[252,75340,51447],{"class":262},[252,75342,75343],{"class":254,"line":1456},[252,75344,2539],{"emptyLinePlaceholder":181},[252,75346,75347,75349,75351],{"class":254,"line":1468},[252,75348,1173],{"class":262},[252,75350,51940],{"class":51440},[252,75352,51447],{"class":262},[252,75354,75355,75357,75359],{"class":254,"line":1751},[252,75356,52284],{"class":262},[252,75358,51953],{"class":51440},[252,75360,51447],{"class":262},[252,75362,75363],{"class":254,"line":1756},[252,75364,75365],{"class":321},"    \u002F\u002F 元字符中\n",[252,75367,75368,75370,75372,75374,75376,75379,75381,75383,75386,75388,75391,75394],{"class":254,"line":1762},[252,75369,73893],{"class":262},[252,75371,58387],{"class":2102},[252,75373,263],{"class":262},[252,75375,847],{"class":367},[252,75377,75378],{"class":48117},"哈",[252,75380,847],{"class":367},[252,75382,821],{"class":262},[252,75384,75385],{"class":2102},"test",[252,75387,263],{"class":262},[252,75389,75390],{"class":367},"'哈'",[252,75392,75393],{"class":262},"))  ",[252,75395,75396],{"class":321},"\u002F\u002Ftrue\n",[252,75398,75399,75401,75403,75405,75407,75409,75411,75413,75415,75417,75420,75422],{"class":254,"line":1767},[252,75400,73893],{"class":262},[252,75402,58387],{"class":2102},[252,75404,263],{"class":262},[252,75406,847],{"class":367},[252,75408,75378],{"class":48117},[252,75410,847],{"class":367},[252,75412,821],{"class":262},[252,75414,75385],{"class":2102},[252,75416,263],{"class":262},[252,75418,75419],{"class":367},"'哈哈'",[252,75421,75393],{"class":262},[252,75423,75396],{"class":321},[252,75425,75426,75428,75430,75432,75434,75436,75438,75440,75442,75444,75447,75450],{"class":254,"line":1781},[252,75427,73893],{"class":262},[252,75429,58387],{"class":2102},[252,75431,263],{"class":262},[252,75433,847],{"class":367},[252,75435,75378],{"class":48117},[252,75437,847],{"class":367},[252,75439,821],{"class":262},[252,75441,75385],{"class":2102},[252,75443,263],{"class":262},[252,75445,75446],{"class":367},"'二哈'",[252,75448,75449],{"class":262},"))   ",[252,75451,75396],{"class":321},[252,75453,75454],{"class":254,"line":1786},[252,75455,2539],{"emptyLinePlaceholder":181},[252,75457,75458],{"class":254,"line":1792},[252,75459,75460],{"class":321},"    \u002F\u002F 1.边界符\n",[252,75462,75463,75465,75467,75469,75471,75473,75475,75477,75479,75481,75483,75485,75487],{"class":254,"line":1813},[252,75464,73893],{"class":262},[252,75466,58387],{"class":2102},[252,75468,263],{"class":262},[252,75470,847],{"class":367},[252,75472,1229],{"class":258},[252,75474,75378],{"class":48117},[252,75476,847],{"class":367},[252,75478,821],{"class":262},[252,75480,75385],{"class":2102},[252,75482,263],{"class":262},[252,75484,75390],{"class":367},[252,75486,75393],{"class":262},[252,75488,75396],{"class":321},[252,75490,75491,75493,75495,75497,75499,75501,75503,75505,75507,75509,75511,75513,75515,75517],{"class":254,"line":1818},[252,75492,73893],{"class":262},[252,75494,58387],{"class":2102},[252,75496,263],{"class":262},[252,75498,847],{"class":367},[252,75500,1229],{"class":258},[252,75502,75378],{"class":48117},[252,75504,565],{"class":258},[252,75506,847],{"class":367},[252,75508,821],{"class":262},[252,75510,75385],{"class":2102},[252,75512,263],{"class":262},[252,75514,75419],{"class":367},[252,75516,75393],{"class":262},[252,75518,75519],{"class":321},"\u002F\u002Ffalse\n",[252,75521,75522],{"class":254,"line":1832},[252,75523,75524],{"class":321},"    \u002F\u002F 2.量词\n",[252,75526,75527],{"class":254,"line":1837},[252,75528,75529],{"class":321},"    \u002F\u002F 量词 * 类似于 >= 0\n",[252,75531,75532,75534,75536,75538,75540,75542,75544,75547,75549,75551,75553,75555,75557,75559],{"class":254,"line":1866},[252,75533,73893],{"class":262},[252,75535,58387],{"class":2102},[252,75537,263],{"class":262},[252,75539,847],{"class":367},[252,75541,1229],{"class":258},[252,75543,75378],{"class":48117},[252,75545,75546],{"class":258},"*$",[252,75548,847],{"class":367},[252,75550,821],{"class":262},[252,75552,75385],{"class":2102},[252,75554,263],{"class":262},[252,75556,75419],{"class":367},[252,75558,75393],{"class":262},[252,75560,75396],{"class":321},[252,75562,75563,75565,75567,75569,75571,75573,75575,75577,75579,75581,75583,75585,75588,75590],{"class":254,"line":1871},[252,75564,73893],{"class":262},[252,75566,58387],{"class":2102},[252,75568,263],{"class":262},[252,75570,847],{"class":367},[252,75572,1229],{"class":258},[252,75574,75378],{"class":48117},[252,75576,75546],{"class":258},[252,75578,847],{"class":367},[252,75580,821],{"class":262},[252,75582,75385],{"class":2102},[252,75584,263],{"class":262},[252,75586,75587],{"class":367},"'二哈好傻'",[252,75589,75393],{"class":262},[252,75591,75592],{"class":321},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[252,75594,75595,75597,75599,75601,75603,75605,75607,75609,75611,75613,75615,75617,75620,75622],{"class":254,"line":1888},[252,75596,73893],{"class":262},[252,75598,58387],{"class":2102},[252,75600,263],{"class":262},[252,75602,847],{"class":367},[252,75604,1229],{"class":258},[252,75606,75378],{"class":48117},[252,75608,75546],{"class":258},[252,75610,847],{"class":367},[252,75612,821],{"class":262},[252,75614,75385],{"class":2102},[252,75616,263],{"class":262},[252,75618,75619],{"class":367},"'哈好哈'",[252,75621,75449],{"class":262},[252,75623,75624],{"class":321},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[252,75626,75627],{"class":254,"line":1893},[252,75628,2539],{"emptyLinePlaceholder":181},[252,75630,75631],{"class":254,"line":1898},[252,75632,75633],{"class":321},"    \u002F\u002F +类似于>=1\n",[252,75635,75636,75638,75640,75642,75644,75646,75648,75651,75653,75655,75657,75659,75661,75663],{"class":254,"line":1903},[252,75637,73893],{"class":262},[252,75639,58387],{"class":2102},[252,75641,263],{"class":262},[252,75643,847],{"class":367},[252,75645,1229],{"class":258},[252,75647,75378],{"class":48117},[252,75649,75650],{"class":258},"+$",[252,75652,847],{"class":367},[252,75654,821],{"class":262},[252,75656,75385],{"class":2102},[252,75658,263],{"class":262},[252,75660,75419],{"class":367},[252,75662,75393],{"class":262},[252,75664,75396],{"class":321},[252,75666,75667,75669,75671,75673,75675,75677,75679,75681,75683,75685,75687,75689,75691,75693],{"class":254,"line":1917},[252,75668,73893],{"class":262},[252,75670,58387],{"class":2102},[252,75672,263],{"class":262},[252,75674,847],{"class":367},[252,75676,1229],{"class":258},[252,75678,75378],{"class":48117},[252,75680,75650],{"class":258},[252,75682,847],{"class":367},[252,75684,821],{"class":262},[252,75686,75385],{"class":2102},[252,75688,263],{"class":262},[252,75690,75587],{"class":367},[252,75692,75393],{"class":262},[252,75694,75592],{"class":321},[252,75696,75697,75699,75701,75703,75705,75707,75709,75711,75713,75715,75717,75719,75721,75723],{"class":254,"line":1922},[252,75698,73893],{"class":262},[252,75700,58387],{"class":2102},[252,75702,263],{"class":262},[252,75704,847],{"class":367},[252,75706,1229],{"class":258},[252,75708,75378],{"class":48117},[252,75710,75650],{"class":258},[252,75712,847],{"class":367},[252,75714,821],{"class":262},[252,75716,75385],{"class":2102},[252,75718,263],{"class":262},[252,75720,75619],{"class":367},[252,75722,75449],{"class":262},[252,75724,75519],{"class":321},[252,75726,75727],{"class":254,"line":2716},[252,75728,2539],{"emptyLinePlaceholder":181},[252,75730,75731],{"class":254,"line":2730},[252,75732,75733],{"class":321},"    \u002F\u002F ?类似于0次或一次\n",[252,75735,75736,75738,75740,75742,75744,75746,75749,75751,75753,75755,75757,75759,75761,75763],{"class":254,"line":2738},[252,75737,73893],{"class":262},[252,75739,58387],{"class":2102},[252,75741,263],{"class":262},[252,75743,847],{"class":367},[252,75745,1229],{"class":258},[252,75747,75748],{"class":48117},"哈？",[252,75750,565],{"class":258},[252,75752,847],{"class":367},[252,75754,821],{"class":262},[252,75756,75385],{"class":2102},[252,75758,263],{"class":262},[252,75760,74368],{"class":367},[252,75762,75449],{"class":262},[252,75764,75396],{"class":321},[252,75766,75767,75769,75771,75773,75775,75777,75779,75782,75784,75786,75788,75790,75792,75794],{"class":254,"line":2743},[252,75768,73893],{"class":262},[252,75770,58387],{"class":2102},[252,75772,263],{"class":262},[252,75774,847],{"class":367},[252,75776,1229],{"class":258},[252,75778,75378],{"class":48117},[252,75780,75781],{"class":258},"?$",[252,75783,847],{"class":367},[252,75785,821],{"class":262},[252,75787,75385],{"class":2102},[252,75789,263],{"class":262},[252,75791,75419],{"class":367},[252,75793,75393],{"class":262},[252,75795,75519],{"class":321},[252,75797,75798,75800,75802,75804,75806,75808,75810,75812,75814,75816,75818,75820,75822,75824],{"class":254,"line":2749},[252,75799,73893],{"class":262},[252,75801,58387],{"class":2102},[252,75803,263],{"class":262},[252,75805,847],{"class":367},[252,75807,1229],{"class":258},[252,75809,75378],{"class":48117},[252,75811,75781],{"class":258},[252,75813,847],{"class":367},[252,75815,821],{"class":262},[252,75817,75385],{"class":2102},[252,75819,263],{"class":262},[252,75821,75587],{"class":367},[252,75823,75393],{"class":262},[252,75825,75592],{"class":321},[252,75827,75828,75830,75832,75834,75836,75838,75840,75842,75844,75846,75848,75850,75852,75854],{"class":254,"line":2755},[252,75829,73893],{"class":262},[252,75831,58387],{"class":2102},[252,75833,263],{"class":262},[252,75835,847],{"class":367},[252,75837,1229],{"class":258},[252,75839,75378],{"class":48117},[252,75841,75781],{"class":258},[252,75843,847],{"class":367},[252,75845,821],{"class":262},[252,75847,75385],{"class":2102},[252,75849,263],{"class":262},[252,75851,75619],{"class":367},[252,75853,75393],{"class":262},[252,75855,75519],{"class":321},[252,75857,75858],{"class":254,"line":2760},[252,75859,2539],{"emptyLinePlaceholder":181},[252,75861,75862],{"class":254,"line":8088},[252,75863,75864],{"class":321},"    \u002F\u002F {n}写几，就必须出现几次\n",[252,75866,75867,75869,75871,75873,75875,75877,75879,75882,75884,75886,75888,75890,75893,75896],{"class":254,"line":8112},[252,75868,73893],{"class":262},[252,75870,58387],{"class":2102},[252,75872,263],{"class":262},[252,75874,847],{"class":367},[252,75876,1229],{"class":258},[252,75878,75378],{"class":48117},[252,75880,75881],{"class":258},"{4}$",[252,75883,847],{"class":367},[252,75885,821],{"class":262},[252,75887,75385],{"class":2102},[252,75889,263],{"class":262},[252,75891,75892],{"class":367},"'哈哈哈哈'",[252,75894,75895],{"class":262},")) ",[252,75897,75396],{"class":321},[252,75899,75900],{"class":254,"line":8117},[252,75901,2539],{"emptyLinePlaceholder":181},[252,75903,75904],{"class":254,"line":8123},[252,75905,75906],{"class":321},"    \u002F\u002F {n,}大于等于n次\n",[252,75908,75909,75911,75913,75915,75917,75919,75921,75924,75926,75928,75930,75932,75934,75936],{"class":254,"line":8150},[252,75910,73893],{"class":262},[252,75912,58387],{"class":2102},[252,75914,263],{"class":262},[252,75916,847],{"class":367},[252,75918,1229],{"class":258},[252,75920,75378],{"class":48117},[252,75922,75923],{"class":258},"{4,}$",[252,75925,847],{"class":367},[252,75927,821],{"class":262},[252,75929,75385],{"class":2102},[252,75931,263],{"class":262},[252,75933,75892],{"class":367},[252,75935,75895],{"class":262},[252,75937,75396],{"class":321},[252,75939,75940,75942,75944,75946,75948,75950,75952,75954,75956,75958,75960,75962,75965,75967],{"class":254,"line":8155},[252,75941,73893],{"class":262},[252,75943,58387],{"class":2102},[252,75945,263],{"class":262},[252,75947,847],{"class":367},[252,75949,1229],{"class":258},[252,75951,75378],{"class":48117},[252,75953,75923],{"class":258},[252,75955,847],{"class":367},[252,75957,821],{"class":262},[252,75959,75385],{"class":2102},[252,75961,263],{"class":262},[252,75963,75964],{"class":367},"'哈哈哈哈哈'",[252,75966,75895],{"class":262},[252,75968,75396],{"class":321},[252,75970,75971],{"class":254,"line":8161},[252,75972,2539],{"emptyLinePlaceholder":181},[252,75974,75975],{"class":254,"line":8173},[252,75976,75977],{"class":321},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[252,75979,75980,75982,75984,75986,75988,75990,75992,75995,75997,75999,76001,76003,76005,76007],{"class":254,"line":8185},[252,75981,73893],{"class":262},[252,75983,58387],{"class":2102},[252,75985,263],{"class":262},[252,75987,847],{"class":367},[252,75989,1229],{"class":258},[252,75991,75378],{"class":48117},[252,75993,75994],{"class":258},"{4,6}$",[252,75996,847],{"class":367},[252,75998,821],{"class":262},[252,76000,75385],{"class":2102},[252,76002,263],{"class":262},[252,76004,75892],{"class":367},[252,76006,75895],{"class":262},[252,76008,75396],{"class":321},[252,76010,76011,76013,76015,76017,76019,76021,76023,76025,76027,76029,76031,76033,76035,76037],{"class":254,"line":8197},[252,76012,73893],{"class":262},[252,76014,58387],{"class":2102},[252,76016,263],{"class":262},[252,76018,847],{"class":367},[252,76020,1229],{"class":258},[252,76022,75378],{"class":48117},[252,76024,75994],{"class":258},[252,76026,847],{"class":367},[252,76028,821],{"class":262},[252,76030,75385],{"class":2102},[252,76032,263],{"class":262},[252,76034,75964],{"class":367},[252,76036,75895],{"class":262},[252,76038,75396],{"class":321},[252,76040,76041,76043,76045,76047,76049,76051,76053,76055,76057,76059,76061,76063,76066,76068],{"class":254,"line":9856},[252,76042,73893],{"class":262},[252,76044,58387],{"class":2102},[252,76046,263],{"class":262},[252,76048,847],{"class":367},[252,76050,1229],{"class":258},[252,76052,75378],{"class":48117},[252,76054,75994],{"class":258},[252,76056,847],{"class":367},[252,76058,821],{"class":262},[252,76060,75385],{"class":2102},[252,76062,263],{"class":262},[252,76064,76065],{"class":367},"'哈哈哈哈哈哈哈'",[252,76067,75895],{"class":262},[252,76069,75519],{"class":321},[252,76071,76072],{"class":254,"line":9881},[252,76073,2539],{"emptyLinePlaceholder":181},[252,76075,76076],{"class":254,"line":9904},[252,76077,76078],{"class":321},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[252,76080,76081,76083,76085,76087,76089,76091,76094,76096,76098,76100,76102,76104,76107,76109],{"class":254,"line":9928},[252,76082,73893],{"class":262},[252,76084,58387],{"class":2102},[252,76086,263],{"class":262},[252,76088,847],{"class":367},[252,76090,1229],{"class":258},[252,76092,76093],{"class":311},"[abc]",[252,76095,565],{"class":258},[252,76097,847],{"class":367},[252,76099,821],{"class":262},[252,76101,75385],{"class":2102},[252,76103,263],{"class":262},[252,76105,76106],{"class":367},"'a'",[252,76108,75393],{"class":262},[252,76110,75396],{"class":321},[252,76112,76113,76115,76117,76119,76121,76123,76125,76127,76129,76131,76133,76135,76138,76140],{"class":254,"line":9933},[252,76114,73893],{"class":262},[252,76116,58387],{"class":2102},[252,76118,263],{"class":262},[252,76120,847],{"class":367},[252,76122,1229],{"class":258},[252,76124,76093],{"class":311},[252,76126,565],{"class":258},[252,76128,847],{"class":367},[252,76130,821],{"class":262},[252,76132,75385],{"class":2102},[252,76134,263],{"class":262},[252,76136,76137],{"class":367},"'b'",[252,76139,75393],{"class":262},[252,76141,75396],{"class":321},[252,76143,76144,76146,76148,76150,76152,76154,76156,76158,76160,76162,76164,76166,76169,76171],{"class":254,"line":9938},[252,76145,73893],{"class":262},[252,76147,58387],{"class":2102},[252,76149,263],{"class":262},[252,76151,847],{"class":367},[252,76153,1229],{"class":258},[252,76155,76093],{"class":311},[252,76157,565],{"class":258},[252,76159,847],{"class":367},[252,76161,821],{"class":262},[252,76163,75385],{"class":2102},[252,76165,263],{"class":262},[252,76167,76168],{"class":367},"'c'",[252,76170,75393],{"class":262},[252,76172,75396],{"class":321},[252,76174,76175,76177,76179,76181,76183,76185,76187,76189,76191,76193,76196,76198],{"class":254,"line":9943},[252,76176,73893],{"class":262},[252,76178,58387],{"class":2102},[252,76180,263],{"class":262},[252,76182,847],{"class":367},[252,76184,76093],{"class":311},[252,76186,847],{"class":367},[252,76188,821],{"class":262},[252,76190,75385],{"class":2102},[252,76192,263],{"class":262},[252,76194,76195],{"class":367},"'ab'",[252,76197,75393],{"class":262},[252,76199,75396],{"class":321},[252,76201,76202,76204,76206,76208,76210,76212,76214,76216,76218,76220,76222,76224,76226,76228],{"class":254,"line":9952},[252,76203,73893],{"class":262},[252,76205,58387],{"class":2102},[252,76207,263],{"class":262},[252,76209,847],{"class":367},[252,76211,1229],{"class":258},[252,76213,76093],{"class":311},[252,76215,565],{"class":258},[252,76217,847],{"class":367},[252,76219,821],{"class":262},[252,76221,75385],{"class":2102},[252,76223,263],{"class":262},[252,76225,76195],{"class":367},[252,76227,75393],{"class":262},[252,76229,76230],{"class":321},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[252,76232,76233,76235,76237,76239,76241,76243,76245,76248,76250,76252,76254,76256,76258,76260],{"class":254,"line":9957},[252,76234,73893],{"class":262},[252,76236,58387],{"class":2102},[252,76238,263],{"class":262},[252,76240,847],{"class":367},[252,76242,1229],{"class":258},[252,76244,76093],{"class":311},[252,76246,76247],{"class":258},"{2}$",[252,76249,847],{"class":367},[252,76251,821],{"class":262},[252,76253,75385],{"class":2102},[252,76255,263],{"class":262},[252,76257,76195],{"class":367},[252,76259,75393],{"class":262},[252,76261,76262],{"class":321},"\u002F\u002Ftrue   可以选两个\n",[252,76264,76265,76267,76269,76271,76273,76275,76278,76280,76282,76284,76286,76288,76291,76293],{"class":254,"line":9963},[252,76266,73893],{"class":262},[252,76268,58387],{"class":2102},[252,76270,263],{"class":262},[252,76272,847],{"class":367},[252,76274,1229],{"class":258},[252,76276,76277],{"class":311},"[a-z]",[252,76279,565],{"class":258},[252,76281,847],{"class":367},[252,76283,821],{"class":262},[252,76285,75385],{"class":2102},[252,76287,263],{"class":262},[252,76289,76290],{"class":367},"'p'",[252,76292,75449],{"class":262},[252,76294,76295],{"class":321},"\u002F\u002Ftrue   依然只能选一个\n",[252,76297,76298,76300,76302,76304,76306,76308,76311,76313,76315,76317,76319,76321,76323,76325],{"class":254,"line":9984},[252,76299,73893],{"class":262},[252,76301,58387],{"class":2102},[252,76303,263],{"class":262},[252,76305,847],{"class":367},[252,76307,1229],{"class":258},[252,76309,76310],{"class":311},"[A-Z]",[252,76312,565],{"class":258},[252,76314,847],{"class":367},[252,76316,821],{"class":262},[252,76318,75385],{"class":2102},[252,76320,263],{"class":262},[252,76322,76290],{"class":367},[252,76324,75449],{"class":262},[252,76326,75519],{"class":321},[252,76328,76329,76331,76333,76335,76337,76339,76341,76343,76345,76347,76349,76351,76354,76356],{"class":254,"line":9990},[252,76330,73893],{"class":262},[252,76332,58387],{"class":2102},[252,76334,263],{"class":262},[252,76336,847],{"class":367},[252,76338,1229],{"class":258},[252,76340,76310],{"class":311},[252,76342,565],{"class":258},[252,76344,847],{"class":367},[252,76346,821],{"class":262},[252,76348,75385],{"class":2102},[252,76350,263],{"class":262},[252,76352,76353],{"class":367},"'P'",[252,76355,75449],{"class":262},[252,76357,75396],{"class":321},[252,76359,76360,76362,76364,76366,76368,76370,76373,76375,76377,76379,76381,76383,76386,76388],{"class":254,"line":10004},[252,76361,73893],{"class":262},[252,76363,58387],{"class":2102},[252,76365,263],{"class":262},[252,76367,847],{"class":367},[252,76369,1229],{"class":258},[252,76371,76372],{"class":311},"[0-9]",[252,76374,565],{"class":258},[252,76376,847],{"class":367},[252,76378,821],{"class":262},[252,76380,75385],{"class":2102},[252,76382,263],{"class":262},[252,76384,76385],{"class":367},"'0'",[252,76387,75449],{"class":262},[252,76389,75396],{"class":321},[252,76391,76392,76394,76396,76398,76400,76402,76405,76407,76409,76411,76413,76415,76417,76419],{"class":254,"line":10010},[252,76393,73893],{"class":262},[252,76395,58387],{"class":2102},[252,76397,263],{"class":262},[252,76399,847],{"class":367},[252,76401,1229],{"class":258},[252,76403,76404],{"class":311},"[a-zA-Z0-9]",[252,76406,565],{"class":258},[252,76408,847],{"class":367},[252,76410,821],{"class":262},[252,76412,75385],{"class":2102},[252,76414,263],{"class":262},[252,76416,76290],{"class":367},[252,76418,75393],{"class":262},[252,76420,75396],{"class":321},[252,76422,76423,76425,76427],{"class":254,"line":10037},[252,76424,52557],{"class":262},[252,76426,51953],{"class":51440},[252,76428,51447],{"class":262},[252,76430,76431,76433,76435],{"class":254,"line":10046},[252,76432,51925],{"class":262},[252,76434,51940],{"class":51440},[252,76436,51447],{"class":262},[252,76438,76439],{"class":254,"line":10052},[252,76440,2539],{"emptyLinePlaceholder":181},[252,76442,76443,76445,76447],{"class":254,"line":10060},[252,76444,51925],{"class":262},[252,76446,50775],{"class":51440},[252,76448,51447],{"class":262},[22137,76450,76452],{"id":76451},"_3624-修饰符","3.6.2.4 修饰符",[19,76454,76455],{},[1601,76456],{"alt":169,"src":76457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76459,76460],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76462,76463],{},[1601,76464],{"alt":169,"src":76465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[244,76467,76469],{"className":50773,"code":76468,"language":50775,"meta":169,"style":169},"\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",[22,76470,76471,76481,76495,76503,76517,76537,76549,76557,76565,76573,76605,76636,76641,76673,76684,76717,76726,76734,76742],{"__ignoreMap":169},[252,76472,76473,76475,76477,76479],{"class":254,"line":255},[252,76474,51437],{"class":262},[252,76476,51441],{"class":51440},[252,76478,51444],{"class":2102},[252,76480,51447],{"class":262},[252,76482,76483,76485,76487,76489,76491,76493],{"class":254,"line":170},[252,76484,1173],{"class":262},[252,76486,50775],{"class":51440},[252,76488,51456],{"class":2102},[252,76490,308],{"class":262},[252,76492,51461],{"class":367},[252,76494,51447],{"class":262},[252,76496,76497,76499,76501],{"class":254,"line":1318},[252,76498,1173],{"class":262},[252,76500,51474],{"class":51440},[252,76502,51447],{"class":262},[252,76504,76505,76507,76509,76511,76513,76515],{"class":254,"line":1333},[252,76506,52284],{"class":262},[252,76508,51484],{"class":51440},[252,76510,51487],{"class":2102},[252,76512,308],{"class":262},[252,76514,51492],{"class":367},[252,76516,51447],{"class":262},[252,76518,76519,76521,76523,76525,76527,76529,76531,76533,76535],{"class":254,"line":1339},[252,76520,52284],{"class":262},[252,76522,51484],{"class":51440},[252,76524,15060],{"class":2102},[252,76526,308],{"class":262},[252,76528,51531],{"class":367},[252,76530,51511],{"class":2102},[252,76532,308],{"class":262},[252,76534,51538],{"class":367},[252,76536,51447],{"class":262},[252,76538,76539,76541,76543,76545,76547],{"class":254,"line":1353},[252,76540,52284],{"class":262},[252,76542,51547],{"class":51440},[252,76544,51550],{"class":262},[252,76546,51547],{"class":51440},[252,76548,51447],{"class":262},[252,76550,76551,76553,76555],{"class":254,"line":1359},[252,76552,51925],{"class":262},[252,76554,51474],{"class":51440},[252,76556,51447],{"class":262},[252,76558,76559,76561,76563],{"class":254,"line":1450},[252,76560,1173],{"class":262},[252,76562,51940],{"class":51440},[252,76564,51447],{"class":262},[252,76566,76567,76569,76571],{"class":254,"line":1456},[252,76568,52284],{"class":262},[252,76570,51953],{"class":51440},[252,76572,51447],{"class":262},[252,76574,76575,76577,76579,76581,76583,76585,76588,76590,76592,76594,76596,76598,76601,76603],{"class":254,"line":1468},[252,76576,73893],{"class":262},[252,76578,58387],{"class":2102},[252,76580,263],{"class":262},[252,76582,847],{"class":367},[252,76584,1229],{"class":258},[252,76586,76587],{"class":48117},"java",[252,76589,565],{"class":258},[252,76591,847],{"class":367},[252,76593,821],{"class":262},[252,76595,75385],{"class":2102},[252,76597,263],{"class":262},[252,76599,76600],{"class":367},"'java'",[252,76602,75895],{"class":262},[252,76604,75396],{"class":321},[252,76606,76607,76609,76611,76613,76615,76617,76619,76621,76623,76625,76627,76629,76632,76634],{"class":254,"line":1751},[252,76608,73893],{"class":262},[252,76610,58387],{"class":2102},[252,76612,263],{"class":262},[252,76614,847],{"class":367},[252,76616,1229],{"class":258},[252,76618,76587],{"class":48117},[252,76620,565],{"class":258},[252,76622,847],{"class":367},[252,76624,821],{"class":262},[252,76626,75385],{"class":2102},[252,76628,263],{"class":262},[252,76630,76631],{"class":367},"'Java'",[252,76633,75895],{"class":262},[252,76635,75519],{"class":321},[252,76637,76638],{"class":254,"line":1756},[252,76639,76640],{"class":321},"    \u002F\u002F 不区分大小写、\n",[252,76642,76643,76645,76647,76649,76651,76653,76655,76657,76659,76661,76663,76665,76667,76669,76671],{"class":254,"line":1762},[252,76644,73893],{"class":262},[252,76646,58387],{"class":2102},[252,76648,263],{"class":262},[252,76650,847],{"class":367},[252,76652,1229],{"class":258},[252,76654,76587],{"class":48117},[252,76656,565],{"class":258},[252,76658,847],{"class":367},[252,76660,704],{"class":258},[252,76662,821],{"class":262},[252,76664,75385],{"class":2102},[252,76666,263],{"class":262},[252,76668,76631],{"class":367},[252,76670,75895],{"class":262},[252,76672,75396],{"class":321},[252,76674,76675,76677,76679,76681],{"class":254,"line":1767},[252,76676,11361],{"class":258},[252,76678,74059],{"class":311},[252,76680,13704],{"class":258},[252,76682,76683],{"class":367}," 'java是一门编程语言，学完java工资很高'\n",[252,76685,76686,76688,76691,76693,76696,76699,76701,76703,76705,76707,76710,76712,76715],{"class":254,"line":1781},[252,76687,11361],{"class":258},[252,76689,76690],{"class":311}," result",[252,76692,13704],{"class":258},[252,76694,76695],{"class":262}," str.",[252,76697,76698],{"class":2102},"replace",[252,76700,263],{"class":262},[252,76702,847],{"class":367},[252,76704,76587],{"class":48117},[252,76706,847],{"class":367},[252,76708,76709],{"class":258},"ig",[252,76711,12575],{"class":262},[252,76713,76714],{"class":367},"'前端'",[252,76716,269],{"class":262},[252,76718,76719,76721,76723],{"class":254,"line":1786},[252,76720,73893],{"class":262},[252,76722,58387],{"class":2102},[252,76724,76725],{"class":262},"(result)\n",[252,76727,76728,76730,76732],{"class":254,"line":1792},[252,76729,52557],{"class":262},[252,76731,51953],{"class":51440},[252,76733,51447],{"class":262},[252,76735,76736,76738,76740],{"class":254,"line":1813},[252,76737,51925],{"class":262},[252,76739,51940],{"class":51440},[252,76741,51447],{"class":262},[252,76743,76744,76746,76748],{"class":254,"line":1818},[252,76745,51925],{"class":262},[252,76747,50775],{"class":51440},[252,76749,51447],{"class":262},[5266,76751,76752],{},"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":169,"searchDepth":170,"depth":170,"links":76754},[76755,76765,76777,76794,76801,76809],{"id":53500,"depth":170,"text":53501,"children":76756},[76757,76758,76759,76760,76761,76762,76763,76764],{"id":53504,"depth":1318,"text":53505},{"id":53537,"depth":1318,"text":53538},{"id":53576,"depth":1318,"text":53577},{"id":53734,"depth":1318,"text":53735},{"id":53782,"depth":1318,"text":53783},{"id":53919,"depth":1318,"text":53920},{"id":54241,"depth":1318,"text":54242},{"id":57229,"depth":1318,"text":57230},{"id":57257,"depth":170,"text":57258,"children":76766},[76767,76768,76769,76770,76771,76772,76773,76774,76775,76776],{"id":57261,"depth":1318,"text":57262},{"id":57284,"depth":1318,"text":57285},{"id":58199,"depth":1318,"text":58200},{"id":58889,"depth":1318,"text":58890},{"id":59171,"depth":1318,"text":59172},{"id":63332,"depth":1318,"text":63333},{"id":63502,"depth":1318,"text":63503},{"id":63630,"depth":1318,"text":63631},{"id":63655,"depth":1318,"text":63656},{"id":65044,"depth":1318,"text":65045},{"id":66197,"depth":170,"text":66198,"children":76778},[76779,76780,76781,76782,76783,76784,76785,76786,76787,76788,76789,76790,76791,76792,76793],{"id":66201,"depth":1318,"text":66202},{"id":66855,"depth":1318,"text":66856},{"id":68550,"depth":1318,"text":68551},{"id":68591,"depth":1318,"text":68592},{"id":68633,"depth":1318,"text":68634},{"id":68647,"depth":1318,"text":68648},{"id":68696,"depth":1318,"text":68697},{"id":68708,"depth":1318,"text":68709},{"id":68723,"depth":1318,"text":68724},{"id":68759,"depth":1318,"text":68760},{"id":68840,"depth":1318,"text":68841},{"id":68968,"depth":1318,"text":68969},{"id":68980,"depth":1318,"text":68981},{"id":68999,"depth":1318,"text":69000},{"id":71110,"depth":1318,"text":71111},{"id":71129,"depth":170,"text":71130,"children":76795},[76796,76797,76798,76799,76800],{"id":71150,"depth":1318,"text":71151},{"id":71170,"depth":1318,"text":71171},{"id":71219,"depth":1318,"text":71220},{"id":71344,"depth":1318,"text":71345},{"id":71525,"depth":1318,"text":71526},{"id":71543,"depth":170,"text":71544,"children":76802},[76803,76804,76805,76806,76807,76808],{"id":71558,"depth":1318,"text":71559},{"id":71617,"depth":1318,"text":71618},{"id":71641,"depth":1318,"text":71642},{"id":71961,"depth":1318,"text":71962},{"id":71993,"depth":1318,"text":71994},{"id":72016,"depth":1318,"text":72017},{"id":75084,"depth":170,"text":75085,"children":76810},[76811,76812],{"id":75118,"depth":1318,"text":75119},{"id":75157,"depth":1318,"text":75158},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53472,"description":178},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76819,"title":76820,"body":76821,"description":178,"extension":179,"meta":92956,"navigation":181,"path":92957,"seo":92958,"stem":92959,"__hash__":92960},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76822,"toc":92892},[76823,76826,76829,76833,76837,76842,76847,76858,76862,76867,76870,76874,76877,76882,76886,76890,76893,76898,76901,76905,76908,76916,76919,76923,76928,76933,76936,76940,76945,76950,76953,76957,76962,76965,76970,76973,76978,76981,76986,76991,76994,76997,77001,77006,77011,77014,77018,77022,77025,77028,77031,77035,77039,77044,77049,77052,77056,77061,77066,77069,77072,77075,77078,77081,77084,77087,77090,77093,77098,77102,77107,77112,77115,77118,77121,77124,77127,77130,77133,77136,77140,77144,77147,77150,77153,77158,77160,77163,77166,77169,77172,77175,77178,77181,77184,77187,77190,77193,77196,77199,77204,77209,77214,77217,77221,77224,77229,77233,77235,77246,77251,77352,77355,77358,77361,77364,77367,77370,77373,77376,77378,77381,77384,77387,77389,77392,77394,77397,77400,77403,77406,77409,77412,77414,77417,77419,77421,77424,77428,77432,77435,77438,77441,77444,77447,77450,77453,77456,77459,77464,77584,77587,77590,77595,77598,77601,77604,77607,77612,77615,77618,77621,77624,77629,77632,77732,77797,77871,77875,77878,77881,77885,77888,77902,77931,77934,77937,77940,77943,77946,77949,77952,77954,77957,77960,77963,77966,77970,77975,77979,77984,78059,78062,78245,78248,78251,78254,78257,78260,78262,78265,78268,78271,78274,78277,78280,78282,78286,78289,78294,78297,78300,78303,78306,78308,78313,78316,78319,78322,78325,78327,78332,78335,78338,78340,78342,78345,78349,78352,78355,78360,78363,78366,78369,78419,78424,78428,78433,78436,78505,78508,78517,78521,78526,78529,78532,78540,78543,78560,80362,80366,80370,80375,80378,80382,80388,80394,80546,80551,80556,80559,80562,80565,80568,80571,80574,80577,80580,80583,80586,80589,80592,80597,80601,80604,80615,80619,80624,80627,80630,80633,80636,80639,80641,80644,80647,80650,80653,80655,80672,80675,80679,80682,80687,80692,80695,80698,80702,80705,80708,80717,80720,80724,80727,80732,80737,80804,80808,80811,80814,80819,80824,80910,80915,80919,80922,80925,80940,80943,80948,80952,80957,81066,81069,81080,81230,81234,81239,81348,81352,81357,81362,81367,81370,81377,81397,81433,81597,81602,81605,81610,81617,81620,81623,81626,81685,81741,81797,81801,81806,82121,82124,82128,82131,82136,82245,82250,82254,82259,82263,82334,82338,82340,82343,82346,82384,82660,82664,82680,82746,82780,82784,82787,82792,82821,82828,82837,82842,82857,82862,82871,82874,83011,83015,83077,83081,83086,83331,83335,83340,83343,83346,83349,83352,83356,83361,84942,84946,84950,84956,84959,84964,84968,84971,84976,84979,84990,84994,84999,85003,85008,85013,85016,85021,85025,85029,85032,85037,85042,85045,85048,85051,85173,85178,85280,85283,85286,85290,85295,85467,85472,85476,85479,85484,85550,85555,85558,85689,85692,85697,85700,85703,85794,85799,85802,85805,85808,85811,85816,85821,85824,85829,85834,85839,85843,85846,85849,85854,85859,85864,85869,85923,85926,85929,85934,85937,85940,85945,85950,85955,85959,85964,85978,85983,85986,85991,85995,86000,86005,86010,86015,86020,86025,86030,86035,86038,86042,86047,86050,86053,86056,86061,86066,86069,86072,86076,86079,86082,86087,86092,86097,86102,86105,86110,86115,86176,86181,86184,86189,87430,87435,87439,87443,87448,87451,87456,87461,87464,87469,87471,87476,87480,87483,87486,87497,87501,87506,87511,87566,87571,87576,87581,87792,87797,87801,87806,87809,87811,87814,87817,88264,88269,88276,88282,88285,88288,88552,88557,88561,88826,88831,88835,88840,88845,88850,88855,89186,89189,89194,89199,89202,89206,89210,89215,89220,89225,89230,89235,89240,89244,89247,89252,89257,89260,89334,89339,89344,89349,89351,89354,89724,89729,89734,89739,89742,89745,89847,89852,89857,89960,89964,89969,89973,89977,89982,89987,89990,89995,89998,90001,90394,90399,90402,90405,90408,90411,90931,90935,90940,90945,90950,90953,90958,90961,90964,91346,91351,91353,91355,91358,91361,91873,91877,91938,91941,91944,91947,91951,91954,91959,91964,92889],[10,76824,76820],{"id":76825},"_4js进阶",[19,76827,76828],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76830,76832],{"id":76831},"_41-作用域","4.1 作用域",[224,76834,76836],{"id":76835},"_411-局部作用域","4.1.1 局部作用域",[19,76838,76839],{},[1601,76840],{"alt":169,"src":76841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,76843,76844],{},[1601,76845],{"alt":169,"src":76846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1270,76848,76849,76852,76855],{},[210,76850,76851],{},"函数作用域在函数内部",[210,76853,76854],{},"块级作用域在{}",[210,76856,76857],{},"对象的那个{}不是作用域，不是块作用域",[224,76859,76861],{"id":76860},"_412-全局作用域","4.1.2 全局作用域",[19,76863,76864],{},[1601,76865],{"alt":169,"src":76866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,76868,76869],{},"window.a=10不要这样写",[224,76871,76873],{"id":76872},"_413-作用域链","4.1.3 作用域链",[19,76875,76876],{},"变量查找机制",[19,76878,76879],{},[1601,76880],{"alt":169,"src":76881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,76883,76885],{"id":76884},"_42-垃圾回收机制","4.2 垃圾回收机制",[224,76887,76889],{"id":76888},"_421-大体介绍","4.2.1 大体介绍",[19,76891,76892],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,76894,76895],{},[1601,76896],{"alt":169,"src":76897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,76899,76900],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[224,76902,76904],{"id":76903},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,76906,76907],{},"堆栈空间分配区别：",[207,76909,76910,76913],{},[210,76911,76912],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[210,76914,76915],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,76917,76918],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22137,76920,76922],{"id":76921},"_4221-引用计数","4.2.2.1 引用计数",[19,76924,76925],{},[1601,76926],{"alt":169,"src":76927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,76929,76930],{},[1601,76931],{"alt":169,"src":76932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,76934,76935],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22137,76937,76939],{"id":76938},"_4222-标记清除法","4.2.2.2 标记清除法",[19,76941,76942],{},[1601,76943],{"alt":169,"src":76944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,76946,76947],{},[1601,76948],{"alt":169,"src":76949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,76951,76952],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,76954,76956],{"id":76955},"_43-闭包","4.3 闭包",[19,76958,76959],{},[1601,76960],{"alt":169,"src":76961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,76963,76964],{},"闭包：内层函数+外层函数的变量",[19,76966,76967],{},[1601,76968],{"alt":169,"src":76969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,76971,76972],{},"closure就是闭包",[19,76974,76975],{},[1601,76976],{"alt":169,"src":76977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,76979,76980],{},"内层函数必须包含外层函数的变量才是闭包",[19,76982,76983],{},[1601,76984],{"alt":169,"src":76985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,76987,76988],{},[1601,76989],{"alt":169,"src":76990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,76992,76993],{},"闭包可能会引起内存泄漏",[19,76995,76996],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,76998,77000],{"id":76999},"_44-变量提升","4.4 变量提升",[19,77002,77003],{},[1601,77004],{"alt":169,"src":77005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77007,77008],{},[1601,77009],{"alt":169,"src":77010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77012,77013],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77015,77017],{"id":77016},"_45-函数进阶","4.5 函数进阶",[224,77019,77021],{"id":77020},"_451-函数提升","4.5.1 函数提升",[19,77023,77024],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77026,77027],{},"只提升函数声明，不提升函数调用",[51953,77029,77030],{},"\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",[224,77032,77034],{"id":77033},"_452-函数参数","4.5.2 函数参数",[22137,77036,77038],{"id":77037},"_4521-动态参数","4.5.2.1 动态参数",[19,77040,77041],{},[1601,77042],{"alt":169,"src":77043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77045,77046],{},[1601,77047],{"alt":169,"src":77048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77050,77051],{},"箭头函数里边没有arguments",[22137,77053,77055],{"id":77054},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77057,77058],{},[1601,77059],{"alt":169,"src":77060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77062,77063],{},[1601,77064],{"alt":169,"src":77065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77067,77068],{},"剩余参数使用的时候不需要写...",[19,77070,77071],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77073,77074],{},"  function getSum(a,b,...arr) {",[19,77076,77077],{},"  console.log(11)",[19,77079,77080],{},"  }",[19,77082,77083],{},"  getSum(1,2,3,4)",[19,77085,77086],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77088,77089],{},"  getSum(1,2)",[19,77091,77092],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77094,77095],{},[1601,77096],{"alt":169,"src":77097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22137,77099,77101],{"id":77100},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77103,77104],{},[1601,77105],{"alt":169,"src":77106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77108,77109],{},[1601,77110],{"alt":169,"src":77111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77113,77114],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77116,77117],{},"展开运算符可以用于数组之间的合并：",[19,77119,77120],{},"const arr1 = [1, 2, 3]",[19,77122,77123],{},"const arr2 = [3, 4, 5]",[19,77125,77126],{},"const arr = [...arr1, ...arr2]",[19,77128,77129],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77131,77132],{},"剩余参数：函数参数使用，得到真数组",[19,77134,77135],{},"展开运算符：数组中使用，数组展开",[224,77137,77139],{"id":77138},"_453-箭头函数","4.5.3 箭头函数",[22137,77141,77143],{"id":77142},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77145,77146],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77148,77149],{},"它不是万能的！！！",[19,77151,77152],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77154,77155],{},[1601,77156],{"alt":169,"src":77157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77159,292],{},[19,77161,77162],{},"① 只有一个形参的时候，可以省略小括号：",[19,77164,77165],{},"const fn=x=>{console.log(x)}",[19,77167,77168],{},"② 只有一行代码时可以省略大括号：",[19,77170,77171],{},"const fn=x=>console.log(11)",[19,77173,77174],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77176,77177],{},"const fn=x=>x+x",[19,77179,77180],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77182,77183],{},"⑤ 阻止表单默认提交：",[19,77185,77186],{},"const form = document.querySelector('form')",[19,77188,77189],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77191,77192],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77194,77195],{},"const fn=uname=>({uname:uname})",[19,77197,77198],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77200,77201],{},[1601,77202],{"alt":169,"src":77203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77205,77206],{},[1601,77207],{"alt":169,"src":77208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77210,77211],{},[1601,77212],{"alt":169,"src":77213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77215,77216],{},"一定不要忘记用()，有()就理解为自带return",[22137,77218,77220],{"id":77219},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77222,77223],{},"箭头函数是没有动态参数的arguments",[19,77225,77226],{},[1601,77227],{"alt":169,"src":77228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22137,77230,77232],{"id":77231},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77234,11472],{},[207,77236,77237,77240,77243],{},[210,77238,77239],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[210,77241,77242],{},"事件回调函数使用箭头函数时，this 为全局的 window",[210,77244,77245],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77247,77248],{},[1601,77249],{"alt":169,"src":77250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[244,77252,77254],{"className":53207,"code":77253,"language":53209,"meta":169,"style":169},"  \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",[22,77255,77256,77264,77269,77274,77279,77284,77289,77293,77298,77302,77306,77311,77316,77321,77325,77329,77334,77339,77344],{"__ignoreMap":169},[252,77257,77258,77260,77262],{"class":254,"line":255},[252,77259,52284],{"class":262},[252,77261,51953],{"class":51440},[252,77263,51447],{"class":262},[252,77265,77266],{"class":254,"line":170},[252,77267,77268],{"class":262},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[252,77270,77271],{"class":254,"line":1318},[252,77272,77273],{"class":262},"    console.log(this) \u002F\u002F指向window\n",[252,77275,77276],{"class":254,"line":1333},[252,77277,77278],{"class":262},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[252,77280,77281],{"class":254,"line":1339},[252,77282,77283],{"class":262},"    function fn() {\n",[252,77285,77286],{"class":254,"line":1353},[252,77287,77288],{"class":262},"      console.log(this)  \u002F\u002F指向window\n",[252,77290,77291],{"class":254,"line":1359},[252,77292,2326],{"class":262},[252,77294,77295],{"class":254,"line":1450},[252,77296,77297],{"class":262},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[252,77299,77300],{"class":254,"line":1456},[252,77301,2539],{"emptyLinePlaceholder":181},[252,77303,77304],{"class":254,"line":1468},[252,77305,71663],{"class":262},[252,77307,77308],{"class":254,"line":1751},[252,77309,77310],{"class":262},"      name: 'andy',\n",[252,77312,77313],{"class":254,"line":1756},[252,77314,77315],{"class":262},"      sayHai: function () {\n",[252,77317,77318],{"class":254,"line":1762},[252,77319,77320],{"class":262},"        console.log(this)\n",[252,77322,77323],{"class":254,"line":1767},[252,77324,52538],{"class":262},[252,77326,77327],{"class":254,"line":1781},[252,77328,2326],{"class":262},[252,77330,77331],{"class":254,"line":1786},[252,77332,77333],{"class":262},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[252,77335,77336],{"class":254,"line":1792},[252,77337,77338],{"class":262},"    \u002F\u002F 2.箭头函数的this\n",[252,77340,77341],{"class":254,"line":1813},[252,77342,77343],{"class":262},"    const fn = () => console.log(this)\n",[252,77345,77346,77348,77350],{"class":254,"line":1818},[252,77347,52557],{"class":262},[252,77349,51953],{"class":51440},[252,77351,51447],{"class":262},[19,77353,77354],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77356,77357],{},"const fn = () => console.log(this)",[19,77359,77360],{},"fn() \u002F\u002F指向window",[19,77362,77363],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77365,77366],{},"①",[19,77368,77369],{},"const obj = {",[19,77371,77372],{},"uname: 'pink老师',",[19,77374,77375],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77377,1209],{},[19,77379,77380],{},"调用对象里边的函数",[19,77382,77383],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77385,77386],{},"obj.sayHai()",[19,77388,161],{},[19,77390,77391],{},"const obj1 = {",[19,77393,77372],{},[19,77395,77396],{},"sayHai: function () {",[19,77398,77399],{},"let i = 10",[19,77401,77402],{},"const count = () => {",[19,77404,77405],{},"console.log(this)",[19,77407,77408],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77410,77411],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77413,1209],{},[19,77415,77416],{},"count()",[19,77418,1209],{},[19,77420,1209],{},[19,77422,77423],{},"obj1.sayHai()",[14,77425,77427],{"id":77426},"_46-解构赋值","4.6 解构赋值",[224,77429,77431],{"id":77430},"_461-数组解构","4.6.1 数组解构",[19,77433,77434],{},"以前要是使用数组中的值的话：",[19,77436,77437],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77439,77440],{},"const arr=[100,60,80]",[19,77442,77443],{},"const max=arr[0]",[19,77445,77446],{},"const min=arr[1]",[19,77448,77449],{},"const avg=arr[2]",[19,77451,77452],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77454,77455],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77457,77458],{},"这个写法就类似于上边的那种用很多const的方法",[19,77460,77461],{},[1601,77462],{"alt":169,"src":77463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[244,77465,77467],{"className":50773,"code":77466,"language":50775,"meta":169,"style":169},"①变量之间交换值:\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",[22,77468,77469,77474,77479,77484,77489,77494,77498,77502,77507,77511,77516,77521,77525,77530,77535,77546,77556,77561,77566,77571,77575,77579],{"__ignoreMap":169},[252,77470,77471],{"class":254,"line":255},[252,77472,77473],{"class":262},"①变量之间交换值:\n",[252,77475,77476],{"class":254,"line":170},[252,77477,77478],{"class":262},"let a=1\n",[252,77480,77481],{"class":254,"line":1318},[252,77482,77483],{"class":262},"let b=2;\n",[252,77485,77486],{"class":254,"line":1333},[252,77487,77488],{"class":262},"必须加这行代码，不然就会报错\n",[252,77490,77491],{"class":254,"line":1339},[252,77492,77493],{"class":262},"[b,a]=[a,b]\n",[252,77495,77496],{"class":254,"line":1353},[252,77497,2539],{"emptyLinePlaceholder":181},[252,77499,77500],{"class":254,"line":1359},[252,77501,2539],{"emptyLinePlaceholder":181},[252,77503,77504],{"class":254,"line":1450},[252,77505,77506],{"class":262},"可以写成下面的方式：\n",[252,77508,77509],{"class":254,"line":1456},[252,77510,77478],{"class":262},[252,77512,77513],{"class":254,"line":1468},[252,77514,77515],{"class":262},"let b=2\n",[252,77517,77518],{"class":254,"line":1751},[252,77519,77520],{"class":262},";[b,a]=[a,b]\n",[252,77522,77523],{"class":254,"line":1756},[252,77524,2539],{"emptyLinePlaceholder":181},[252,77526,77527],{"class":254,"line":1762},[252,77528,77529],{"class":262},"②排序\n",[252,77531,77532],{"class":254,"line":1767},[252,77533,77534],{"class":262},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[252,77536,77537,77540,77543],{"class":254,"line":1781},[252,77538,77539],{"class":262},"for (let i = 0; i ",[252,77541,1173],{"class":77542},"s7hpK",[252,77544,77545],{"class":262}," arr1.length; i++) {\n",[252,77547,77548,77551,77553],{"class":254,"line":1786},[252,77549,77550],{"class":262},"   for (let j = 0; j ",[252,77552,1173],{"class":77542},[252,77554,77555],{"class":262}," arr1.length - 1; j++) {\n",[252,77557,77558],{"class":254,"line":1792},[252,77559,77560],{"class":262},"      if (arr1[j] > arr1[j + 1]) {\n",[252,77562,77563],{"class":254,"line":1813},[252,77564,77565],{"class":262},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[252,77567,77568],{"class":254,"line":1818},[252,77569,77570],{"class":262},"       }\n",[252,77572,77573],{"class":254,"line":1832},[252,77574,4448],{"class":262},[252,77576,77577],{"class":254,"line":1837},[252,77578,1704],{"class":262},[252,77580,77581],{"class":254,"line":1866},[252,77582,77583],{"class":262},"console.log(arr1)\n",[19,77585,77586],{},"数组解构的细节：",[19,77588,77589],{},"①变量多，单元值少",[19,77591,77592],{},[1601,77593],{"alt":169,"src":77594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77596,77597],{},"防止出现undefined的方法：",[19,77599,77600],{},"const [a=0,b=0] =[1]",[19,77602,77603],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77605,77606],{},"②变量少，单元值多",[19,77608,77609],{},[1601,77610],{"alt":169,"src":77611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77613,77614],{},"此时可以使用剩余参数来接收多余的值",[19,77616,77617],{},"const [a,b,...c]=[1,2,3,4]",[19,77619,77620],{},"console.log(c) 输出[3,4]",[19,77622,77623],{},"③可以按需导入，忽略某些返回值",[19,77625,77626],{},[1601,77627],{"alt":169,"src":77628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77630,77631],{},"④支持多维数组的结构",[244,77633,77637],{"className":77634,"code":77635,"language":77636,"meta":169,"style":169},"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",[22,77638,77639,77667,77683,77698,77713],{"__ignoreMap":169},[252,77640,77641,77643,77645,77647,77649,77651,77653,77655,77658,77660,77662,77664],{"class":254,"line":255},[252,77642,6932],{"class":258},[252,77644,51973],{"class":262},[252,77646,308],{"class":258},[252,77648,52366],{"class":262},[252,77650,480],{"class":311},[252,77652,12575],{"class":262},[252,77654,340],{"class":311},[252,77656,77657],{"class":262},", [",[252,77659,334],{"class":311},[252,77661,12575],{"class":262},[252,77663,556],{"class":311},[252,77665,77666],{"class":262},"]]\n",[252,77668,77669,77672,77674,77676,77678,77680],{"class":254,"line":170},[252,77670,77671],{"class":262},"console.",[252,77673,58387],{"class":2102},[252,77675,3990],{"class":262},[252,77677,454],{"class":311},[252,77679,4355],{"class":262},[252,77681,77682],{"class":321},"  \u002F\u002F1\n",[252,77684,77685,77687,77689,77691,77693,77695],{"class":254,"line":1318},[252,77686,77671],{"class":262},[252,77688,58387],{"class":2102},[252,77690,3990],{"class":262},[252,77692,480],{"class":311},[252,77694,4355],{"class":262},[252,77696,77697],{"class":321},"  \u002F\u002F2\n",[252,77699,77700,77702,77704,77706,77708,77710],{"class":254,"line":1333},[252,77701,77671],{"class":262},[252,77703,58387],{"class":2102},[252,77705,3990],{"class":262},[252,77707,340],{"class":311},[252,77709,4355],{"class":262},[252,77711,77712],{"class":321},"  \u002F\u002F[3,4]\n",[252,77714,77715,77717,77719,77721,77723,77725,77727,77729],{"class":254,"line":1339},[252,77716,77671],{"class":262},[252,77718,58387],{"class":2102},[252,77720,3990],{"class":262},[252,77722,340],{"class":311},[252,77724,5040],{"class":262},[252,77726,454],{"class":311},[252,77728,4355],{"class":262},[252,77730,77731],{"class":321},"  \u002F\u002F3\n",[244,77733,77735],{"className":77634,"code":77734,"language":77636,"meta":169,"style":169},"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",[22,77736,77737,77764,77775,77786],{"__ignoreMap":169},[252,77738,77739,77741,77744,77746,77748,77750,77752,77754,77756,77758,77760,77762],{"class":254,"line":255},[252,77740,6932],{"class":258},[252,77742,77743],{"class":262}," [a, b, c] ",[252,77745,308],{"class":258},[252,77747,52366],{"class":262},[252,77749,480],{"class":311},[252,77751,12575],{"class":262},[252,77753,340],{"class":311},[252,77755,77657],{"class":262},[252,77757,334],{"class":311},[252,77759,12575],{"class":262},[252,77761,556],{"class":311},[252,77763,77666],{"class":262},[252,77765,77766,77768,77770,77773],{"class":254,"line":170},[252,77767,77671],{"class":262},[252,77769,58387],{"class":2102},[252,77771,77772],{"class":262},"(a)",[252,77774,77682],{"class":321},[252,77776,77777,77779,77781,77784],{"class":254,"line":1318},[252,77778,77671],{"class":262},[252,77780,58387],{"class":2102},[252,77782,77783],{"class":262},"(b)",[252,77785,77697],{"class":321},[252,77787,77788,77790,77792,77795],{"class":254,"line":1333},[252,77789,77671],{"class":262},[252,77791,58387],{"class":2102},[252,77793,77794],{"class":262},"(c)",[252,77796,77712],{"class":321},[244,77798,77800],{"className":77634,"code":77799,"language":77636,"meta":169,"style":169},"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",[22,77801,77802,77829,77839,77849,77859],{"__ignoreMap":169},[252,77803,77804,77806,77809,77811,77813,77815,77817,77819,77821,77823,77825,77827],{"class":254,"line":255},[252,77805,6932],{"class":258},[252,77807,77808],{"class":262}," [a, b, [c, d]] ",[252,77810,308],{"class":258},[252,77812,52366],{"class":262},[252,77814,480],{"class":311},[252,77816,12575],{"class":262},[252,77818,340],{"class":311},[252,77820,77657],{"class":262},[252,77822,334],{"class":311},[252,77824,12575],{"class":262},[252,77826,556],{"class":311},[252,77828,77666],{"class":262},[252,77830,77831,77833,77835,77837],{"class":254,"line":170},[252,77832,77671],{"class":262},[252,77834,58387],{"class":2102},[252,77836,77772],{"class":262},[252,77838,77682],{"class":321},[252,77840,77841,77843,77845,77847],{"class":254,"line":1318},[252,77842,77671],{"class":262},[252,77844,58387],{"class":2102},[252,77846,77783],{"class":262},[252,77848,77697],{"class":321},[252,77850,77851,77853,77855,77857],{"class":254,"line":1333},[252,77852,77671],{"class":262},[252,77854,58387],{"class":2102},[252,77856,77794],{"class":262},[252,77858,77731],{"class":321},[252,77860,77861,77863,77865,77868],{"class":254,"line":1339},[252,77862,77671],{"class":262},[252,77864,58387],{"class":2102},[252,77866,77867],{"class":262},"(d)",[252,77869,77870],{"class":321},"  \u002F\u002F4\n",[224,77872,77874],{"id":77873},"_462-对象解构","4.6.2 对象解构",[19,77876,77877],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,77879,77880],{},"用的非常非常多！！！！！！",[22137,77882,77884],{"id":77883},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,77886,77887],{},"基本语法：",[207,77889,77890,77893,77896,77899],{},[210,77891,77892],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[210,77894,77895],{},"对象属性的值将被赋值给与属性名相同的变量",[210,77897,77898],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[210,77900,77901],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[244,77903,77905],{"className":50773,"code":77904,"language":50775,"meta":169,"style":169},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[22,77906,77907,77912,77917,77922,77926],{"__ignoreMap":169},[252,77908,77909],{"class":254,"line":255},[252,77910,77911],{"class":262},"const obj = {\n",[252,77913,77914],{"class":254,"line":170},[252,77915,77916],{"class":262},"   uname: 'pink老师',\n",[252,77918,77919],{"class":254,"line":1318},[252,77920,77921],{"class":262},"   age: 18,\n",[252,77923,77924],{"class":254,"line":1333},[252,77925,1704],{"class":262},[252,77927,77928],{"class":254,"line":1339},[252,77929,77930],{"class":262},"const { uname, age } = obj\n",[19,77932,77933],{},"上方代码这样写等价于：",[19,77935,77936],{},"const uname等价于obj.uname",[19,77938,77939],{},"变量名可以重新改名：",[19,77941,77942],{},"const uname='red老师'",[19,77944,77945],{},"const user={",[19,77947,77948],{},"  uname:'pink老师',",[19,77950,77951],{},"  age:18",[19,77953,1209],{},[19,77955,77956],{},"const {uname,age}=user",[19,77958,77959],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,77961,77962],{},"const {旧变量名：新变量名}=对象",[19,77964,77965],{},"const {uname:username,age}=user",[22137,77967,77969],{"id":77968},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,77971,77972],{},[1601,77973],{"alt":169,"src":77974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22137,77976,77978],{"id":77977},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,77980,77981],{},[1601,77982],{"alt":169,"src":77983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[244,77985,77987],{"className":53207,"code":77986,"language":53209,"meta":169,"style":169},"  \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",[22,77988,77989,77997,78002,78007,78012,78017,78022,78027,78032,78037,78041,78046,78051],{"__ignoreMap":169},[252,77990,77991,77993,77995],{"class":254,"line":255},[252,77992,52284],{"class":262},[252,77994,51953],{"class":51440},[252,77996,51447],{"class":262},[252,77998,77999],{"class":254,"line":170},[252,78000,78001],{"class":262},"    const pig = {\n",[252,78003,78004],{"class":254,"line":1318},[252,78005,78006],{"class":262},"      name: '佩奇',\n",[252,78008,78009],{"class":254,"line":1333},[252,78010,78011],{"class":262},"      family: {\n",[252,78013,78014],{"class":254,"line":1339},[252,78015,78016],{"class":262},"        mother: '猪妈妈',\n",[252,78018,78019],{"class":254,"line":1353},[252,78020,78021],{"class":262},"        father: '猪爸爸',\n",[252,78023,78024],{"class":254,"line":1359},[252,78025,78026],{"class":262},"        sister: '乔治'\n",[252,78028,78029],{"class":254,"line":1450},[252,78030,78031],{"class":262},"      },\n",[252,78033,78034],{"class":254,"line":1456},[252,78035,78036],{"class":262},"      age: 6\n",[252,78038,78039],{"class":254,"line":1468},[252,78040,2326],{"class":262},[252,78042,78043],{"class":254,"line":1751},[252,78044,78045],{"class":262},"    \u002F\u002F 多级对象解构\n",[252,78047,78048],{"class":254,"line":1756},[252,78049,78050],{"class":262},"    const { name, family: { mother, father, sister }, age } = pig\n",[252,78052,78053,78055,78057],{"class":254,"line":1762},[252,78054,52557],{"class":262},[252,78056,51953],{"class":51440},[252,78058,51447],{"class":262},[19,78060,78061],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[244,78063,78066],{"className":78064,"code":78065,"language":76587,"meta":169,"style":169},"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",[22,78067,78068,78073,78084,78096,78108,78117,78121,78132,78144,78154,78159,78163,78173,78184,78193,78197,78201,78212,78223,78232,78236,78241],{"__ignoreMap":169},[252,78069,78070],{"class":254,"line":255},[252,78071,78072],{"class":321},"    \u002F\u002F 这是后台传递过来的数据\n",[252,78074,78075,78077,78080,78082],{"class":254,"line":170},[252,78076,11361],{"class":258},[252,78078,78079],{"class":262}," msg ",[252,78081,308],{"class":258},[252,78083,15712],{"class":262},[252,78085,78086,78089,78091,78094],{"class":254,"line":1318},[252,78087,78088],{"class":367},"      \"code\"",[252,78090,1122],{"class":258},[252,78092,78093],{"class":311}," 200",[252,78095,31606],{"class":262},[252,78097,78098,78101,78103,78106],{"class":254,"line":1333},[252,78099,78100],{"class":367},"      \"msg\"",[252,78102,1122],{"class":258},[252,78104,78105],{"class":367}," \"获取新闻列表成功\"",[252,78107,31606],{"class":262},[252,78109,78110,78113,78115],{"class":254,"line":1339},[252,78111,78112],{"class":367},"      \"data\"",[252,78114,1122],{"class":258},[252,78116,55587],{"class":262},[252,78118,78119],{"class":254,"line":1353},[252,78120,2649],{"class":262},[252,78122,78123,78126,78128,78130],{"class":254,"line":1359},[252,78124,78125],{"class":367},"          \"id\"",[252,78127,1122],{"class":258},[252,78129,25258],{"class":311},[252,78131,31606],{"class":262},[252,78133,78134,78137,78139,78142],{"class":254,"line":1450},[252,78135,78136],{"class":367},"          \"title\"",[252,78138,1122],{"class":258},[252,78140,78141],{"class":367}," \"5G商用自己，三大运用商收入下降\"",[252,78143,31606],{"class":262},[252,78145,78146,78149,78151],{"class":254,"line":1456},[252,78147,78148],{"class":367},"          \"count\"",[252,78150,1122],{"class":258},[252,78152,78153],{"class":311}," 58\n",[252,78155,78156],{"class":254,"line":1468},[252,78157,78158],{"class":262},"        },\n",[252,78160,78161],{"class":254,"line":1751},[252,78162,2649],{"class":262},[252,78164,78165,78167,78169,78171],{"class":254,"line":1756},[252,78166,78125],{"class":367},[252,78168,1122],{"class":258},[252,78170,14895],{"class":311},[252,78172,31606],{"class":262},[252,78174,78175,78177,78179,78182],{"class":254,"line":1762},[252,78176,78136],{"class":367},[252,78178,1122],{"class":258},[252,78180,78181],{"class":367}," \"国际媒体头条速览\"",[252,78183,31606],{"class":262},[252,78185,78186,78188,78190],{"class":254,"line":1767},[252,78187,78148],{"class":367},[252,78189,1122],{"class":258},[252,78191,78192],{"class":311}," 56\n",[252,78194,78195],{"class":254,"line":1781},[252,78196,78158],{"class":262},[252,78198,78199],{"class":254,"line":1786},[252,78200,2649],{"class":262},[252,78202,78203,78205,78207,78210],{"class":254,"line":1792},[252,78204,78125],{"class":367},[252,78206,1122],{"class":258},[252,78208,78209],{"class":311}," 3",[252,78211,31606],{"class":262},[252,78213,78214,78216,78218,78221],{"class":254,"line":1813},[252,78215,78136],{"class":367},[252,78217,1122],{"class":258},[252,78219,78220],{"class":367}," \"乌克兰和俄罗斯持续冲突\"",[252,78222,31606],{"class":262},[252,78224,78225,78227,78229],{"class":254,"line":1818},[252,78226,78148],{"class":367},[252,78228,1122],{"class":258},[252,78230,78231],{"class":311}," 1669\n",[252,78233,78234],{"class":254,"line":1832},[252,78235,78158],{"class":262},[252,78237,78238],{"class":254,"line":1837},[252,78239,78240],{"class":262},"      ]\n",[252,78242,78243],{"class":254,"line":1866},[252,78244,2326],{"class":262},[19,78246,78247],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78249,78250],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78252,78253],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,78255,78256],{},"function({data}) {",[19,78258,78259],{},"console.log(data)",[19,78261,1209],{},[19,78263,78264],{},"render(msg)",[19,78266,78267],{},"实参传递给形参的时候解构了",[19,78269,78270],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78272,78273],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78275,78276],{},"function render({data:mydata}) {",[19,78278,78279],{},"  console.log(data)",[19,78281,1209],{},[224,78283,78285],{"id":78284},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78287,78288],{},"有两种情况：一个是数组结构，一个是立即执行函数",[207,78290,78291],{},[210,78292,78293],{},"如果对一个数组进行遍历，有两种方式：",[19,78295,78296],{},"①法1",[19,78298,78299],{},"const arr=[1,2,3]",[19,78301,78302],{},"arr.map(function(item,index) {",[19,78304,78305],{},"  console.log(item)",[19,78307,52604],{},[19,78309,78310],{},[1601,78311],{"alt":169,"src":78312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78314,78315],{},"②法2",[19,78317,78318],{},"const str='pink'",[19,78320,78321],{},"[1,2,3].map(function(item,index) {",[19,78323,78324],{},"console.log(item)",[19,78326,52604],{},[19,78328,78329],{},[1601,78330],{"alt":169,"src":78331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78333,78334],{},"此时会报错",[19,78336,78337],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78339,78324],{},[19,78341,52604],{},[19,78343,78344],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78346,78348],{"id":78347},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78350,78351],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78353,78354],{},"可以理解为加强版的for循环",[19,78356,78357],{},[1601,78358],{"alt":169,"src":78359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78361,78362],{},"里边不写return，不返回数组，只遍历不返回",[19,78364,78365],{},"map是返回数组",[19,78367,78368],{},"forEach主要用于遍历数组对象",[244,78370,78372],{"className":53207,"code":78371,"language":53209,"meta":169,"style":169},"  \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",[22,78373,78374,78382,78387,78392,78397,78402,78406,78411],{"__ignoreMap":169},[252,78375,78376,78378,78380],{"class":254,"line":255},[252,78377,52284],{"class":262},[252,78379,51953],{"class":51440},[252,78381,51447],{"class":262},[252,78383,78384],{"class":254,"line":170},[252,78385,78386],{"class":262},"    const arr = ['red', 'green', 'pink']\n",[252,78388,78389],{"class":254,"line":1318},[252,78390,78391],{"class":262},"    const result = arr.forEach(function (item, index) {\n",[252,78393,78394],{"class":254,"line":1333},[252,78395,78396],{"class":262},"      console.log(item)\n",[252,78398,78399],{"class":254,"line":1339},[252,78400,78401],{"class":262},"      console.log(index)\n",[252,78403,78404],{"class":254,"line":1353},[252,78405,33601],{"class":262},[252,78407,78408],{"class":254,"line":1359},[252,78409,78410],{"class":262},"    console.log(result)\n",[252,78412,78413,78415,78417],{"class":254,"line":1450},[252,78414,52557],{"class":262},[252,78416,51953],{"class":51440},[252,78418,51447],{"class":262},[19,78420,78421],{},[1601,78422],{"alt":169,"src":78423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78425,78427],{"id":78426},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78429,78430],{},[1601,78431],{"alt":169,"src":78432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78434,78435],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[244,78437,78439],{"className":53207,"code":78438,"language":53209,"meta":169,"style":169},"\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",[22,78440,78441,78449,78457,78462,78467,78471,78475,78480,78484,78489,78497],{"__ignoreMap":169},[252,78442,78443,78445,78447],{"class":254,"line":255},[252,78444,1173],{"class":262},[252,78446,51940],{"class":51440},[252,78448,51447],{"class":262},[252,78450,78451,78453,78455],{"class":254,"line":170},[252,78452,52284],{"class":262},[252,78454,51953],{"class":51440},[252,78456,51447],{"class":262},[252,78458,78459],{"class":254,"line":1318},[252,78460,78461],{"class":262},"    const arr = [10, 20, 30]\n",[252,78463,78464],{"class":254,"line":1333},[252,78465,78466],{"class":262},"    const newArr = arr.filter(function (item, index) {\n",[252,78468,78469],{"class":254,"line":1339},[252,78470,78396],{"class":262},[252,78472,78473],{"class":254,"line":1353},[252,78474,78401],{"class":262},[252,78476,78477],{"class":254,"line":1359},[252,78478,78479],{"class":262},"      return item >= 20\n",[252,78481,78482],{"class":254,"line":1450},[252,78483,33601],{"class":262},[252,78485,78486],{"class":254,"line":1456},[252,78487,78488],{"class":262},"    console.log(newArr)\n",[252,78490,78491,78493,78495],{"class":254,"line":1468},[252,78492,52557],{"class":262},[252,78494,51953],{"class":51440},[252,78496,51447],{"class":262},[252,78498,78499,78501,78503],{"class":254,"line":1751},[252,78500,51925],{"class":262},[252,78502,51940],{"class":51440},[252,78504,51447],{"class":262},[19,78506,78507],{},"这个也可以写成箭头函数：",[244,78509,78511],{"className":50773,"code":78510,"language":50775,"meta":169,"style":169},"const newArr = arr.filter(item => item >= 20)\n",[22,78512,78513],{"__ignoreMap":169},[252,78514,78515],{"class":254,"line":255},[252,78516,78510],{"class":262},[14,78518,78520],{"id":78519},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78522,78523],{},[1601,78524],{"alt":169,"src":78525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78527,78528],{},"步骤：",[19,78530,78531],{},"①：渲染页面模块",[1270,78533,78534,78537],{},[210,78535,78536],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[210,78538,78539],{},"用forEach+字符串的形式",[19,78541,78542],{},"②：点击不同需求，显示不同页面内容",[1270,78544,78545,78548,78551,78554,78557],{},[210,78546,78547],{},"点击采取事件委托方式 .filter",[210,78549,78550],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[210,78552,78553],{},"筛选条件是根据点击的 data-index 来判断",[210,78555,78556],{},"可以使用对象解构，把事件对象解构",[210,78558,78559],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[244,78561,78563],{"className":50773,"code":78562,"language":50775,"meta":169,"style":169},"\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",[22,78564,78565,78575,78589,78593,78601,78615,78635,78647,78655,78661,78671,78681,78691,78695,78699,78705,78718,78730,78740,78752,78756,78760,78767,78780,78792,78809,78827,78840,78844,78848,78860,78870,78874,78878,78885,78926,78953,78963,78967,78971,78979,78991,78995,78999,79007,79019,79031,79042,79046,79050,79059,79071,79082,79086,79090,79099,79111,79123,79127,79131,79138,79148,79160,79172,79187,79191,79195,79203,79219,79229,79239,79249,79261,79265,79269,79279,79290,79300,79304,79312,79320,79324,79332,79347,79373,79398,79423,79442,79450,79464,79469,79474,79479,79484,79489,79497,79505,79510,79521,79526,79536,79546,79556,79566,79570,79574,79583,79592,79601,79610,79614,79618,79627,79636,79645,79654,79658,79662,79671,79680,79689,79698,79702,79706,79715,79724,79733,79742,79746,79750,79759,79768,79777,79786,79790,79794,79803,79812,79821,79830,79834,79838,79847,79856,79864,79873,79877,79881,79885,79890,79902,79907,79919,79923,79940,79968,79977,79982,79992,80002,80011,80016,80021,80025,80030,80047,80051,80056,80064,80069,80096,80101,80121,80126,80138,80143,80148,80153,80164,80178,80215,80233,80266,80283,80307,80311,80316,80322,80326,80330,80334,80342,80350,80354],{"__ignoreMap":169},[252,78566,78567,78569,78571,78573],{"class":254,"line":255},[252,78568,51437],{"class":262},[252,78570,51441],{"class":51440},[252,78572,51444],{"class":2102},[252,78574,51447],{"class":262},[252,78576,78577,78579,78581,78583,78585,78587],{"class":254,"line":170},[252,78578,1173],{"class":262},[252,78580,50775],{"class":51440},[252,78582,51456],{"class":2102},[252,78584,308],{"class":262},[252,78586,51461],{"class":367},[252,78588,51447],{"class":262},[252,78590,78591],{"class":254,"line":1318},[252,78592,2539],{"emptyLinePlaceholder":181},[252,78594,78595,78597,78599],{"class":254,"line":1333},[252,78596,1173],{"class":262},[252,78598,51474],{"class":51440},[252,78600,51447],{"class":262},[252,78602,78603,78605,78607,78609,78611,78613],{"class":254,"line":1339},[252,78604,52284],{"class":262},[252,78606,51484],{"class":51440},[252,78608,51487],{"class":2102},[252,78610,308],{"class":262},[252,78612,51492],{"class":367},[252,78614,51447],{"class":262},[252,78616,78617,78619,78621,78623,78625,78627,78629,78631,78633],{"class":254,"line":1353},[252,78618,52284],{"class":262},[252,78620,51484],{"class":51440},[252,78622,15060],{"class":2102},[252,78624,308],{"class":262},[252,78626,51531],{"class":367},[252,78628,51511],{"class":2102},[252,78630,308],{"class":262},[252,78632,51538],{"class":367},[252,78634,51447],{"class":262},[252,78636,78637,78639,78641,78643,78645],{"class":254,"line":1359},[252,78638,52284],{"class":262},[252,78640,51547],{"class":51440},[252,78642,51550],{"class":262},[252,78644,51547],{"class":51440},[252,78646,51447],{"class":262},[252,78648,78649,78651,78653],{"class":254,"line":1450},[252,78650,52284],{"class":262},[252,78652,5266],{"class":51440},[252,78654,51447],{"class":262},[252,78656,78657,78659],{"class":254,"line":1456},[252,78658,6543],{"class":51440},[252,78660,15712],{"class":262},[252,78662,78663,78665,78667,78669],{"class":254,"line":1468},[252,78664,54835],{"class":311},[252,78666,51577],{"class":262},[252,78668,454],{"class":311},[252,78670,1429],{"class":262},[252,78672,78673,78675,78677,78679],{"class":254,"line":1751},[252,78674,54846],{"class":311},[252,78676,51577],{"class":262},[252,78678,454],{"class":311},[252,78680,1429],{"class":262},[252,78682,78683,78685,78687,78689],{"class":254,"line":1756},[252,78684,72736],{"class":311},[252,78686,51577],{"class":262},[252,78688,60645],{"class":311},[252,78690,1429],{"class":262},[252,78692,78693],{"class":254,"line":1762},[252,78694,2326],{"class":262},[252,78696,78697],{"class":254,"line":1767},[252,78698,2539],{"emptyLinePlaceholder":181},[252,78700,78701,78703],{"class":254,"line":1781},[252,78702,62263],{"class":2102},[252,78704,15712],{"class":262},[252,78706,78707,78709,78711,78714,78716],{"class":254,"line":1786},[252,78708,54911],{"class":311},[252,78710,51577],{"class":262},[252,78712,78713],{"class":311},"990",[252,78715,51632],{"class":258},[252,78717,1429],{"class":262},[252,78719,78720,78722,78724,78726,78728],{"class":254,"line":1792},[252,78721,54846],{"class":311},[252,78723,51577],{"class":262},[252,78725,454],{"class":311},[252,78727,51696],{"class":311},[252,78729,1429],{"class":262},[252,78731,78732,78734,78736,78738],{"class":254,"line":1813},[252,78733,55149],{"class":311},[252,78735,51577],{"class":262},[252,78737,51617],{"class":311},[252,78739,1429],{"class":262},[252,78741,78742,78745,78747,78750],{"class":254,"line":1818},[252,78743,78744],{"class":311},"      flex-wrap",[252,78746,51577],{"class":262},[252,78748,78749],{"class":311},"wrap",[252,78751,1429],{"class":262},[252,78753,78754],{"class":254,"line":1832},[252,78755,2326],{"class":262},[252,78757,78758],{"class":254,"line":1837},[252,78759,2539],{"emptyLinePlaceholder":181},[252,78761,78762,78765],{"class":254,"line":1866},[252,78763,78764],{"class":2102},"    .item",[252,78766,15712],{"class":262},[252,78768,78769,78771,78773,78776,78778],{"class":254,"line":1871},[252,78770,54911],{"class":311},[252,78772,51577],{"class":262},[252,78774,78775],{"class":311},"240",[252,78777,51632],{"class":258},[252,78779,1429],{"class":262},[252,78781,78782,78784,78786,78788,78790],{"class":254,"line":1888},[252,78783,62140],{"class":311},[252,78785,51577],{"class":262},[252,78787,709],{"class":311},[252,78789,51632],{"class":258},[252,78791,1429],{"class":262},[252,78793,78794,78796,78798,78800,78802,78805,78807],{"class":254,"line":1893},[252,78795,54835],{"class":311},[252,78797,51577],{"class":262},[252,78799,963],{"class":311},[252,78801,51632],{"class":258},[252,78803,78804],{"class":311}," 30",[252,78806,51632],{"class":258},[252,78808,1429],{"class":262},[252,78810,78811,78813,78815,78817,78820,78823,78825],{"class":254,"line":1898},[252,78812,62000],{"class":311},[252,78814,51577],{"class":262},[252,78816,28261],{"class":311},[252,78818,78819],{"class":311}," ease",[252,78821,78822],{"class":311}," .5",[252,78824,958],{"class":258},[252,78826,1429],{"class":262},[252,78828,78829,78832,78834,78836,78838],{"class":254,"line":1903},[252,78830,78831],{"class":311},"      margin-bottom",[252,78833,51577],{"class":262},[252,78835,963],{"class":311},[252,78837,51632],{"class":258},[252,78839,1429],{"class":262},[252,78841,78842],{"class":254,"line":1917},[252,78843,2326],{"class":262},[252,78845,78846],{"class":254,"line":1922},[252,78847,2539],{"emptyLinePlaceholder":181},[252,78849,78850,78853,78855,78858],{"class":254,"line":2716},[252,78851,78852],{"class":2102},"    .item:nth-child",[252,78854,263],{"class":262},[252,78856,78857],{"class":311},"4n",[252,78859,12582],{"class":262},[252,78861,78862,78864,78866,78868],{"class":254,"line":2730},[252,78863,62140],{"class":311},[252,78865,51577],{"class":262},[252,78867,454],{"class":311},[252,78869,1429],{"class":262},[252,78871,78872],{"class":254,"line":2738},[252,78873,2326],{"class":262},[252,78875,78876],{"class":254,"line":2743},[252,78877,2539],{"emptyLinePlaceholder":181},[252,78879,78880,78883],{"class":254,"line":2749},[252,78881,78882],{"class":2102},"    .item:hover",[252,78884,15712],{"class":262},[252,78886,78887,78890,78892,78894,78896,78898,78900,78902,78904,78907,78909,78911,78913,78915,78917,78919,78921,78924],{"class":254,"line":2755},[252,78888,78889],{"class":311},"      box-shadow",[252,78891,51577],{"class":262},[252,78893,454],{"class":311},[252,78895,51632],{"class":258},[252,78897,4232],{"class":311},[252,78899,51632],{"class":258},[252,78901,2287],{"class":311},[252,78903,51632],{"class":258},[252,78905,78906],{"class":311}," rgba",[252,78908,263],{"class":262},[252,78910,454],{"class":311},[252,78912,12575],{"class":262},[252,78914,454],{"class":311},[252,78916,12575],{"class":262},[252,78918,454],{"class":311},[252,78920,12575],{"class":262},[252,78922,78923],{"class":311},".2",[252,78925,2858],{"class":262},[252,78927,78928,78931,78933,78936,78938,78940,78942,78945,78947,78949,78951],{"class":254,"line":2760},[252,78929,78930],{"class":311},"      transform",[252,78932,51577],{"class":262},[252,78934,78935],{"class":311},"translate3d",[252,78937,263],{"class":262},[252,78939,454],{"class":311},[252,78941,12575],{"class":262},[252,78943,78944],{"class":311},"-4",[252,78946,51632],{"class":258},[252,78948,12575],{"class":262},[252,78950,454],{"class":311},[252,78952,2858],{"class":262},[252,78954,78955,78957,78959,78961],{"class":254,"line":8088},[252,78956,62165],{"class":311},[252,78958,51577],{"class":262},[252,78960,62170],{"class":311},[252,78962,1429],{"class":262},[252,78964,78965],{"class":254,"line":8112},[252,78966,2326],{"class":262},[252,78968,78969],{"class":254,"line":8117},[252,78970,2539],{"emptyLinePlaceholder":181},[252,78972,78973,78975,78977],{"class":254,"line":8123},[252,78974,78764],{"class":2102},[252,78976,55755],{"class":51440},[252,78978,15712],{"class":262},[252,78980,78981,78983,78985,78987,78989],{"class":254,"line":8150},[252,78982,54911],{"class":311},[252,78984,51577],{"class":262},[252,78986,574],{"class":311},[252,78988,591],{"class":258},[252,78990,1429],{"class":262},[252,78992,78993],{"class":254,"line":8155},[252,78994,2326],{"class":262},[252,78996,78997],{"class":254,"line":8161},[252,78998,2539],{"emptyLinePlaceholder":181},[252,79000,79001,79003,79005],{"class":254,"line":8173},[252,79002,78764],{"class":2102},[252,79004,62444],{"class":2102},[252,79006,15712],{"class":262},[252,79008,79009,79011,79013,79015,79017],{"class":254,"line":8185},[252,79010,55062],{"class":311},[252,79012,51577],{"class":262},[252,79014,913],{"class":311},[252,79016,51632],{"class":258},[252,79018,1429],{"class":262},[252,79020,79021,79023,79025,79027,79029],{"class":254,"line":8197},[252,79022,78831],{"class":311},[252,79024,51577],{"class":262},[252,79026,709],{"class":311},[252,79028,51632],{"class":258},[252,79030,1429],{"class":262},[252,79032,79033,79035,79037,79040],{"class":254,"line":9856},[252,79034,57556],{"class":311},[252,79036,51577],{"class":262},[252,79038,79039],{"class":311},"#666",[252,79041,1429],{"class":262},[252,79043,79044],{"class":254,"line":9881},[252,79045,2326],{"class":262},[252,79047,79048],{"class":254,"line":9904},[252,79049,2539],{"emptyLinePlaceholder":181},[252,79051,79052,79054,79057],{"class":254,"line":9928},[252,79053,78764],{"class":2102},[252,79055,79056],{"class":2102}," .price",[252,79058,15712],{"class":262},[252,79060,79061,79063,79065,79067,79069],{"class":254,"line":9933},[252,79062,55062],{"class":311},[252,79064,51577],{"class":262},[252,79066,1013],{"class":311},[252,79068,51632],{"class":258},[252,79070,1429],{"class":262},[252,79072,79073,79075,79077,79080],{"class":254,"line":9938},[252,79074,57556],{"class":311},[252,79076,51577],{"class":262},[252,79078,79079],{"class":311},"firebrick",[252,79081,1429],{"class":262},[252,79083,79084],{"class":254,"line":9943},[252,79085,2326],{"class":262},[252,79087,79088],{"class":254,"line":9952},[252,79089,2539],{"emptyLinePlaceholder":181},[252,79091,79092,79094,79097],{"class":254,"line":9957},[252,79093,78764],{"class":2102},[252,79095,79096],{"class":2102}," .price::before",[252,79098,15712],{"class":262},[252,79100,79101,79104,79106,79109],{"class":254,"line":9963},[252,79102,79103],{"class":311},"      content",[252,79105,51577],{"class":262},[252,79107,79108],{"class":367},"'￥'",[252,79110,1429],{"class":262},[252,79112,79113,79115,79117,79119,79121],{"class":254,"line":9984},[252,79114,55062],{"class":311},[252,79116,51577],{"class":262},[252,79118,812],{"class":311},[252,79120,51632],{"class":258},[252,79122,1429],{"class":262},[252,79124,79125],{"class":254,"line":9990},[252,79126,2326],{"class":262},[252,79128,79129],{"class":254,"line":10004},[252,79130,2539],{"emptyLinePlaceholder":181},[252,79132,79133,79136],{"class":254,"line":10010},[252,79134,79135],{"class":2102},"    .filter",[252,79137,15712],{"class":262},[252,79139,79140,79142,79144,79146],{"class":254,"line":10037},[252,79141,55149],{"class":311},[252,79143,51577],{"class":262},[252,79145,51617],{"class":311},[252,79147,1429],{"class":262},[252,79149,79150,79152,79154,79156,79158],{"class":254,"line":10046},[252,79151,54911],{"class":311},[252,79153,51577],{"class":262},[252,79155,78713],{"class":311},[252,79157,51632],{"class":258},[252,79159,1429],{"class":262},[252,79161,79162,79164,79166,79168,79170],{"class":254,"line":10052},[252,79163,54846],{"class":311},[252,79165,51577],{"class":262},[252,79167,454],{"class":311},[252,79169,51696],{"class":311},[252,79171,1429],{"class":262},[252,79173,79174,79176,79178,79180,79182,79184],{"class":254,"line":10060},[252,79175,54835],{"class":311},[252,79177,51577],{"class":262},[252,79179,919],{"class":311},[252,79181,51632],{"class":258},[252,79183,78804],{"class":311},[252,79185,79186],{"class":258},"px\n",[252,79188,79189],{"class":254,"line":10065},[252,79190,2326],{"class":262},[252,79192,79193],{"class":254,"line":16744},[252,79194,2539],{"emptyLinePlaceholder":181},[252,79196,79197,79199,79201],{"class":254,"line":16750},[252,79198,79135],{"class":2102},[252,79200,1537],{"class":51440},[252,79202,15712],{"class":262},[252,79204,79205,79207,79209,79211,79213,79215,79217],{"class":254,"line":16773},[252,79206,54835],{"class":311},[252,79208,51577],{"class":262},[252,79210,709],{"class":311},[252,79212,51632],{"class":258},[252,79214,9090],{"class":311},[252,79216,51632],{"class":258},[252,79218,1429],{"class":262},[252,79220,79221,79223,79225,79227],{"class":254,"line":16779},[252,79222,61861],{"class":311},[252,79224,51577],{"class":262},[252,79226,61958],{"class":311},[252,79228,1429],{"class":262},[252,79230,79231,79233,79235,79237],{"class":254,"line":16802},[252,79232,57556],{"class":311},[252,79234,51577],{"class":262},[252,79236,79039],{"class":311},[252,79238,1429],{"class":262},[252,79240,79241,79243,79245,79247],{"class":254,"line":16816},[252,79242,64110],{"class":311},[252,79244,51577],{"class":262},[252,79246,54877],{"class":311},[252,79248,1429],{"class":262},[252,79250,79251,79253,79255,79257,79259],{"class":254,"line":16836},[252,79252,61890],{"class":311},[252,79254,51577],{"class":262},[252,79256,963],{"class":311},[252,79258,51632],{"class":258},[252,79260,1429],{"class":262},[252,79262,79263],{"class":254,"line":16842},[252,79264,2326],{"class":262},[252,79266,79267],{"class":254,"line":16853},[252,79268,2539],{"emptyLinePlaceholder":181},[252,79270,79271,79273,79275,79277],{"class":254,"line":16876},[252,79272,79135],{"class":2102},[252,79274,1537],{"class":51440},[252,79276,62040],{"class":2102},[252,79278,15712],{"class":262},[252,79280,79281,79283,79285,79288],{"class":254,"line":16898},[252,79282,55024],{"class":311},[252,79284,51577],{"class":262},[252,79286,79287],{"class":311},"#05943c",[252,79289,1429],{"class":262},[252,79291,79292,79294,79296,79298],{"class":254,"line":16903},[252,79293,57556],{"class":311},[252,79295,51577],{"class":262},[252,79297,60982],{"class":311},[252,79299,1429],{"class":262},[252,79301,79302],{"class":254,"line":16909},[252,79303,2326],{"class":262},[252,79305,79306,79308,79310],{"class":254,"line":16923},[252,79307,52557],{"class":262},[252,79309,5266],{"class":51440},[252,79311,51447],{"class":262},[252,79313,79314,79316,79318],{"class":254,"line":16936},[252,79315,51925],{"class":262},[252,79317,51474],{"class":51440},[252,79319,51447],{"class":262},[252,79321,79322],{"class":254,"line":16941},[252,79323,2539],{"emptyLinePlaceholder":181},[252,79325,79326,79328,79330],{"class":254,"line":16955},[252,79327,1173],{"class":262},[252,79329,51940],{"class":51440},[252,79331,51447],{"class":262},[252,79333,79334,79336,79338,79340,79342,79345],{"class":254,"line":16960},[252,79335,52284],{"class":262},[252,79337,51751],{"class":51440},[252,79339,53626],{"class":2102},[252,79341,308],{"class":262},[252,79343,79344],{"class":367},"\"filter\"",[252,79346,51447],{"class":262},[252,79348,79349,79351,79353,79355,79357,79359,79362,79364,79366,79369,79371],{"class":254,"line":16966},[252,79350,51481],{"class":262},[252,79352,501],{"class":51440},[252,79354,61197],{"class":2102},[252,79356,308],{"class":262},[252,79358,61202],{"class":367},[252,79360,79361],{"class":2102}," data-index",[252,79363,308],{"class":262},[252,79365,3817],{"class":367},[252,79367,79368],{"class":262},">0-100元\u003C\u002F",[252,79370,501],{"class":51440},[252,79372,51447],{"class":262},[252,79374,79375,79377,79379,79381,79383,79385,79387,79389,79391,79394,79396],{"class":254,"line":16971},[252,79376,51481],{"class":262},[252,79378,501],{"class":51440},[252,79380,61197],{"class":2102},[252,79382,308],{"class":262},[252,79384,61202],{"class":367},[252,79386,79361],{"class":2102},[252,79388,308],{"class":262},[252,79390,3840],{"class":367},[252,79392,79393],{"class":262},">100-300元\u003C\u002F",[252,79395,501],{"class":51440},[252,79397,51447],{"class":262},[252,79399,79400,79402,79404,79406,79408,79410,79412,79414,79416,79419,79421],{"class":254,"line":16985},[252,79401,51481],{"class":262},[252,79403,501],{"class":51440},[252,79405,61197],{"class":2102},[252,79407,308],{"class":262},[252,79409,61202],{"class":367},[252,79411,79361],{"class":2102},[252,79413,308],{"class":262},[252,79415,3853],{"class":367},[252,79417,79418],{"class":262},">300元以上\u003C\u002F",[252,79420,501],{"class":51440},[252,79422,51447],{"class":262},[252,79424,79425,79427,79429,79431,79433,79435,79438,79440],{"class":254,"line":16990},[252,79426,51481],{"class":262},[252,79428,501],{"class":51440},[252,79430,61197],{"class":2102},[252,79432,308],{"class":262},[252,79434,61202],{"class":367},[252,79436,79437],{"class":262},">全部区间\u003C\u002F",[252,79439,501],{"class":51440},[252,79441,51447],{"class":262},[252,79443,79444,79446,79448],{"class":254,"line":16995},[252,79445,52557],{"class":262},[252,79447,51751],{"class":51440},[252,79449,51447],{"class":262},[252,79451,79452,79454,79456,79458,79460,79462],{"class":254,"line":17009},[252,79453,52284],{"class":262},[252,79455,51751],{"class":51440},[252,79457,53626],{"class":2102},[252,79459,308],{"class":262},[252,79461,62748],{"class":367},[252,79463,51447],{"class":262},[252,79465,79466],{"class":254,"line":17021},[252,79467,79468],{"class":321},"    \u003C!-- \u003Cdiv class=\"item\">\n",[252,79470,79471],{"class":254,"line":17026},[252,79472,79473],{"class":321},"      \u003Cimg src=\"\" alt=\"\">\n",[252,79475,79476],{"class":254,"line":17039},[252,79477,79478],{"class":321},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[252,79480,79481],{"class":254,"line":17044},[252,79482,79483],{"class":321},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[252,79485,79486],{"class":254,"line":17049},[252,79487,79488],{"class":321},"    \u003C\u002Fdiv> -->\n",[252,79490,79491,79493,79495],{"class":254,"line":17054},[252,79492,52557],{"class":262},[252,79494,51751],{"class":51440},[252,79496,51447],{"class":262},[252,79498,79499,79501,79503],{"class":254,"line":17067},[252,79500,52284],{"class":262},[252,79502,51953],{"class":51440},[252,79504,51447],{"class":262},[252,79506,79507],{"class":254,"line":17072},[252,79508,79509],{"class":321},"    \u002F\u002F 2. 初始化数据\n",[252,79511,79512,79514,79517,79519],{"class":254,"line":32773},[252,79513,11361],{"class":258},[252,79515,79516],{"class":311}," goodsList",[252,79518,13704],{"class":258},[252,79520,55587],{"class":262},[252,79522,79523],{"class":254,"line":32779},[252,79524,79525],{"class":262},"      {\n",[252,79527,79528,79531,79534],{"class":254,"line":32785},[252,79529,79530],{"class":262},"        id: ",[252,79532,79533],{"class":367},"'4001172'",[252,79535,31606],{"class":262},[252,79537,79538,79541,79544],{"class":254,"line":32791},[252,79539,79540],{"class":262},"        name: ",[252,79542,79543],{"class":367},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[252,79545,31606],{"class":262},[252,79547,79548,79551,79554],{"class":254,"line":32797},[252,79549,79550],{"class":262},"        price: ",[252,79552,79553],{"class":367},"'289.00'",[252,79555,31606],{"class":262},[252,79557,79558,79561,79564],{"class":254,"line":32808},[252,79559,79560],{"class":262},"        picture: ",[252,79562,79563],{"class":367},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[252,79565,31606],{"class":262},[252,79567,79568],{"class":254,"line":32814},[252,79569,78031],{"class":262},[252,79571,79572],{"class":254,"line":32834},[252,79573,79525],{"class":262},[252,79575,79576,79578,79581],{"class":254,"line":32840},[252,79577,79530],{"class":262},[252,79579,79580],{"class":367},"'4001594'",[252,79582,31606],{"class":262},[252,79584,79585,79587,79590],{"class":254,"line":32851},[252,79586,79540],{"class":262},[252,79588,79589],{"class":367},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[252,79591,31606],{"class":262},[252,79593,79594,79596,79599],{"class":254,"line":32857},[252,79595,79550],{"class":262},[252,79597,79598],{"class":367},"'288.00'",[252,79600,31606],{"class":262},[252,79602,79603,79605,79608],{"class":254,"line":32863},[252,79604,79560],{"class":262},[252,79606,79607],{"class":367},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[252,79609,31606],{"class":262},[252,79611,79612],{"class":254,"line":32869},[252,79613,78031],{"class":262},[252,79615,79616],{"class":254,"line":32875},[252,79617,79525],{"class":262},[252,79619,79620,79622,79625],{"class":254,"line":32881},[252,79621,79530],{"class":262},[252,79623,79624],{"class":367},"'4001009'",[252,79626,31606],{"class":262},[252,79628,79629,79631,79634],{"class":254,"line":32887},[252,79630,79540],{"class":262},[252,79632,79633],{"class":367},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[252,79635,31606],{"class":262},[252,79637,79638,79640,79643],{"class":254,"line":32893},[252,79639,79550],{"class":262},[252,79641,79642],{"class":367},"'109.00'",[252,79644,31606],{"class":262},[252,79646,79647,79649,79652],{"class":254,"line":32913},[252,79648,79560],{"class":262},[252,79650,79651],{"class":367},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[252,79653,31606],{"class":262},[252,79655,79656],{"class":254,"line":32919},[252,79657,78031],{"class":262},[252,79659,79660],{"class":254,"line":32935},[252,79661,79525],{"class":262},[252,79663,79664,79666,79669],{"class":254,"line":32941},[252,79665,79530],{"class":262},[252,79667,79668],{"class":367},"'4001874'",[252,79670,31606],{"class":262},[252,79672,79673,79675,79678],{"class":254,"line":32955},[252,79674,79540],{"class":262},[252,79676,79677],{"class":367},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[252,79679,31606],{"class":262},[252,79681,79682,79684,79687],{"class":254,"line":32961},[252,79683,79550],{"class":262},[252,79685,79686],{"class":367},"'488.00'",[252,79688,31606],{"class":262},[252,79690,79691,79693,79696],{"class":254,"line":32976},[252,79692,79560],{"class":262},[252,79694,79695],{"class":367},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[252,79697,31606],{"class":262},[252,79699,79700],{"class":254,"line":32982},[252,79701,78031],{"class":262},[252,79703,79704],{"class":254,"line":32991},[252,79705,79525],{"class":262},[252,79707,79708,79710,79713],{"class":254,"line":32997},[252,79709,79530],{"class":262},[252,79711,79712],{"class":367},"'4001649'",[252,79714,31606],{"class":262},[252,79716,79717,79719,79722],{"class":254,"line":33006},[252,79718,79540],{"class":262},[252,79720,79721],{"class":367},"'大师监制龙泉青瓷茶叶罐'",[252,79723,31606],{"class":262},[252,79725,79726,79728,79731],{"class":254,"line":33012},[252,79727,79550],{"class":262},[252,79729,79730],{"class":367},"'139.00'",[252,79732,31606],{"class":262},[252,79734,79735,79737,79740],{"class":254,"line":33018},[252,79736,79560],{"class":262},[252,79738,79739],{"class":367},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[252,79741,31606],{"class":262},[252,79743,79744],{"class":254,"line":33027},[252,79745,78031],{"class":262},[252,79747,79748],{"class":254,"line":33033},[252,79749,79525],{"class":262},[252,79751,79752,79754,79757],{"class":254,"line":33044},[252,79753,79530],{"class":262},[252,79755,79756],{"class":367},"'3997185'",[252,79758,31606],{"class":262},[252,79760,79761,79763,79766],{"class":254,"line":33050},[252,79762,79540],{"class":262},[252,79764,79765],{"class":367},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[252,79767,31606],{"class":262},[252,79769,79770,79772,79775],{"class":254,"line":33069},[252,79771,79550],{"class":262},[252,79773,79774],{"class":367},"'108.00'",[252,79776,31606],{"class":262},[252,79778,79779,79781,79784],{"class":254,"line":33075},[252,79780,79560],{"class":262},[252,79782,79783],{"class":367},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[252,79785,31606],{"class":262},[252,79787,79788],{"class":254,"line":33086},[252,79789,78031],{"class":262},[252,79791,79792],{"class":254,"line":33092},[252,79793,79525],{"class":262},[252,79795,79796,79798,79801],{"class":254,"line":33112},[252,79797,79530],{"class":262},[252,79799,79800],{"class":367},"'3997403'",[252,79802,31606],{"class":262},[252,79804,79805,79807,79810],{"class":254,"line":33128},[252,79806,79540],{"class":262},[252,79808,79809],{"class":367},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[252,79811,31606],{"class":262},[252,79813,79814,79816,79819],{"class":254,"line":33134},[252,79815,79550],{"class":262},[252,79817,79818],{"class":367},"'100.00'",[252,79820,31606],{"class":262},[252,79822,79823,79825,79828],{"class":254,"line":33148},[252,79824,79560],{"class":262},[252,79826,79827],{"class":367},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[252,79829,31606],{"class":262},[252,79831,79832],{"class":254,"line":33154},[252,79833,78031],{"class":262},[252,79835,79836],{"class":254,"line":33160},[252,79837,79525],{"class":262},[252,79839,79840,79842,79845],{"class":254,"line":33171},[252,79841,79530],{"class":262},[252,79843,79844],{"class":367},"'3998274'",[252,79846,31606],{"class":262},[252,79848,79849,79851,79854],{"class":254,"line":33177},[252,79850,79540],{"class":262},[252,79852,79853],{"class":367},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[252,79855,31606],{"class":262},[252,79857,79858,79860,79862],{"class":254,"line":33183},[252,79859,79550],{"class":262},[252,79861,79730],{"class":367},[252,79863,31606],{"class":262},[252,79865,79866,79868,79871],{"class":254,"line":33193},[252,79867,79560],{"class":262},[252,79869,79870],{"class":367},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[252,79872,31606],{"class":262},[252,79874,79875],{"class":254,"line":33199},[252,79876,78031],{"class":262},[252,79878,79879],{"class":254,"line":33210},[252,79880,53249],{"class":262},[252,79882,79883],{"class":254,"line":33216},[252,79884,2539],{"emptyLinePlaceholder":181},[252,79886,79887],{"class":254,"line":33226},[252,79888,79889],{"class":321},"    \u002F\u002F 1.渲染函数\n",[252,79891,79892,79894,79896,79898,79900],{"class":254,"line":33231},[252,79893,70224],{"class":258},[252,79895,70227],{"class":2102},[252,79897,263],{"class":262},[252,79899,4019],{"class":5356},[252,79901,12582],{"class":262},[252,79903,79904],{"class":254,"line":33237},[252,79905,79906],{"class":321},"      \u002F\u002F 声明空字符串\n",[252,79908,79909,79912,79915,79917],{"class":254,"line":33286},[252,79910,79911],{"class":258},"      let",[252,79913,79914],{"class":262}," str ",[252,79916,308],{"class":258},[252,79918,70244],{"class":367},[252,79920,79921],{"class":254,"line":33333},[252,79922,70249],{"class":321},[252,79924,79925,79927,79930,79932,79935,79938],{"class":254,"line":33338},[252,79926,58147],{"class":262},[252,79928,79929],{"class":2102},"forEach",[252,79931,263],{"class":262},[252,79933,79934],{"class":5356},"item",[252,79936,79937],{"class":258}," =>",[252,79939,15712],{"class":262},[252,79941,79942,79944,79947,79950,79952,79955,79957,79960,79963,79965],{"class":254,"line":33344},[252,79943,61410],{"class":258},[252,79945,79946],{"class":262}," { ",[252,79948,79949],{"class":311},"name",[252,79951,12575],{"class":262},[252,79953,79954],{"class":311},"price",[252,79956,12575],{"class":262},[252,79958,79959],{"class":311},"picture",[252,79961,79962],{"class":262}," } ",[252,79964,308],{"class":258},[252,79966,79967],{"class":262}," item\n",[252,79969,79970,79973,79975],{"class":254,"line":33363},[252,79971,79972],{"class":262},"        str ",[252,79974,9617],{"class":258},[252,79976,70308],{"class":367},[252,79978,79979],{"class":254,"line":33369},[252,79980,79981],{"class":367},"          \u003Cdiv class=\"item\">\n",[252,79983,79984,79987,79989],{"class":254,"line":33389},[252,79985,79986],{"class":367},"            \u003Cimg src=\"${",[252,79988,79959],{"class":262},[252,79990,79991],{"class":367},"}\" alt=\"\">\n",[252,79993,79994,79997,79999],{"class":254,"line":33395},[252,79995,79996],{"class":367},"            \u003Cp class=\"name\">${",[252,79998,79949],{"class":262},[252,80000,80001],{"class":367},"}\u003C\u002Fp>\n",[252,80003,80004,80007,80009],{"class":254,"line":33401},[252,80005,80006],{"class":367},"            \u003Cp class=\"price\">${",[252,80008,79954],{"class":262},[252,80010,80001],{"class":367},[252,80012,80013],{"class":254,"line":33411},[252,80014,80015],{"class":367},"          \u003C\u002Fdiv>\n",[252,80017,80018],{"class":254,"line":33416},[252,80019,80020],{"class":367},"        `\n",[252,80022,80023],{"class":254,"line":33422},[252,80024,64955],{"class":262},[252,80026,80027],{"class":254,"line":33438},[252,80028,80029],{"class":321},"      \u002F\u002F 追加给List\n",[252,80031,80032,80034,80036,80038,80041,80043,80045],{"class":254,"line":33483},[252,80033,55911],{"class":262},[252,80035,54539],{"class":2102},[252,80037,263],{"class":262},[252,80039,80040],{"class":367},"'.list'",[252,80042,74389],{"class":262},[252,80044,308],{"class":258},[252,80046,74125],{"class":262},[252,80048,80049],{"class":254,"line":33489},[252,80050,2326],{"class":262},[252,80052,80053],{"class":254,"line":33495},[252,80054,80055],{"class":321},"    \u002F\u002F 页面一打开就需要渲染\n",[252,80057,80058,80061],{"class":254,"line":33501},[252,80059,80060],{"class":2102},"    render",[252,80062,80063],{"class":262},"(goodsList)\n",[252,80065,80066],{"class":254,"line":33512},[252,80067,80068],{"class":321},"    \u002F\u002F 2.过滤筛选\n",[252,80070,80071,80073,80075,80077,80080,80082,80084,80086,80088,80090,80092,80094],{"class":254,"line":33518},[252,80072,52547],{"class":262},[252,80074,54539],{"class":2102},[252,80076,263],{"class":262},[252,80078,80079],{"class":367},"'.filter'",[252,80081,30966],{"class":262},[252,80083,57953],{"class":2102},[252,80085,263],{"class":262},[252,80087,57958],{"class":367},[252,80089,12575],{"class":262},[252,80091,337],{"class":5356},[252,80093,79937],{"class":258},[252,80095,15712],{"class":262},[252,80097,80098],{"class":254,"line":33524},[252,80099,80100],{"class":321},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[252,80102,80103,80105,80107,80110,80112,80114,80116,80118],{"class":254,"line":33530},[252,80104,58368],{"class":258},[252,80106,79946],{"class":262},[252,80108,80109],{"class":311},"tagName",[252,80111,12575],{"class":262},[252,80113,31677],{"class":311},[252,80115,79962],{"class":262},[252,80117,308],{"class":258},[252,80119,80120],{"class":262}," e.target\n",[252,80122,80123],{"class":254,"line":33548},[252,80124,80125],{"class":321},"      \u002F\u002F 判断\n",[252,80127,80128,80130,80132,80134,80136],{"class":254,"line":33562},[252,80129,54620],{"class":258},[252,80131,67174],{"class":262},[252,80133,54626],{"class":258},[252,80135,68396],{"class":367},[252,80137,12582],{"class":262},[252,80139,80140],{"class":254,"line":33571},[252,80141,80142],{"class":321},"        \u002F\u002F console.log(11)\n",[252,80144,80145],{"class":254,"line":33580},[252,80146,80147],{"class":321},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[252,80149,80150],{"class":254,"line":33589},[252,80151,80152],{"class":321},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[252,80154,80155,80157,80159,80161],{"class":254,"line":33598},[252,80156,51970],{"class":258},[252,80158,51973],{"class":262},[252,80160,308],{"class":258},[252,80162,80163],{"class":262}," goodsList\n",[252,80165,80166,80168,80171,80173,80176],{"class":254,"line":33604},[252,80167,2636],{"class":258},[252,80169,80170],{"class":262}," (dataset.index ",[252,80172,54626],{"class":258},[252,80174,80175],{"class":367}," '1'",[252,80177,12582],{"class":262},[252,80179,80180,80183,80185,80188,80191,80193,80195,80197,80200,80202,80204,80207,80209,80211,80213],{"class":254,"line":33610},[252,80181,80182],{"class":262},"          arr ",[252,80184,308],{"class":258},[252,80186,80187],{"class":262}," goodsList.",[252,80189,80190],{"class":2102},"filter",[252,80192,263],{"class":262},[252,80194,79934],{"class":5356},[252,80196,79937],{"class":258},[252,80198,80199],{"class":262}," item.price ",[252,80201,1849],{"class":258},[252,80203,4232],{"class":311},[252,80205,80206],{"class":258}," &&",[252,80208,80199],{"class":262},[252,80210,1727],{"class":258},[252,80212,5894],{"class":311},[252,80214,269],{"class":262},[252,80216,80217,80220,80222,80224,80226,80228,80231],{"class":254,"line":33618},[252,80218,80219],{"class":262},"        } ",[252,80221,1840],{"class":258},[252,80223,1843],{"class":258},[252,80225,80170],{"class":262},[252,80227,54626],{"class":258},[252,80229,80230],{"class":367}," '2'",[252,80232,12582],{"class":262},[252,80234,80235,80237,80239,80241,80243,80245,80247,80249,80251,80253,80255,80257,80259,80261,80264],{"class":254,"line":33623},[252,80236,80182],{"class":262},[252,80238,308],{"class":258},[252,80240,80187],{"class":262},[252,80242,80190],{"class":2102},[252,80244,263],{"class":262},[252,80246,79934],{"class":5356},[252,80248,79937],{"class":258},[252,80250,80199],{"class":262},[252,80252,1849],{"class":258},[252,80254,5894],{"class":311},[252,80256,80206],{"class":258},[252,80258,80199],{"class":262},[252,80260,1727],{"class":258},[252,80262,80263],{"class":311}," 300",[252,80265,269],{"class":262},[252,80267,80268,80270,80272,80274,80276,80278,80281],{"class":254,"line":33629},[252,80269,80219],{"class":262},[252,80271,1840],{"class":258},[252,80273,1843],{"class":258},[252,80275,80170],{"class":262},[252,80277,54626],{"class":258},[252,80279,80280],{"class":367}," '3'",[252,80282,12582],{"class":262},[252,80284,80285,80287,80289,80291,80293,80295,80297,80299,80301,80303,80305],{"class":254,"line":33640},[252,80286,80182],{"class":262},[252,80288,308],{"class":258},[252,80290,80187],{"class":262},[252,80292,80190],{"class":2102},[252,80294,263],{"class":262},[252,80296,79934],{"class":5356},[252,80298,79937],{"class":258},[252,80300,80199],{"class":262},[252,80302,1849],{"class":258},[252,80304,80263],{"class":311},[252,80306,269],{"class":262},[252,80308,80309],{"class":254,"line":33646},[252,80310,2668],{"class":262},[252,80312,80313],{"class":254,"line":33666},[252,80314,80315],{"class":321},"        \u002F\u002F 渲染函数\n",[252,80317,80318,80320],{"class":254,"line":33672},[252,80319,70548],{"class":2102},[252,80321,52552],{"class":262},[252,80323,80324],{"class":254,"line":33678},[252,80325,52538],{"class":262},[252,80327,80328],{"class":254,"line":33684},[252,80329,2539],{"emptyLinePlaceholder":181},[252,80331,80332],{"class":254,"line":33701},[252,80333,33601],{"class":262},[252,80335,80336,80338,80340],{"class":254,"line":33707},[252,80337,52557],{"class":262},[252,80339,51953],{"class":51440},[252,80341,51447],{"class":262},[252,80343,80344,80346,80348],{"class":254,"line":33713},[252,80345,51925],{"class":262},[252,80347,51940],{"class":51440},[252,80349,51447],{"class":262},[252,80351,80352],{"class":254,"line":33719},[252,80353,2539],{"emptyLinePlaceholder":181},[252,80355,80356,80358,80360],{"class":254,"line":33725},[252,80357,51925],{"class":262},[252,80359,50775],{"class":51440},[252,80361,51447],{"class":262},[14,80363,80365],{"id":80364},"_410-深入了解对象","4.10 深入了解对象",[224,80367,80369],{"id":80368},"_4101-创建对象","4.10.1 创建对象",[19,80371,80372],{},[1601,80373],{"alt":169,"src":80374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80376,80377],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[224,80379,80381],{"id":80380},"_4102-构造函数","4.10.2 构造函数",[19,80383,80384,80387],{},[412,80385,80386],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80389,80390,80393],{},[412,80391,80392],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[244,80395,80397],{"className":50773,"code":80396,"language":50775,"meta":169,"style":169},"\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",[22,80398,80399,80407,80412,80433,80446,80458,80470,80474,80479,80506,80511,80538],{"__ignoreMap":169},[252,80400,80401,80403,80405],{"class":254,"line":255},[252,80402,1173],{"class":262},[252,80404,51953],{"class":51440},[252,80406,51447],{"class":262},[252,80408,80409],{"class":254,"line":170},[252,80410,80411],{"class":321},"\u002F\u002F例：\n",[252,80413,80414,80416,80419,80421,80423,80425,80427,80429,80431],{"class":254,"line":1318},[252,80415,54589],{"class":258},[252,80417,80418],{"class":2102}," Pig",[252,80420,263],{"class":262},[252,80422,79949],{"class":5356},[252,80424,641],{"class":262},[252,80426,70361],{"class":5356},[252,80428,641],{"class":262},[252,80430,70378],{"class":5356},[252,80432,12582],{"class":262},[252,80434,80435,80438,80441,80443],{"class":254,"line":1333},[252,80436,80437],{"class":311},"    this",[252,80439,80440],{"class":262},".name",[252,80442,308],{"class":258},[252,80444,80445],{"class":262},"name\n",[252,80447,80448,80450,80453,80455],{"class":254,"line":1339},[252,80449,80437],{"class":311},[252,80451,80452],{"class":262},".age",[252,80454,308],{"class":258},[252,80456,80457],{"class":262},"age\n",[252,80459,80460,80462,80465,80467],{"class":254,"line":1353},[252,80461,80437],{"class":311},[252,80463,80464],{"class":262},".gender",[252,80466,308],{"class":258},[252,80468,80469],{"class":262},"gender    \n",[252,80471,80472],{"class":254,"line":1359},[252,80473,1704],{"class":262},[252,80475,80476],{"class":254,"line":1450},[252,80477,80478],{"class":321},"\u002F\u002F创建佩奇对象\n",[252,80480,80481,80483,80486,80488,80490,80492,80495,80497,80499,80501,80504],{"class":254,"line":1456},[252,80482,6932],{"class":258},[252,80484,80485],{"class":311}," Peppa",[252,80487,11857],{"class":258},[252,80489,80418],{"class":2102},[252,80491,263],{"class":262},[252,80493,80494],{"class":367},"'佩奇'",[252,80496,641],{"class":262},[252,80498,607],{"class":311},[252,80500,641],{"class":262},[252,80502,80503],{"class":367},"'女'",[252,80505,269],{"class":262},[252,80507,80508],{"class":254,"line":1468},[252,80509,80510],{"class":321},"\u002F\u002F创建乔治对象\n",[252,80512,80513,80515,80518,80520,80522,80524,80527,80529,80531,80533,80536],{"class":254,"line":1751},[252,80514,6932],{"class":258},[252,80516,80517],{"class":311}," George",[252,80519,11857],{"class":258},[252,80521,80418],{"class":2102},[252,80523,263],{"class":262},[252,80525,80526],{"class":367},"'乔治'",[252,80528,641],{"class":262},[252,80530,334],{"class":311},[252,80532,641],{"class":262},[252,80534,80535],{"class":367},"'男'",[252,80537,269],{"class":262},[252,80539,80540,80542,80544],{"class":254,"line":1756},[252,80541,51925],{"class":262},[252,80543,51953],{"class":51440},[252,80545,51447],{"class":262},[19,80547,80548],{},[1601,80549],{"alt":169,"src":80550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80552,80553],{},[1601,80554],{"alt":169,"src":80555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80557,80558],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80560,80561],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80563,80564],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80566,80567],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80569,80570],{},"这里用等号是因为：对象.属性=值",[19,80572,80573],{},"①利用对象字面量创建对象",[19,80575,80576],{},"const o={",[19,80578,80579],{},"name:'pink'",[19,80581,80582],{},"} ②利用new Object创建对象",[19,80584,80585],{},"const o=new Object({name:'pink'})",[19,80587,80588],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80590,80591],{},"构造函数创建对象的执行过程：",[19,80593,80594],{},[1601,80595],{"alt":169,"src":80596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[224,80598,80600],{"id":80599},"_4103-实例成员","4.10.3 实例成员",[19,80602,80603],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[207,80605,80606,80609,80612],{},[210,80607,80608],{},"实例对象的属性和方法即为实例成员",[210,80610,80611],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[210,80613,80614],{},"构造函数创建的实例对象彼此独立互不影响",[224,80616,80618],{"id":80617},"_4104-静态成员","4.10.4 静态成员",[19,80620,80621],{},[1601,80622],{"alt":169,"src":80623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80625,80626],{},"静态成员有Date.now() Math.PI Math.random()",[19,80628,80629],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80631,80632],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80634,80635],{},"function Pig(name) n {",[19,80637,80638],{},"this.name=name",[19,80640,1209],{},[19,80642,80643],{},"Pig.eyes=2",[19,80645,80646],{},"Pig.sayHai=function () { console.log(this) }",[19,80648,80649],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80651,80652],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80654,11472],{},[207,80656,80657,80660,80663,80666,80669],{},[210,80658,80659],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[210,80661,80662],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[210,80664,80665],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[210,80667,80668],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[210,80670,80671],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80673,80674],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[224,80676,80678],{"id":80677},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80680,80681],{},"内置构造函数包含：",[19,80683,80684],{},[1601,80685],{"alt":169,"src":80686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80688,80689],{},[1601,80690],{"alt":169,"src":80691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80693,80694],{},"这些基本数据类型，js对他们进行了包装",[51953,80696,80697],{},"\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",[22137,80699,80701],{"id":80700},"_41051-object","4.10.5.1 Object",[19,80703,80704],{},"Object 是内置的构造函数，用于创建普通对象",[19,80706,80707],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[244,80709,80711],{"className":50773,"code":80710,"language":50775,"meta":169,"style":169},"const user=new Object({name:'小明',age:15})\n",[22,80712,80713],{"__ignoreMap":169},[252,80714,80715],{"class":254,"line":255},[252,80716,80710],{"class":262},[19,80718,80719],{},"三个常用的静态方法：",[23049,80721,80723],{"id":80722},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80725,80726],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80728,80729],{},[1601,80730],{"alt":169,"src":80731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80733,80734],{},[1601,80735],{"alt":169,"src":80736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[244,80738,80740],{"className":53207,"code":80739,"language":53209,"meta":169,"style":169},"\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",[22,80741,80742,80750,80758,80763,80768,80773,80778,80783,80788,80796],{"__ignoreMap":169},[252,80743,80744,80746,80748],{"class":254,"line":255},[252,80745,1173],{"class":262},[252,80747,51940],{"class":51440},[252,80749,51447],{"class":262},[252,80751,80752,80754,80756],{"class":254,"line":170},[252,80753,52284],{"class":262},[252,80755,51953],{"class":51440},[252,80757,51447],{"class":262},[252,80759,80760],{"class":254,"line":1318},[252,80761,80762],{"class":262},"    const o = { name: 'pink', age: 6 }\n",[252,80764,80765],{"class":254,"line":1333},[252,80766,80767],{"class":262},"    \u002F\u002F 获得所有属性名\n",[252,80769,80770],{"class":254,"line":1339},[252,80771,80772],{"class":262},"    const arr = Object.keys(o)\n",[252,80774,80775],{"class":254,"line":1353},[252,80776,80777],{"class":262},"    console.log(arr)\n",[252,80779,80780],{"class":254,"line":1359},[252,80781,80782],{"class":262},"    \u002F\u002F 获得所有属性值\n",[252,80784,80785],{"class":254,"line":1450},[252,80786,80787],{"class":262},"    console.log(Object.values(o))\n",[252,80789,80790,80792,80794],{"class":254,"line":1456},[252,80791,52557],{"class":262},[252,80793,51953],{"class":51440},[252,80795,51447],{"class":262},[252,80797,80798,80800,80802],{"class":254,"line":1468},[252,80799,51925],{"class":262},[252,80801,51940],{"class":51440},[252,80803,51447],{"class":262},[23049,80805,80807],{"id":80806},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,80809,80810],{},"Object.assign(oo,o)",[19,80812,80813],{},"后的东西添加给前 是追加",[19,80815,80816],{},[1601,80817],{"alt":169,"src":80818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,80820,80821],{},[1601,80822],{"alt":169,"src":80823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[244,80825,80827],{"className":53207,"code":80826,"language":53209,"meta":169,"style":169},"\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",[22,80828,80829,80837,80845,80849,80853,80857,80861,80865,80869,80874,80879,80884,80889,80894,80902],{"__ignoreMap":169},[252,80830,80831,80833,80835],{"class":254,"line":255},[252,80832,1173],{"class":262},[252,80834,51940],{"class":51440},[252,80836,51447],{"class":262},[252,80838,80839,80841,80843],{"class":254,"line":170},[252,80840,52284],{"class":262},[252,80842,51953],{"class":51440},[252,80844,51447],{"class":262},[252,80846,80847],{"class":254,"line":1318},[252,80848,80762],{"class":262},[252,80850,80851],{"class":254,"line":1333},[252,80852,80767],{"class":262},[252,80854,80855],{"class":254,"line":1339},[252,80856,80772],{"class":262},[252,80858,80859],{"class":254,"line":1353},[252,80860,80777],{"class":262},[252,80862,80863],{"class":254,"line":1359},[252,80864,80782],{"class":262},[252,80866,80867],{"class":254,"line":1450},[252,80868,80787],{"class":262},[252,80870,80871],{"class":254,"line":1456},[252,80872,80873],{"class":262},"    const oo = {}\n",[252,80875,80876],{"class":254,"line":1468},[252,80877,80878],{"class":262},"    Object.assign(oo, o)\n",[252,80880,80881],{"class":254,"line":1751},[252,80882,80883],{"class":262},"    console.log(oo)\n",[252,80885,80886],{"class":254,"line":1756},[252,80887,80888],{"class":262},"    Object.assign(o, { gender: '女' })\n",[252,80890,80891],{"class":254,"line":1762},[252,80892,80893],{"class":262},"    console.log(o)\n",[252,80895,80896,80898,80900],{"class":254,"line":1767},[252,80897,52557],{"class":262},[252,80899,51953],{"class":51440},[252,80901,51447],{"class":262},[252,80903,80904,80906,80908],{"class":254,"line":1781},[252,80905,51925],{"class":262},[252,80907,51940],{"class":51440},[252,80909,51447],{"class":262},[19,80911,80912],{},[1601,80913],{"alt":169,"src":80914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22137,80916,80918],{"id":80917},"_41052-array","4.10.5.2 Array",[19,80920,80921],{},"Array 是内置的构造函数，用于创建数组",[19,80923,80924],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[244,80926,80928],{"className":50773,"code":80927,"language":50775,"meta":169,"style":169},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[22,80929,80930,80935],{"__ignoreMap":169},[252,80931,80932],{"class":254,"line":255},[252,80933,80934],{"class":262},"const arr=new Array(3,5)\n",[252,80936,80937],{"class":254,"line":170},[252,80938,80939],{"class":262},"console.log(arr)  \u002F\u002F[3,5]\n",[19,80941,80942],{},"Array的实例方法，这个方法是实例成员",[19,80944,80945],{},[1601,80946],{"alt":169,"src":80947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23049,80949,80951],{"id":80950},"_410521-reduce","4.10.5.2.1 reduce",[19,80953,80954],{},[1601,80955],{"alt":169,"src":80956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[244,80958,80960],{"className":53207,"code":80959,"language":53209,"meta":169,"style":169},"\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",[22,80961,80962,80970,80978,80983,80988,80993,80998,81002,81007,81012,81017,81021,81026,81031,81035,81040,81045,81050,81058],{"__ignoreMap":169},[252,80963,80964,80966,80968],{"class":254,"line":255},[252,80965,1173],{"class":262},[252,80967,51940],{"class":51440},[252,80969,51447],{"class":262},[252,80971,80972,80974,80976],{"class":254,"line":170},[252,80973,52284],{"class":262},[252,80975,51953],{"class":51440},[252,80977,51447],{"class":262},[252,80979,80980],{"class":254,"line":1318},[252,80981,80982],{"class":262},"    const arr = [1, 5, 8]\n",[252,80984,80985],{"class":254,"line":1333},[252,80986,80987],{"class":262},"    \u002F\u002F 1.没有初始值\n",[252,80989,80990],{"class":254,"line":1339},[252,80991,80992],{"class":262},"    const total = arr.reduce(function (prev, current) {\n",[252,80994,80995],{"class":254,"line":1353},[252,80996,80997],{"class":262},"      return prev + current\n",[252,80999,81000],{"class":254,"line":1359},[252,81001,33601],{"class":262},[252,81003,81004],{"class":254,"line":1450},[252,81005,81006],{"class":262},"    console.log(total)   \u002F\u002F14\n",[252,81008,81009],{"class":254,"line":1456},[252,81010,81011],{"class":262},"    \u002F\u002F 2.有初始值\n",[252,81013,81014],{"class":254,"line":1468},[252,81015,81016],{"class":262},"    const total1 = arr.reduce(function (prev, current) {\n",[252,81018,81019],{"class":254,"line":1751},[252,81020,80997],{"class":262},[252,81022,81023],{"class":254,"line":1756},[252,81024,81025],{"class":262},"    }, 10)\n",[252,81027,81028],{"class":254,"line":1762},[252,81029,81030],{"class":262},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[252,81032,81033],{"class":254,"line":1767},[252,81034,2539],{"emptyLinePlaceholder":181},[252,81036,81037],{"class":254,"line":1781},[252,81038,81039],{"class":262},"    \u002F\u002F 3.箭头函数写法\n",[252,81041,81042],{"class":254,"line":1786},[252,81043,81044],{"class":262},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[252,81046,81047],{"class":254,"line":1792},[252,81048,81049],{"class":262},"    console.log(total2)   \u002F\u002F24\n",[252,81051,81052,81054,81056],{"class":254,"line":1813},[252,81053,52557],{"class":262},[252,81055,51953],{"class":51440},[252,81057,51447],{"class":262},[252,81059,81060,81062,81064],{"class":254,"line":1818},[252,81061,51925],{"class":262},[252,81063,51940],{"class":51440},[252,81065,51447],{"class":262},[19,81067,81068],{},"执行过程：",[207,81070,81071,81074,81077],{},[210,81072,81073],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[210,81075,81076],{},"每一次循环，把返回值给作为下一次循环的上一次值",[210,81078,81079],{},"如果有起始值，则起始值作为上一次值",[244,81081,81083],{"className":53207,"code":81082,"language":53209,"meta":169,"style":169},"\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",[22,81084,81085,81093,81101,81105,81109,81113,81117,81121,81125,81130,81135,81140,81145,81150,81154,81158,81162,81166,81170,81174,81179,81183,81188,81192,81197,81202,81206,81210,81214,81222],{"__ignoreMap":169},[252,81086,81087,81089,81091],{"class":254,"line":255},[252,81088,1173],{"class":262},[252,81090,51940],{"class":51440},[252,81092,51447],{"class":262},[252,81094,81095,81097,81099],{"class":254,"line":170},[252,81096,52284],{"class":262},[252,81098,51953],{"class":51440},[252,81100,51447],{"class":262},[252,81102,81103],{"class":254,"line":1318},[252,81104,80982],{"class":262},[252,81106,81107],{"class":254,"line":1333},[252,81108,80987],{"class":262},[252,81110,81111],{"class":254,"line":1339},[252,81112,80992],{"class":262},[252,81114,81115],{"class":254,"line":1353},[252,81116,80997],{"class":262},[252,81118,81119],{"class":254,"line":1359},[252,81120,33601],{"class":262},[252,81122,81123],{"class":254,"line":1450},[252,81124,81006],{"class":262},[252,81126,81127],{"class":254,"line":1456},[252,81128,81129],{"class":262},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[252,81131,81132],{"class":254,"line":1468},[252,81133,81134],{"class":262},"    \u002F\u002F     1              5                    6\n",[252,81136,81137],{"class":254,"line":1751},[252,81138,81139],{"class":262},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[252,81141,81142],{"class":254,"line":1756},[252,81143,81144],{"class":262},"    \u002F\u002F     6              8                    14\n",[252,81146,81147],{"class":254,"line":1762},[252,81148,81149],{"class":262},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[252,81151,81152],{"class":254,"line":1767},[252,81153,81011],{"class":262},[252,81155,81156],{"class":254,"line":1781},[252,81157,81016],{"class":262},[252,81159,81160],{"class":254,"line":1786},[252,81161,80997],{"class":262},[252,81163,81164],{"class":254,"line":1792},[252,81165,81025],{"class":262},[252,81167,81168],{"class":254,"line":1813},[252,81169,81030],{"class":262},[252,81171,81172],{"class":254,"line":1818},[252,81173,81129],{"class":262},[252,81175,81176],{"class":254,"line":1832},[252,81177,81178],{"class":262},"    \u002F\u002F     10             1                     11\n",[252,81180,81181],{"class":254,"line":1837},[252,81182,81139],{"class":262},[252,81184,81185],{"class":254,"line":1866},[252,81186,81187],{"class":262},"    \u002F\u002F     11             5                    16\n",[252,81189,81190],{"class":254,"line":1871},[252,81191,81139],{"class":262},[252,81193,81194],{"class":254,"line":1888},[252,81195,81196],{"class":262},"    \u002F\u002F     16             8                    24\n",[252,81198,81199],{"class":254,"line":1893},[252,81200,81201],{"class":262},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[252,81203,81204],{"class":254,"line":1898},[252,81205,81039],{"class":262},[252,81207,81208],{"class":254,"line":1903},[252,81209,81044],{"class":262},[252,81211,81212],{"class":254,"line":1917},[252,81213,81049],{"class":262},[252,81215,81216,81218,81220],{"class":254,"line":1922},[252,81217,52557],{"class":262},[252,81219,51953],{"class":51440},[252,81221,51447],{"class":262},[252,81223,81224,81226,81228],{"class":254,"line":2716},[252,81225,51925],{"class":262},[252,81227,51940],{"class":51440},[252,81229,51447],{"class":262},[23049,81231,81233],{"id":81232},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81235,81236],{},[1601,81237],{"alt":169,"src":81238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[244,81240,81242],{"className":53207,"code":81241,"language":53209,"meta":169,"style":169},"\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",[22,81243,81244,81252,81260,81265,81270,81275,81280,81284,81289,81294,81299,81304,81309,81314,81318,81323,81327,81332,81340],{"__ignoreMap":169},[252,81245,81246,81248,81250],{"class":254,"line":255},[252,81247,1173],{"class":262},[252,81249,51940],{"class":51440},[252,81251,51447],{"class":262},[252,81253,81254,81256,81258],{"class":254,"line":170},[252,81255,52284],{"class":262},[252,81257,51953],{"class":51440},[252,81259,51447],{"class":262},[252,81261,81262],{"class":254,"line":1318},[252,81263,81264],{"class":262},"    const arr = [\n",[252,81266,81267],{"class":254,"line":1333},[252,81268,81269],{"class":262},"      { name: '张三', salary: 10000 },\n",[252,81271,81272],{"class":254,"line":1339},[252,81273,81274],{"class":262},"      { name: '李四', salary: 10000 },\n",[252,81276,81277],{"class":254,"line":1353},[252,81278,81279],{"class":262},"      { name: '王五', salary: 10000 }\n",[252,81281,81282],{"class":254,"line":1359},[252,81283,53249],{"class":262},[252,81285,81286],{"class":254,"line":1450},[252,81287,81288],{"class":262},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[252,81290,81291],{"class":254,"line":1456},[252,81292,81293],{"class":262},"    \u002F\u002F prev是累计值\n",[252,81295,81296],{"class":254,"line":1468},[252,81297,81298],{"class":262},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[252,81300,81301],{"class":254,"line":1751},[252,81302,81303],{"class":262},"    console.log(total)\n",[252,81305,81306],{"class":254,"line":1756},[252,81307,81308],{"class":262},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[252,81310,81311],{"class":254,"line":1762},[252,81312,81313],{"class":262},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[252,81315,81316],{"class":254,"line":1767},[252,81317,81308],{"class":262},[252,81319,81320],{"class":254,"line":1781},[252,81321,81322],{"class":262},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[252,81324,81325],{"class":254,"line":1786},[252,81326,81308],{"class":262},[252,81328,81329],{"class":254,"line":1792},[252,81330,81331],{"class":262},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[252,81333,81334,81336,81338],{"class":254,"line":1813},[252,81335,52557],{"class":262},[252,81337,51953],{"class":51440},[252,81339,51447],{"class":262},[252,81341,81342,81344,81346],{"class":254,"line":1818},[252,81343,51925],{"class":262},[252,81345,51940],{"class":51440},[252,81347,51447],{"class":262},[23049,81349,81351],{"id":81350},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81353,81354],{},[1601,81355],{"alt":169,"src":81356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81358,81359],{},[1601,81360],{"alt":169,"src":81361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[207,81363,81364],{},[210,81365,81366],{},"find()",[19,81368,81369],{},"循环查找，找到第一个就ok",[19,81371,81372],{},[501,81373,81376],{"href":81374,"rel":81375},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24004],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[244,81378,81380],{"className":50773,"code":81379,"language":50775,"meta":169,"style":169},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[22,81381,81382,81387,81392],{"__ignoreMap":169},[252,81383,81384],{"class":254,"line":255},[252,81385,81386],{"class":262},"const array1 = [5, 12, 8, 130, 44]\n",[252,81388,81389],{"class":254,"line":170},[252,81390,81391],{"class":262},"const found = array1.find((element) => element > 10)\n",[252,81393,81394],{"class":254,"line":1318},[252,81395,81396],{"class":262},"console.log(found)  \u002F\u002F12\n",[19,81398,81399,81401,81402,81407,81408,81411,81412,81414,81415,81420,81421,81423,81424,81426,81427,81429,81430],{},[22,81400,81366],{}," 方法是一个",[501,81403,81406],{"href":81404,"rel":81405},"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",[24004],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[22,81409,81410],{},"callbackFn"," 函数，直到 ",[22,81413,81410],{}," 返回一个",[501,81416,81419],{"href":81417,"rel":81418},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24004],"真值","。然后 ",[22,81422,81366],{}," 返回该元素并停止迭代数组。如果 ",[22,81425,81410],{}," 从未返回真值，则 ",[22,81428,81366],{}," 返回 ",[22,81431,81432],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[244,81434,81436],{"className":53207,"code":81435,"language":53209,"meta":169,"style":169},"\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",[22,81437,81438,81446,81454,81459,81464,81469,81473,81478,81483,81487,81492,81497,81501,81505,81510,81515,81519,81523,81528,81533,81538,81543,81548,81552,81557,81562,81567,81572,81576,81581,81589],{"__ignoreMap":169},[252,81439,81440,81442,81444],{"class":254,"line":255},[252,81441,1173],{"class":262},[252,81443,51940],{"class":51440},[252,81445,51447],{"class":262},[252,81447,81448,81450,81452],{"class":254,"line":170},[252,81449,52284],{"class":262},[252,81451,51953],{"class":51440},[252,81453,51447],{"class":262},[252,81455,81456],{"class":254,"line":1318},[252,81457,81458],{"class":262},"    const arr = ['red', 'blue', 'green']\n",[252,81460,81461],{"class":254,"line":1333},[252,81462,81463],{"class":262},"    const found = arr.find(item => item === 'pink')\n",[252,81465,81466],{"class":254,"line":1339},[252,81467,81468],{"class":262},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[252,81470,81471],{"class":254,"line":1353},[252,81472,2539],{"emptyLinePlaceholder":181},[252,81474,81475],{"class":254,"line":1359},[252,81476,81477],{"class":262},"    \u002F\u002F 使用场景，用于查找数据\n",[252,81479,81480],{"class":254,"line":1450},[252,81481,81482],{"class":262},"    const arr1 = [\n",[252,81484,81485],{"class":254,"line":1456},[252,81486,79525],{"class":262},[252,81488,81489],{"class":254,"line":1468},[252,81490,81491],{"class":262},"        name: '小米',\n",[252,81493,81494],{"class":254,"line":1751},[252,81495,81496],{"class":262},"        price: 1999\n",[252,81498,81499],{"class":254,"line":1756},[252,81500,78031],{"class":262},[252,81502,81503],{"class":254,"line":1762},[252,81504,79525],{"class":262},[252,81506,81507],{"class":254,"line":1767},[252,81508,81509],{"class":262},"        name: '华为',\n",[252,81511,81512],{"class":254,"line":1781},[252,81513,81514],{"class":262},"        price: 3999\n",[252,81516,81517],{"class":254,"line":1786},[252,81518,52538],{"class":262},[252,81520,81521],{"class":254,"line":1792},[252,81522,53249],{"class":262},[252,81524,81525],{"class":254,"line":1813},[252,81526,81527],{"class":262},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[252,81529,81530],{"class":254,"line":1818},[252,81531,81532],{"class":262},"    \u002F\u002F const found1 = arr1.find(item => {\n",[252,81534,81535],{"class":254,"line":1832},[252,81536,81537],{"class":262},"    \u002F\u002F   if (item.name === '小米') {\n",[252,81539,81540],{"class":254,"line":1837},[252,81541,81542],{"class":262},"    \u002F\u002F     return item\n",[252,81544,81545],{"class":254,"line":1866},[252,81546,81547],{"class":262},"    \u002F\u002F   }\n",[252,81549,81550],{"class":254,"line":1871},[252,81551,63430],{"class":262},[252,81553,81554],{"class":254,"line":1888},[252,81555,81556],{"class":262},"    \u002F\u002F 另一种写法\n",[252,81558,81559],{"class":254,"line":1893},[252,81560,81561],{"class":262},"    const found1 = arr1.find(item => {\n",[252,81563,81564],{"class":254,"line":1898},[252,81565,81566],{"class":262},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[252,81568,81569],{"class":254,"line":1903},[252,81570,81571],{"class":262},"      return item.name = '小米'\n",[252,81573,81574],{"class":254,"line":1917},[252,81575,33601],{"class":262},[252,81577,81578],{"class":254,"line":1922},[252,81579,81580],{"class":262},"    console.log(found1)\n",[252,81582,81583,81585,81587],{"class":254,"line":2716},[252,81584,52557],{"class":262},[252,81586,51953],{"class":51440},[252,81588,51447],{"class":262},[252,81590,81591,81593,81595],{"class":254,"line":2730},[252,81592,51925],{"class":262},[252,81594,51940],{"class":51440},[252,81596,51447],{"class":262},[19,81598,81599],{},[1601,81600],{"alt":169,"src":81601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81603,81604],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[207,81606,81607],{"start":170},[210,81608,81609],{},"every()返回的是布尔值",[19,81611,81612],{},[501,81613,81616],{"href":81614,"rel":81615},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24004],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81618,81619],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81621,81622],{},"some是只有有一个就没问题",[19,81624,81625],{},"every是必须全是才行",[244,81627,81631],{"className":81628,"code":81629,"language":81630,"meta":169,"style":169},"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",[22,81632,81633,81649,81663,81667,81676],{"__ignoreMap":169},[252,81634,81635,81637,81640,81642,81644,81647],{"class":254,"line":255},[252,81636,54589],{"class":258},[252,81638,81639],{"class":262}," isBigEnough(element, ",[252,81641,74198],{"class":258},[252,81643,12575],{"class":262},[252,81645,81646],{"class":258},"array",[252,81648,12582],{"class":262},[252,81650,81651,81654,81657,81659,81661],{"class":254,"line":170},[252,81652,81653],{"class":258},"  return",[252,81655,81656],{"class":262}," element ",[252,81658,1849],{"class":258},[252,81660,2177],{"class":311},[252,81662,1429],{"class":262},[252,81664,81665],{"class":254,"line":1318},[252,81666,1704],{"class":262},[252,81668,81669,81672,81674],{"class":254,"line":1333},[252,81670,81671],{"class":262},"[12, 5, 8, 130, 44].every(isBigEnough); ",[252,81673,33469],{"class":258},[252,81675,54656],{"class":262},[252,81677,81678,81681,81683],{"class":254,"line":1339},[252,81679,81680],{"class":262},"[12, 54, 18, 130, 44].every(isBigEnough); ",[252,81682,33469],{"class":258},[252,81684,58080],{"class":262},[244,81686,81688],{"className":53207,"code":81687,"language":53209,"meta":169,"style":169},"\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",[22,81689,81690,81698,81706,81711,81715,81720,81725,81733],{"__ignoreMap":169},[252,81691,81692,81694,81696],{"class":254,"line":255},[252,81693,1173],{"class":262},[252,81695,51940],{"class":51440},[252,81697,51447],{"class":262},[252,81699,81700,81702,81704],{"class":254,"line":170},[252,81701,52284],{"class":262},[252,81703,51953],{"class":51440},[252,81705,51447],{"class":262},[252,81707,81708],{"class":254,"line":1318},[252,81709,81710],{"class":262},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[252,81712,81713],{"class":254,"line":1333},[252,81714,78461],{"class":262},[252,81716,81717],{"class":254,"line":1339},[252,81718,81719],{"class":262},"    const flag = arr.every(item => item >= 10)\n",[252,81721,81722],{"class":254,"line":1353},[252,81723,81724],{"class":262},"    console.log(flag)    \u002F\u002Ftrue\n",[252,81726,81727,81729,81731],{"class":254,"line":1359},[252,81728,52557],{"class":262},[252,81730,51953],{"class":51440},[252,81732,51447],{"class":262},[252,81734,81735,81737,81739],{"class":254,"line":1450},[252,81736,51925],{"class":262},[252,81738,51940],{"class":51440},[252,81740,51447],{"class":262},[244,81742,81744],{"className":53207,"code":81743,"language":53209,"meta":169,"style":169},"\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",[22,81745,81746,81754,81762,81766,81771,81776,81781,81789],{"__ignoreMap":169},[252,81747,81748,81750,81752],{"class":254,"line":255},[252,81749,1173],{"class":262},[252,81751,51940],{"class":51440},[252,81753,51447],{"class":262},[252,81755,81756,81758,81760],{"class":254,"line":170},[252,81757,52284],{"class":262},[252,81759,51953],{"class":51440},[252,81761,51447],{"class":262},[252,81763,81764],{"class":254,"line":1318},[252,81765,81710],{"class":262},[252,81767,81768],{"class":254,"line":1333},[252,81769,81770],{"class":262},"    const arr = [10, 0, 5]\n",[252,81772,81773],{"class":254,"line":1339},[252,81774,81775],{"class":262},"    const flag = arr.some(item => item >= 10)\n",[252,81777,81778],{"class":254,"line":1353},[252,81779,81780],{"class":262},"    console.log(flag)   \u002F\u002Ftrue\n",[252,81782,81783,81785,81787],{"class":254,"line":1359},[252,81784,52557],{"class":262},[252,81786,51953],{"class":51440},[252,81788,51447],{"class":262},[252,81790,81791,81793,81795],{"class":254,"line":1450},[252,81792,51925],{"class":262},[252,81794,51940],{"class":51440},[252,81796,51447],{"class":262},[23049,81798,81800],{"id":81799},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,81802,81803],{},[1601,81804],{"alt":169,"src":81805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[244,81807,81809],{"className":50773,"code":81808,"language":50775,"meta":169,"style":169},"\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",[22,81810,81811,81821,81835,81839,81847,81861,81881,81893,81901,81908,81920,81932,81944,81956,81966,81976,81980,81988,81996,82000,82008,82020,82028,82050,82055,82060,82093,82101,82109,82113],{"__ignoreMap":169},[252,81812,81813,81815,81817,81819],{"class":254,"line":255},[252,81814,51437],{"class":262},[252,81816,51441],{"class":51440},[252,81818,51444],{"class":2102},[252,81820,51447],{"class":262},[252,81822,81823,81825,81827,81829,81831,81833],{"class":254,"line":170},[252,81824,1173],{"class":262},[252,81826,50775],{"class":51440},[252,81828,51456],{"class":2102},[252,81830,308],{"class":262},[252,81832,51461],{"class":367},[252,81834,51447],{"class":262},[252,81836,81837],{"class":254,"line":1318},[252,81838,2539],{"emptyLinePlaceholder":181},[252,81840,81841,81843,81845],{"class":254,"line":1333},[252,81842,1173],{"class":262},[252,81844,51474],{"class":51440},[252,81846,51447],{"class":262},[252,81848,81849,81851,81853,81855,81857,81859],{"class":254,"line":1339},[252,81850,52284],{"class":262},[252,81852,51484],{"class":51440},[252,81854,51487],{"class":2102},[252,81856,308],{"class":262},[252,81858,51492],{"class":367},[252,81860,51447],{"class":262},[252,81862,81863,81865,81867,81869,81871,81873,81875,81877,81879],{"class":254,"line":1353},[252,81864,52284],{"class":262},[252,81866,51484],{"class":51440},[252,81868,15060],{"class":2102},[252,81870,308],{"class":262},[252,81872,51531],{"class":367},[252,81874,51511],{"class":2102},[252,81876,308],{"class":262},[252,81878,51538],{"class":367},[252,81880,51447],{"class":262},[252,81882,81883,81885,81887,81889,81891],{"class":254,"line":1359},[252,81884,52284],{"class":262},[252,81886,51547],{"class":51440},[252,81888,51550],{"class":262},[252,81890,51547],{"class":51440},[252,81892,51447],{"class":262},[252,81894,81895,81897,81899],{"class":254,"line":1450},[252,81896,52284],{"class":262},[252,81898,5266],{"class":51440},[252,81900,51447],{"class":262},[252,81902,81903,81906],{"class":254,"line":1456},[252,81904,81905],{"class":51440},"    div",[252,81907,15712],{"class":262},[252,81909,81910,81912,81914,81916,81918],{"class":254,"line":1468},[252,81911,54911],{"class":311},[252,81913,51577],{"class":262},[252,81915,1861],{"class":311},[252,81917,51632],{"class":258},[252,81919,1429],{"class":262},[252,81921,81922,81924,81926,81928,81930],{"class":254,"line":1751},[252,81923,54925],{"class":311},[252,81925,51577],{"class":262},[252,81927,664],{"class":311},[252,81929,51632],{"class":258},[252,81931,1429],{"class":262},[252,81933,81934,81936,81938,81940,81942],{"class":254,"line":1756},[252,81935,57499],{"class":311},[252,81937,51577],{"class":262},[252,81939,664],{"class":311},[252,81941,51632],{"class":258},[252,81943,1429],{"class":262},[252,81945,81946,81948,81950,81952,81954],{"class":254,"line":1762},[252,81947,65273],{"class":311},[252,81949,51577],{"class":262},[252,81951,761],{"class":311},[252,81953,51632],{"class":258},[252,81955,1429],{"class":262},[252,81957,81958,81960,81962,81964],{"class":254,"line":1767},[252,81959,57426],{"class":311},[252,81961,51577],{"class":262},[252,81963,51732],{"class":311},[252,81965,1429],{"class":262},[252,81967,81968,81970,81972,81974],{"class":254,"line":1781},[252,81969,55024],{"class":311},[252,81971,51577],{"class":262},[252,81973,51785],{"class":311},[252,81975,1429],{"class":262},[252,81977,81978],{"class":254,"line":1786},[252,81979,2326],{"class":262},[252,81981,81982,81984,81986],{"class":254,"line":1792},[252,81983,52557],{"class":262},[252,81985,5266],{"class":51440},[252,81987,51447],{"class":262},[252,81989,81990,81992,81994],{"class":254,"line":1813},[252,81991,51925],{"class":262},[252,81993,51474],{"class":51440},[252,81995,51447],{"class":262},[252,81997,81998],{"class":254,"line":1818},[252,81999,2539],{"emptyLinePlaceholder":181},[252,82001,82002,82004,82006],{"class":254,"line":1832},[252,82003,1173],{"class":262},[252,82005,51940],{"class":51440},[252,82007,51447],{"class":262},[252,82009,82010,82012,82014,82016,82018],{"class":254,"line":1837},[252,82011,52284],{"class":262},[252,82013,51751],{"class":51440},[252,82015,55454],{"class":262},[252,82017,51751],{"class":51440},[252,82019,51447],{"class":262},[252,82021,82022,82024,82026],{"class":254,"line":1866},[252,82023,52284],{"class":262},[252,82025,51953],{"class":51440},[252,82027,51447],{"class":262},[252,82029,82030,82032,82035,82037,82040,82043,82045,82048],{"class":254,"line":1871},[252,82031,11361],{"class":258},[252,82033,82034],{"class":311}," spec",[252,82036,13704],{"class":258},[252,82038,82039],{"class":262}," { size: ",[252,82041,82042],{"class":367},"'40cm*40cm'",[252,82044,55604],{"class":262},[252,82046,82047],{"class":367},"'黑色'",[252,82049,55744],{"class":262},[252,82051,82052],{"class":254,"line":1888},[252,82053,82054],{"class":321},"    \u002F\u002F const arr = Object.values(spec)\n",[252,82056,82057],{"class":254,"line":1893},[252,82058,82059],{"class":321},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[252,82061,82062,82064,82066,82068,82071,82073,82075,82078,82081,82084,82086,82088,82091],{"class":254,"line":1898},[252,82063,52547],{"class":262},[252,82065,54539],{"class":2102},[252,82067,263],{"class":262},[252,82069,82070],{"class":367},"'div'",[252,82072,74389],{"class":262},[252,82074,308],{"class":258},[252,82076,82077],{"class":262}," Object.",[252,82079,82080],{"class":2102},"values",[252,82082,82083],{"class":262},"(spec).",[252,82085,74363],{"class":2102},[252,82087,263],{"class":262},[252,82089,82090],{"class":367},"'\u002F'",[252,82092,269],{"class":262},[252,82094,82095,82097,82099],{"class":254,"line":1903},[252,82096,52557],{"class":262},[252,82098,51953],{"class":51440},[252,82100,51447],{"class":262},[252,82102,82103,82105,82107],{"class":254,"line":1917},[252,82104,51925],{"class":262},[252,82106,51940],{"class":51440},[252,82108,51447],{"class":262},[252,82110,82111],{"class":254,"line":1922},[252,82112,2539],{"emptyLinePlaceholder":181},[252,82114,82115,82117,82119],{"class":254,"line":2716},[252,82116,51925],{"class":262},[252,82118,50775],{"class":51440},[252,82120,51447],{"class":262},[19,82122,82123],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23049,82125,82127],{"id":82126},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82129,82130],{},"静态方法，将伪数组转换为真数组",[19,82132,82133],{},[1601,82134],{"alt":169,"src":82135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[244,82137,82139],{"className":53207,"code":82138,"language":53209,"meta":169,"style":169},"\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",[22,82140,82141,82149,82157,82169,82181,82193,82201,82209,82214,82219,82224,82229,82237],{"__ignoreMap":169},[252,82142,82143,82145,82147],{"class":254,"line":255},[252,82144,1173],{"class":262},[252,82146,51940],{"class":51440},[252,82148,51447],{"class":262},[252,82150,82151,82153,82155],{"class":254,"line":170},[252,82152,52284],{"class":262},[252,82154,1270],{"class":51440},[252,82156,51447],{"class":262},[252,82158,82159,82161,82163,82165,82167],{"class":254,"line":1318},[252,82160,51481],{"class":262},[252,82162,210],{"class":51440},[252,82164,55454],{"class":262},[252,82166,210],{"class":51440},[252,82168,51447],{"class":262},[252,82170,82171,82173,82175,82177,82179],{"class":254,"line":1333},[252,82172,51481],{"class":262},[252,82174,210],{"class":51440},[252,82176,55454],{"class":262},[252,82178,210],{"class":51440},[252,82180,51447],{"class":262},[252,82182,82183,82185,82187,82189,82191],{"class":254,"line":1339},[252,82184,51481],{"class":262},[252,82186,210],{"class":51440},[252,82188,55454],{"class":262},[252,82190,210],{"class":51440},[252,82192,51447],{"class":262},[252,82194,82195,82197,82199],{"class":254,"line":1353},[252,82196,52557],{"class":262},[252,82198,1270],{"class":51440},[252,82200,51447],{"class":262},[252,82202,82203,82205,82207],{"class":254,"line":1359},[252,82204,52284],{"class":262},[252,82206,51953],{"class":51440},[252,82208,51447],{"class":262},[252,82210,82211],{"class":254,"line":1450},[252,82212,82213],{"class":262},"    const lis = document.querySelectorAll('li')\n",[252,82215,82216],{"class":254,"line":1456},[252,82217,82218],{"class":262},"    const liss = Array.from(lis)\n",[252,82220,82221],{"class":254,"line":1468},[252,82222,82223],{"class":262},"    liss.pop()\n",[252,82225,82226],{"class":254,"line":1751},[252,82227,82228],{"class":262},"    console.log(liss)\n",[252,82230,82231,82233,82235],{"class":254,"line":1756},[252,82232,52557],{"class":262},[252,82234,51953],{"class":51440},[252,82236,51447],{"class":262},[252,82238,82239,82241,82243],{"class":254,"line":1762},[252,82240,51925],{"class":262},[252,82242,51940],{"class":51440},[252,82244,51447],{"class":262},[19,82246,82247],{},[1601,82248],{"alt":169,"src":82249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22137,82251,82253],{"id":82252},"_41053-string","4.10.5.3 String",[19,82255,82256],{},[1601,82257],{"alt":169,"src":82258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23049,82260,82262],{"id":82261},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[244,82264,82266],{"className":53207,"code":82265,"language":53209,"meta":169,"style":169},"\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",[22,82267,82268,82276,82284,82289,82294,82299,82303,82308,82313,82318,82326],{"__ignoreMap":169},[252,82269,82270,82272,82274],{"class":254,"line":255},[252,82271,1173],{"class":262},[252,82273,51940],{"class":51440},[252,82275,51447],{"class":262},[252,82277,82278,82280,82282],{"class":254,"line":170},[252,82279,52284],{"class":262},[252,82281,51953],{"class":51440},[252,82283,51447],{"class":262},[252,82285,82286],{"class":254,"line":1318},[252,82287,82288],{"class":262},"    \u002F\u002F 把字符串转化为数组\n",[252,82290,82291],{"class":254,"line":1333},[252,82292,82293],{"class":262},"    const str = 'pink,red'\n",[252,82295,82296],{"class":254,"line":1339},[252,82297,82298],{"class":262},"    const arr = str.split(',')\n",[252,82300,82301],{"class":254,"line":1353},[252,82302,80777],{"class":262},[252,82304,82305],{"class":254,"line":1359},[252,82306,82307],{"class":262},"    const str1 = '2025-8-25'\n",[252,82309,82310],{"class":254,"line":1450},[252,82311,82312],{"class":262},"    const arr1 = str1.split('-')\n",[252,82314,82315],{"class":254,"line":1456},[252,82316,82317],{"class":262},"    console.log(arr1)\n",[252,82319,82320,82322,82324],{"class":254,"line":1468},[252,82321,52557],{"class":262},[252,82323,51953],{"class":51440},[252,82325,51447],{"class":262},[252,82327,82328,82330,82332],{"class":254,"line":1751},[252,82329,51925],{"class":262},[252,82331,51940],{"class":51440},[252,82333,51447],{"class":262},[23049,82335,82337],{"id":82336},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82339,5321],{},[19,82341,82342],{},"substring(indexStart)",[19,82344,82345],{},"substring(indexStart, indexEnd)",[1270,82347,82348,82359,82371,82381],{},[210,82349,82350,82351,82354,82355,82358],{},"如果省略了 ",[22,82352,82353],{},"indexEnd","，则 ",[22,82356,82357],{},"substring()"," 提取字符直到字符串的末尾",[210,82360,82361,82362,82365,82366,82354,82368,82370],{},"如果 ",[22,82363,82364],{},"indexStart"," 等于 ",[22,82367,82353],{},[22,82369,82357],{}," 返回一个空字符串",[210,82372,82361,82373,82375,82376,82354,82378,82380],{},[22,82374,82364],{}," 大于 ",[22,82377,82353],{},[22,82379,82357],{}," 的效果就像交换了这两个参数一样",[210,82382,82383],{},"结束的索引号不包含想要截取的部分",[244,82385,82387],{"className":81628,"code":82386,"language":81630,"meta":169,"style":169},"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",[22,82388,82389,82401,82405,82439,82469,82473,82504,82508,82535,82565,82595,82599,82630],{"__ignoreMap":169},[252,82390,82391,82394,82396,82399],{"class":254,"line":255},[252,82392,82393],{"class":262},"const anyString ",[252,82395,308],{"class":258},[252,82397,82398],{"class":367}," \"Mozilla\"",[252,82400,1429],{"class":262},[252,82402,82403],{"class":254,"line":170},[252,82404,2539],{"emptyLinePlaceholder":181},[252,82406,82407,82410,82412,82414,82416,82419,82421,82424,82426,82428,82430,82432,82434,82436],{"class":254,"line":1318},[252,82408,82409],{"class":311},"console",[252,82411,821],{"class":262},[252,82413,58387],{"class":311},[252,82415,263],{"class":262},[252,82417,82418],{"class":311},"anyString",[252,82420,821],{"class":262},[252,82422,82423],{"class":311},"substring",[252,82425,263],{"class":262},[252,82427,454],{"class":311},[252,82429,12575],{"class":262},[252,82431,480],{"class":311},[252,82433,75393],{"class":262},[252,82435,33469],{"class":258},[252,82437,82438],{"class":367}," 'M'\n",[252,82440,82441,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461,82463,82465,82467],{"class":254,"line":1333},[252,82442,82409],{"class":311},[252,82444,821],{"class":262},[252,82446,58387],{"class":311},[252,82448,263],{"class":262},[252,82450,82418],{"class":311},[252,82452,821],{"class":262},[252,82454,82423],{"class":311},[252,82456,263],{"class":262},[252,82458,480],{"class":311},[252,82460,12575],{"class":262},[252,82462,454],{"class":311},[252,82464,75393],{"class":262},[252,82466,33469],{"class":258},[252,82468,82438],{"class":367},[252,82470,82471],{"class":254,"line":1339},[252,82472,2539],{"emptyLinePlaceholder":181},[252,82474,82475,82477,82479,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499,82501],{"class":254,"line":1353},[252,82476,82409],{"class":311},[252,82478,821],{"class":262},[252,82480,58387],{"class":311},[252,82482,263],{"class":262},[252,82484,82418],{"class":311},[252,82486,821],{"class":262},[252,82488,82423],{"class":311},[252,82490,263],{"class":262},[252,82492,454],{"class":311},[252,82494,12575],{"class":262},[252,82496,607],{"class":311},[252,82498,75393],{"class":262},[252,82500,33469],{"class":258},[252,82502,82503],{"class":367}," 'Mozill'\n",[252,82505,82506],{"class":254,"line":1359},[252,82507,2539],{"emptyLinePlaceholder":181},[252,82509,82510,82512,82514,82516,82518,82520,82522,82524,82526,82528,82530,82532],{"class":254,"line":1450},[252,82511,82409],{"class":311},[252,82513,821],{"class":262},[252,82515,58387],{"class":311},[252,82517,263],{"class":262},[252,82519,82418],{"class":311},[252,82521,821],{"class":262},[252,82523,82423],{"class":311},[252,82525,263],{"class":262},[252,82527,556],{"class":311},[252,82529,75393],{"class":262},[252,82531,33469],{"class":258},[252,82533,82534],{"class":367}," 'lla'\n",[252,82536,82537,82539,82541,82543,82545,82547,82549,82551,82553,82555,82557,82559,82561,82563],{"class":254,"line":1456},[252,82538,82409],{"class":311},[252,82540,821],{"class":262},[252,82542,58387],{"class":311},[252,82544,263],{"class":262},[252,82546,82418],{"class":311},[252,82548,821],{"class":262},[252,82550,82423],{"class":311},[252,82552,263],{"class":262},[252,82554,556],{"class":311},[252,82556,12575],{"class":262},[252,82558,632],{"class":311},[252,82560,75449],{"class":262},[252,82562,33469],{"class":258},[252,82564,82534],{"class":367},[252,82566,82567,82569,82571,82573,82575,82577,82579,82581,82583,82585,82587,82589,82591,82593],{"class":254,"line":1468},[252,82568,82409],{"class":311},[252,82570,821],{"class":262},[252,82572,58387],{"class":311},[252,82574,263],{"class":262},[252,82576,82418],{"class":311},[252,82578,821],{"class":262},[252,82580,82423],{"class":311},[252,82582,263],{"class":262},[252,82584,632],{"class":311},[252,82586,12575],{"class":262},[252,82588,556],{"class":311},[252,82590,75393],{"class":262},[252,82592,33469],{"class":258},[252,82594,82534],{"class":367},[252,82596,82597],{"class":254,"line":1751},[252,82598,2539],{"emptyLinePlaceholder":181},[252,82600,82601,82603,82605,82607,82609,82611,82613,82615,82617,82619,82621,82623,82625,82627],{"class":254,"line":1756},[252,82602,82409],{"class":311},[252,82604,821],{"class":262},[252,82606,58387],{"class":311},[252,82608,263],{"class":262},[252,82610,82418],{"class":311},[252,82612,821],{"class":262},[252,82614,82423],{"class":311},[252,82616,263],{"class":262},[252,82618,454],{"class":311},[252,82620,12575],{"class":262},[252,82622,632],{"class":311},[252,82624,75393],{"class":262},[252,82626,33469],{"class":258},[252,82628,82629],{"class":367}," 'Mozilla'\n",[252,82631,82632,82634,82636,82638,82640,82642,82644,82646,82648,82650,82652,82654,82656,82658],{"class":254,"line":1762},[252,82633,82409],{"class":311},[252,82635,821],{"class":262},[252,82637,58387],{"class":311},[252,82639,263],{"class":262},[252,82641,82418],{"class":311},[252,82643,821],{"class":262},[252,82645,82423],{"class":311},[252,82647,263],{"class":262},[252,82649,454],{"class":311},[252,82651,12575],{"class":262},[252,82653,709],{"class":311},[252,82655,75393],{"class":262},[252,82657,33469],{"class":258},[252,82659,82629],{"class":367},[23049,82661,82663],{"id":82662},"_410533-startswith","4.10.5.3.3 startsWith",[19,82665,82666,82669,82670,82675,82676,84,82678],{},[22,82667,82668],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[412,82671,82672],{},[22,82673,82674],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[22,82677,1501],{},[22,82679,66160],{},[244,82681,82683],{"className":77634,"code":82682,"language":77636,"meta":169,"style":169},"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",[22,82684,82685,82697,82716,82721,82741],{"__ignoreMap":169},[252,82686,82687,82689,82692,82694],{"class":254,"line":255},[252,82688,6932],{"class":258},[252,82690,82691],{"class":262}," str1 ",[252,82693,308],{"class":258},[252,82695,82696],{"class":367}," \"Saturday night plans\"\n",[252,82698,82699,82701,82703,82706,82709,82711,82714],{"class":254,"line":170},[252,82700,77671],{"class":262},[252,82702,58387],{"class":2102},[252,82704,82705],{"class":262},"(str1.",[252,82707,82708],{"class":2102},"startsWith",[252,82710,263],{"class":262},[252,82712,82713],{"class":367},"\"Sat\"",[252,82715,30637],{"class":262},[252,82717,82718],{"class":254,"line":1318},[252,82719,82720],{"class":321},"\u002F\u002F Expected output: true\n",[252,82722,82723,82725,82727,82729,82731,82733,82735,82737,82739],{"class":254,"line":1333},[252,82724,77671],{"class":262},[252,82726,58387],{"class":2102},[252,82728,82705],{"class":262},[252,82730,82708],{"class":2102},[252,82732,263],{"class":262},[252,82734,82713],{"class":367},[252,82736,12575],{"class":262},[252,82738,334],{"class":311},[252,82740,30637],{"class":262},[252,82742,82743],{"class":254,"line":1339},[252,82744,82745],{"class":321},"\u002F\u002F Expected output: false\n",[244,82747,82749],{"className":50773,"code":82748,"language":50775,"meta":169,"style":169},"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",[22,82750,82751,82756,82761,82765,82770,82775],{"__ignoreMap":169},[252,82752,82753],{"class":254,"line":255},[252,82754,82755],{"class":262},"startsWith(searchString)\n",[252,82757,82758],{"class":254,"line":170},[252,82759,82760],{"class":262},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[252,82762,82763],{"class":254,"line":1318},[252,82764,2539],{"emptyLinePlaceholder":181},[252,82766,82767],{"class":254,"line":1333},[252,82768,82769],{"class":262},"const str3 = 'pink老师上课中'\n",[252,82771,82772],{"class":254,"line":1339},[252,82773,82774],{"class":262},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[252,82776,82777],{"class":254,"line":1353},[252,82778,82779],{"class":262},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23049,82781,82783],{"id":82782},"_410534-includes","4.10.5.3.4 includes",[19,82785,82786],{},"includes(searchString) includes(searchString, position)",[207,82788,82789],{},[210,82790,82791],{},"searchString:",[19,82793,82794,82795,82797,82798,82803,82804,82809,82810,21639,82813,82816,82817,82820],{},"一个要在 ",[22,82796,1438],{}," 中查找的字符串。",[501,82799,82802],{"href":82800,"rel":82801},"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",[24004],"不能是正则表达式","。所有非正则表达式的值都会被",[501,82805,82808],{"href":82806,"rel":82807},"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",[24004],"强制转换为字符串","，因此如果该参数被省略或传入 ",[22,82811,82812],{},"undefined",[22,82814,82815],{},"includes()"," 方法会在字符串中搜索 ",[22,82818,82819],{},"\"undefined\"","，这通常不是你想要的",[207,82822,82823],{"start":170},[210,82824,82825,1122],{},[22,82826,82827],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,82829,82830,82831,82834,82835],{},"在字符串中开始搜索 ",[22,82832,82833],{},"searchString"," 的位置。默认值为 ",[22,82836,454],{},[207,82838,82839],{"start":1318},[210,82840,82841],{},"返回值：",[19,82843,82844,82845,82847,82848,82852,82853],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[22,82846,82833],{}," 为空字符串的情况），则返回 ",[412,82849,82850],{},[22,82851,1501],{}," ，否则返回 ",[412,82854,82855],{},[22,82856,66160],{},[207,82858,82859],{"start":1333},[210,82860,82861],{},"异常：",[19,82863,82361,82864,13935,82866,82870],{},[22,82865,82833],{},[501,82867,82869],{"href":82800,"rel":82868},[24004],"是一个正则表达式","，则会抛出",[19,82872,82873],{},"只要是有就是true，不需要非得以谁开头结尾",[244,82875,82877],{"className":77634,"code":82876,"language":77636,"meta":169,"style":169},"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",[22,82878,82879,82890,82913,82932,82952,82974,82993],{"__ignoreMap":169},[252,82880,82881,82883,82885,82887],{"class":254,"line":255},[252,82882,6932],{"class":258},[252,82884,79914],{"class":262},[252,82886,308],{"class":258},[252,82888,82889],{"class":367}," \"To be, or not to be, that is the question.\"\n",[252,82891,82892,82894,82896,82899,82902,82904,82907,82910],{"class":254,"line":170},[252,82893,77671],{"class":262},[252,82895,58387],{"class":2102},[252,82897,82898],{"class":262},"(str.",[252,82900,82901],{"class":2102},"includes",[252,82903,263],{"class":262},[252,82905,82906],{"class":367},"\"To be\"",[252,82908,82909],{"class":262},"))",[252,82911,82912],{"class":321},"  \u002F\u002F true\n",[252,82914,82915,82917,82919,82921,82923,82925,82928,82930],{"class":254,"line":1318},[252,82916,77671],{"class":262},[252,82918,58387],{"class":2102},[252,82920,82898],{"class":262},[252,82922,82901],{"class":2102},[252,82924,263],{"class":262},[252,82926,82927],{"class":367},"\"question\"",[252,82929,82909],{"class":262},[252,82931,82912],{"class":321},[252,82933,82934,82936,82938,82940,82942,82944,82947,82949],{"class":254,"line":1333},[252,82935,77671],{"class":262},[252,82937,58387],{"class":2102},[252,82939,82898],{"class":262},[252,82941,82901],{"class":2102},[252,82943,263],{"class":262},[252,82945,82946],{"class":367},"\"nonexistent\"",[252,82948,82909],{"class":262},[252,82950,82951],{"class":321},"  \u002F\u002F false\n",[252,82953,82954,82956,82958,82960,82962,82964,82966,82968,82970,82972],{"class":254,"line":1339},[252,82955,77671],{"class":262},[252,82957,58387],{"class":2102},[252,82959,82898],{"class":262},[252,82961,82901],{"class":2102},[252,82963,263],{"class":262},[252,82965,82906],{"class":367},[252,82967,12575],{"class":262},[252,82969,480],{"class":311},[252,82971,82909],{"class":262},[252,82973,82951],{"class":321},[252,82975,82976,82978,82980,82982,82984,82986,82989,82991],{"class":254,"line":1353},[252,82977,77671],{"class":262},[252,82979,58387],{"class":2102},[252,82981,82898],{"class":262},[252,82983,82901],{"class":2102},[252,82985,263],{"class":262},[252,82987,82988],{"class":367},"\"TO BE\"",[252,82990,82909],{"class":262},[252,82992,82951],{"class":321},[252,82994,82995,82997,82999,83001,83003,83005,83007,83009],{"class":254,"line":1359},[252,82996,77671],{"class":262},[252,82998,58387],{"class":2102},[252,83000,82898],{"class":262},[252,83002,82901],{"class":2102},[252,83004,263],{"class":262},[252,83006,7792],{"class":367},[252,83008,82909],{"class":262},[252,83010,82912],{"class":321},[23049,83012,83014],{"id":83013},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[244,83016,83018],{"className":53207,"code":83017,"language":53209,"meta":169,"style":169},"\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",[22,83019,83020,83028,83036,83041,83046,83051,83056,83061,83069],{"__ignoreMap":169},[252,83021,83022,83024,83026],{"class":254,"line":255},[252,83023,1173],{"class":262},[252,83025,51940],{"class":51440},[252,83027,51447],{"class":262},[252,83029,83030,83032,83034],{"class":254,"line":170},[252,83031,52284],{"class":262},[252,83033,51953],{"class":51440},[252,83035,51447],{"class":262},[252,83037,83038],{"class":254,"line":1318},[252,83039,83040],{"class":262},"    const num = 10\n",[252,83042,83043],{"class":254,"line":1333},[252,83044,83045],{"class":262},"    \u002F\u002F 强制转换\n",[252,83047,83048],{"class":254,"line":1339},[252,83049,83050],{"class":262},"    console.log(String(num))\n",[252,83052,83053],{"class":254,"line":1353},[252,83054,83055],{"class":262},"    \u002F\u002F toString()方法转换\n",[252,83057,83058],{"class":254,"line":1359},[252,83059,83060],{"class":262},"    console.log(num.toString())\n",[252,83062,83063,83065,83067],{"class":254,"line":1450},[252,83064,52557],{"class":262},[252,83066,51953],{"class":51440},[252,83068,51447],{"class":262},[252,83070,83071,83073,83075],{"class":254,"line":1456},[252,83072,51925],{"class":262},[252,83074,51940],{"class":51440},[252,83076,51447],{"class":262},[23049,83078,83080],{"id":83079},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83082,83083],{},[1601,83084],{"alt":169,"src":83085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[244,83087,83089],{"className":50773,"code":83088,"language":50775,"meta":169,"style":169},"\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",[22,83090,83091,83101,83115,83119,83127,83141,83161,83173,83181,83185,83193,83205,83213,83225,83230,83235,83240,83287,83303,83311,83319,83323],{"__ignoreMap":169},[252,83092,83093,83095,83097,83099],{"class":254,"line":255},[252,83094,51437],{"class":262},[252,83096,51441],{"class":51440},[252,83098,51444],{"class":2102},[252,83100,51447],{"class":262},[252,83102,83103,83105,83107,83109,83111,83113],{"class":254,"line":170},[252,83104,1173],{"class":262},[252,83106,50775],{"class":51440},[252,83108,51456],{"class":2102},[252,83110,308],{"class":262},[252,83112,51461],{"class":367},[252,83114,51447],{"class":262},[252,83116,83117],{"class":254,"line":1318},[252,83118,2539],{"emptyLinePlaceholder":181},[252,83120,83121,83123,83125],{"class":254,"line":1333},[252,83122,1173],{"class":262},[252,83124,51474],{"class":51440},[252,83126,51447],{"class":262},[252,83128,83129,83131,83133,83135,83137,83139],{"class":254,"line":1339},[252,83130,52284],{"class":262},[252,83132,51484],{"class":51440},[252,83134,51487],{"class":2102},[252,83136,308],{"class":262},[252,83138,51492],{"class":367},[252,83140,51447],{"class":262},[252,83142,83143,83145,83147,83149,83151,83153,83155,83157,83159],{"class":254,"line":1353},[252,83144,52284],{"class":262},[252,83146,51484],{"class":51440},[252,83148,15060],{"class":2102},[252,83150,308],{"class":262},[252,83152,51531],{"class":367},[252,83154,51511],{"class":2102},[252,83156,308],{"class":262},[252,83158,51538],{"class":367},[252,83160,51447],{"class":262},[252,83162,83163,83165,83167,83169,83171],{"class":254,"line":1359},[252,83164,52284],{"class":262},[252,83166,51547],{"class":51440},[252,83168,51550],{"class":262},[252,83170,51547],{"class":51440},[252,83172,51447],{"class":262},[252,83174,83175,83177,83179],{"class":254,"line":1450},[252,83176,51925],{"class":262},[252,83178,51474],{"class":51440},[252,83180,51447],{"class":262},[252,83182,83183],{"class":254,"line":1456},[252,83184,2539],{"emptyLinePlaceholder":181},[252,83186,83187,83189,83191],{"class":254,"line":1468},[252,83188,1173],{"class":262},[252,83190,51940],{"class":51440},[252,83192,51447],{"class":262},[252,83194,83195,83197,83199,83201,83203],{"class":254,"line":1751},[252,83196,52284],{"class":262},[252,83198,51751],{"class":51440},[252,83200,55454],{"class":262},[252,83202,51751],{"class":51440},[252,83204,51447],{"class":262},[252,83206,83207,83209,83211],{"class":254,"line":1756},[252,83208,52284],{"class":262},[252,83210,51953],{"class":51440},[252,83212,51447],{"class":262},[252,83214,83215,83217,83220,83222],{"class":254,"line":1762},[252,83216,11361],{"class":258},[252,83218,83219],{"class":311}," gift",[252,83221,13704],{"class":258},[252,83223,83224],{"class":367}," '50g的茶叶，清洗球'\n",[252,83226,83227],{"class":254,"line":1767},[252,83228,83229],{"class":321},"    \u002F\u002F 1.把字符串拆分为数组\n",[252,83231,83232],{"class":254,"line":1781},[252,83233,83234],{"class":321},"    \u002F\u002F console.log(gift.split(','))\n",[252,83236,83237],{"class":254,"line":1786},[252,83238,83239],{"class":321},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[252,83241,83242,83244,83246,83248,83251,83254,83256,83259,83261,83263,83265,83267,83269,83272,83274,83277,83279,83281,83283,83285],{"class":254,"line":1792},[252,83243,11361],{"class":258},[252,83245,74059],{"class":311},[252,83247,13704],{"class":258},[252,83249,83250],{"class":262}," gift.",[252,83252,83253],{"class":2102},"split",[252,83255,263],{"class":262},[252,83257,83258],{"class":367},"'，'",[252,83260,30966],{"class":262},[252,83262,74184],{"class":2102},[252,83264,263],{"class":262},[252,83266,79934],{"class":5356},[252,83268,79937],{"class":258},[252,83270,83271],{"class":367}," `\u003Cspan>【赠品】${",[252,83273,79934],{"class":262},[252,83275,83276],{"class":367},"}\u003C\u002Fspan>\u003Cbr>`",[252,83278,30966],{"class":262},[252,83280,74363],{"class":2102},[252,83282,263],{"class":262},[252,83284,74368],{"class":367},[252,83286,269],{"class":262},[252,83288,83289,83291,83293,83295,83297,83299,83301],{"class":254,"line":1813},[252,83290,52547],{"class":262},[252,83292,54539],{"class":2102},[252,83294,263],{"class":262},[252,83296,82070],{"class":367},[252,83298,74389],{"class":262},[252,83300,308],{"class":258},[252,83302,74125],{"class":262},[252,83304,83305,83307,83309],{"class":254,"line":1818},[252,83306,52557],{"class":262},[252,83308,51953],{"class":51440},[252,83310,51447],{"class":262},[252,83312,83313,83315,83317],{"class":254,"line":1832},[252,83314,51925],{"class":262},[252,83316,51940],{"class":51440},[252,83318,51447],{"class":262},[252,83320,83321],{"class":254,"line":1837},[252,83322,2539],{"emptyLinePlaceholder":181},[252,83324,83325,83327,83329],{"class":254,"line":1866},[252,83326,51925],{"class":262},[252,83328,50775],{"class":51440},[252,83330,51447],{"class":262},[22137,83332,83334],{"id":83333},"_41054-number","4.10.5.4 Number",[19,83336,83337],{},[1601,83338],{"alt":169,"src":83339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83341,83342],{},"整数也可以进行toFixed来保留小数",[19,83344,83345],{},"比如：",[19,83347,83348],{},"const price=10",[19,83350,83351],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22137,83353,83355],{"id":83354},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83357,83358],{},[1601,83359],{"alt":169,"src":83360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[244,83362,83364],{"className":50773,"code":83363,"language":50775,"meta":169,"style":169},"\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",[22,83365,83366,83376,83390,83394,83402,83416,83436,83448,83456,83462,83472,83482,83492,83496,83500,83506,83518,83532,83536,83540,83546,83558,83574,83584,83600,83604,83608,83614,83624,83634,83638,83642,83650,83662,83674,83686,83690,83694,83702,83714,83718,83722,83733,83743,83755,83767,83777,83781,83785,83793,83802,83814,83824,83834,83838,83842,83850,83859,83866,83876,83888,83892,83896,83905,83915,83926,83938,83950,83954,83958,83967,83977,83988,83992,83996,84002,84014,84026,84036,84046,84064,84076,84080,84084,84093,84105,84115,84125,84137,84141,84149,84157,84161,84169,84183,84191,84205,84233,84241,84249,84259,84263,84271,84279,84288,84296,84305,84315,84319,84323,84331,84339,84348,84356,84364,84377,84381,84385,84393,84401,84410,84418,84426,84441,84445,84449,84457,84465,84474,84482,84490,84504,84512,84516,84520,84525,84551,84556,84593,84598,84621,84626,84680,84685,84721,84725,84731,84736,84745,84759,84768,84787,84796,84806,84811,84816,84829,84834,84888,84914,84922,84930,84934],{"__ignoreMap":169},[252,83367,83368,83370,83372,83374],{"class":254,"line":255},[252,83369,51437],{"class":262},[252,83371,51441],{"class":51440},[252,83373,51444],{"class":2102},[252,83375,51447],{"class":262},[252,83377,83378,83380,83382,83384,83386,83388],{"class":254,"line":170},[252,83379,1173],{"class":262},[252,83381,50775],{"class":51440},[252,83383,51456],{"class":2102},[252,83385,308],{"class":262},[252,83387,51461],{"class":367},[252,83389,51447],{"class":262},[252,83391,83392],{"class":254,"line":1318},[252,83393,2539],{"emptyLinePlaceholder":181},[252,83395,83396,83398,83400],{"class":254,"line":1333},[252,83397,1173],{"class":262},[252,83399,51474],{"class":51440},[252,83401,51447],{"class":262},[252,83403,83404,83406,83408,83410,83412,83414],{"class":254,"line":1339},[252,83405,52284],{"class":262},[252,83407,51484],{"class":51440},[252,83409,51487],{"class":2102},[252,83411,308],{"class":262},[252,83413,51492],{"class":367},[252,83415,51447],{"class":262},[252,83417,83418,83420,83422,83424,83426,83428,83430,83432,83434],{"class":254,"line":1353},[252,83419,52284],{"class":262},[252,83421,51484],{"class":51440},[252,83423,15060],{"class":2102},[252,83425,308],{"class":262},[252,83427,51531],{"class":367},[252,83429,51511],{"class":2102},[252,83431,308],{"class":262},[252,83433,51538],{"class":367},[252,83435,51447],{"class":262},[252,83437,83438,83440,83442,83444,83446],{"class":254,"line":1359},[252,83439,52284],{"class":262},[252,83441,51547],{"class":51440},[252,83443,51550],{"class":262},[252,83445,51547],{"class":51440},[252,83447,51447],{"class":262},[252,83449,83450,83452,83454],{"class":254,"line":1450},[252,83451,52284],{"class":262},[252,83453,5266],{"class":51440},[252,83455,51447],{"class":262},[252,83457,83458,83460],{"class":254,"line":1456},[252,83459,6543],{"class":51440},[252,83461,15712],{"class":262},[252,83463,83464,83466,83468,83470],{"class":254,"line":1468},[252,83465,54835],{"class":311},[252,83467,51577],{"class":262},[252,83469,454],{"class":311},[252,83471,1429],{"class":262},[252,83473,83474,83476,83478,83480],{"class":254,"line":1751},[252,83475,54846],{"class":311},[252,83477,51577],{"class":262},[252,83479,454],{"class":311},[252,83481,1429],{"class":262},[252,83483,83484,83486,83488,83490],{"class":254,"line":1756},[252,83485,72736],{"class":311},[252,83487,51577],{"class":262},[252,83489,60645],{"class":311},[252,83491,1429],{"class":262},[252,83493,83494],{"class":254,"line":1762},[252,83495,2326],{"class":262},[252,83497,83498],{"class":254,"line":1767},[252,83499,2539],{"emptyLinePlaceholder":181},[252,83501,83502,83504],{"class":254,"line":1781},[252,83503,62263],{"class":2102},[252,83505,15712],{"class":262},[252,83507,83508,83510,83512,83514,83516],{"class":254,"line":1786},[252,83509,54911],{"class":311},[252,83511,51577],{"class":262},[252,83513,78713],{"class":311},[252,83515,51632],{"class":258},[252,83517,1429],{"class":262},[252,83519,83520,83522,83524,83526,83528,83530],{"class":254,"line":1792},[252,83521,54846],{"class":311},[252,83523,51577],{"class":262},[252,83525,574],{"class":311},[252,83527,51632],{"class":258},[252,83529,51696],{"class":311},[252,83531,1429],{"class":262},[252,83533,83534],{"class":254,"line":1813},[252,83535,2326],{"class":262},[252,83537,83538],{"class":254,"line":1818},[252,83539,2539],{"emptyLinePlaceholder":181},[252,83541,83542,83544],{"class":254,"line":1832},[252,83543,78764],{"class":2102},[252,83545,15712],{"class":262},[252,83547,83548,83550,83552,83554,83556],{"class":254,"line":1837},[252,83549,54835],{"class":311},[252,83551,51577],{"class":262},[252,83553,838],{"class":311},[252,83555,51632],{"class":258},[252,83557,1429],{"class":262},[252,83559,83560,83562,83564,83566,83568,83570,83572],{"class":254,"line":1866},[252,83561,62000],{"class":311},[252,83563,51577],{"class":262},[252,83565,28261],{"class":311},[252,83567,78819],{"class":311},[252,83569,78822],{"class":311},[252,83571,958],{"class":258},[252,83573,1429],{"class":262},[252,83575,83576,83578,83580,83582],{"class":254,"line":1871},[252,83577,55149],{"class":311},[252,83579,51577],{"class":262},[252,83581,51617],{"class":311},[252,83583,1429],{"class":262},[252,83585,83586,83588,83590,83592,83594,83596,83598],{"class":254,"line":1888},[252,83587,62117],{"class":311},[252,83589,51577],{"class":262},[252,83591,480],{"class":311},[252,83593,51632],{"class":258},[252,83595,51661],{"class":311},[252,83597,62384],{"class":311},[252,83599,1429],{"class":262},[252,83601,83602],{"class":254,"line":1893},[252,83603,2326],{"class":262},[252,83605,83606],{"class":254,"line":1898},[252,83607,2539],{"emptyLinePlaceholder":181},[252,83609,83610,83612],{"class":254,"line":1903},[252,83611,78882],{"class":2102},[252,83613,15712],{"class":262},[252,83615,83616,83618,83620,83622],{"class":254,"line":1917},[252,83617,62165],{"class":311},[252,83619,51577],{"class":262},[252,83621,62170],{"class":311},[252,83623,1429],{"class":262},[252,83625,83626,83628,83630,83632],{"class":254,"line":1922},[252,83627,55024],{"class":311},[252,83629,51577],{"class":262},[252,83631,61958],{"class":311},[252,83633,1429],{"class":262},[252,83635,83636],{"class":254,"line":2716},[252,83637,2326],{"class":262},[252,83639,83640],{"class":254,"line":2730},[252,83641,2539],{"emptyLinePlaceholder":181},[252,83643,83644,83646,83648],{"class":254,"line":2738},[252,83645,78764],{"class":2102},[252,83647,55755],{"class":51440},[252,83649,15712],{"class":262},[252,83651,83652,83654,83656,83658,83660],{"class":254,"line":2743},[252,83653,54911],{"class":311},[252,83655,51577],{"class":262},[252,83657,875],{"class":311},[252,83659,51632],{"class":258},[252,83661,1429],{"class":262},[252,83663,83664,83666,83668,83670,83672],{"class":254,"line":2749},[252,83665,54925],{"class":311},[252,83667,51577],{"class":262},[252,83669,875],{"class":311},[252,83671,51632],{"class":258},[252,83673,1429],{"class":262},[252,83675,83676,83678,83680,83682,83684],{"class":254,"line":2755},[252,83677,61890],{"class":311},[252,83679,51577],{"class":262},[252,83681,582],{"class":311},[252,83683,51632],{"class":258},[252,83685,1429],{"class":262},[252,83687,83688],{"class":254,"line":2760},[252,83689,2326],{"class":262},[252,83691,83692],{"class":254,"line":8088},[252,83693,2539],{"emptyLinePlaceholder":181},[252,83695,83696,83698,83700],{"class":254,"line":8112},[252,83697,78764],{"class":2102},[252,83699,62444],{"class":2102},[252,83701,15712],{"class":262},[252,83703,83704,83706,83708,83710,83712],{"class":254,"line":8117},[252,83705,54911],{"class":311},[252,83707,51577],{"class":262},[252,83709,1861],{"class":311},[252,83711,51632],{"class":258},[252,83713,1429],{"class":262},[252,83715,83716],{"class":254,"line":8123},[252,83717,2326],{"class":262},[252,83719,83720],{"class":254,"line":8150},[252,83721,2539],{"emptyLinePlaceholder":181},[252,83723,83724,83726,83728,83731],{"class":254,"line":8155},[252,83725,78764],{"class":2102},[252,83727,62444],{"class":2102},[252,83729,83730],{"class":2102}," .tag",[252,83732,15712],{"class":262},[252,83734,83735,83737,83739,83741],{"class":254,"line":8161},[252,83736,55149],{"class":311},[252,83738,51577],{"class":262},[252,83740,61009],{"class":311},[252,83742,1429],{"class":262},[252,83744,83745,83747,83749,83751,83753],{"class":254,"line":8173},[252,83746,54835],{"class":311},[252,83748,51577],{"class":262},[252,83750,340],{"class":311},[252,83752,51632],{"class":258},[252,83754,1429],{"class":262},[252,83756,83757,83759,83761,83763,83765],{"class":254,"line":8185},[252,83758,55062],{"class":311},[252,83760,51577],{"class":262},[252,83762,761],{"class":311},[252,83764,51632],{"class":258},[252,83766,1429],{"class":262},[252,83768,83769,83771,83773,83775],{"class":254,"line":8197},[252,83770,57556],{"class":311},[252,83772,51577],{"class":262},[252,83774,62210],{"class":311},[252,83776,1429],{"class":262},[252,83778,83779],{"class":254,"line":9856},[252,83780,2326],{"class":262},[252,83782,83783],{"class":254,"line":9881},[252,83784,2539],{"emptyLinePlaceholder":181},[252,83786,83787,83789,83791],{"class":254,"line":9904},[252,83788,78764],{"class":2102},[252,83790,79056],{"class":2102},[252,83792,31606],{"class":262},[252,83794,83795,83797,83800],{"class":254,"line":9928},[252,83796,78764],{"class":2102},[252,83798,83799],{"class":2102}," .sub-total",[252,83801,15712],{"class":262},[252,83803,83804,83806,83808,83810,83812],{"class":254,"line":9933},[252,83805,55062],{"class":311},[252,83807,51577],{"class":262},[252,83809,913],{"class":311},[252,83811,51632],{"class":258},[252,83813,1429],{"class":262},[252,83815,83816,83818,83820,83822],{"class":254,"line":9938},[252,83817,57556],{"class":311},[252,83819,51577],{"class":262},[252,83821,79079],{"class":311},[252,83823,1429],{"class":262},[252,83825,83826,83828,83830,83832],{"class":254,"line":9943},[252,83827,61977],{"class":311},[252,83829,51577],{"class":262},[252,83831,480],{"class":311},[252,83833,1429],{"class":262},[252,83835,83836],{"class":254,"line":9952},[252,83837,2326],{"class":262},[252,83839,83840],{"class":254,"line":9957},[252,83841,2539],{"emptyLinePlaceholder":181},[252,83843,83844,83846,83848],{"class":254,"line":9963},[252,83845,78764],{"class":2102},[252,83847,79096],{"class":2102},[252,83849,31606],{"class":262},[252,83851,83852,83854,83857],{"class":254,"line":9984},[252,83853,78764],{"class":2102},[252,83855,83856],{"class":2102}," .sub-total::before",[252,83858,31606],{"class":262},[252,83860,83861,83864],{"class":254,"line":9990},[252,83862,83863],{"class":2102},"    .amount::before",[252,83865,15712],{"class":262},[252,83867,83868,83870,83872,83874],{"class":254,"line":10004},[252,83869,79103],{"class":311},[252,83871,51577],{"class":262},[252,83873,79108],{"class":367},[252,83875,1429],{"class":262},[252,83877,83878,83880,83882,83884,83886],{"class":254,"line":10010},[252,83879,55062],{"class":311},[252,83881,51577],{"class":262},[252,83883,761],{"class":311},[252,83885,51632],{"class":258},[252,83887,1429],{"class":262},[252,83889,83890],{"class":254,"line":10037},[252,83891,2326],{"class":262},[252,83893,83894],{"class":254,"line":10046},[252,83895,2539],{"emptyLinePlaceholder":181},[252,83897,83898,83900,83903],{"class":254,"line":10052},[252,83899,78764],{"class":2102},[252,83901,83902],{"class":2102}," .spec",[252,83904,15712],{"class":262},[252,83906,83907,83909,83911,83913],{"class":254,"line":10060},[252,83908,61977],{"class":311},[252,83910,51577],{"class":262},[252,83912,340],{"class":311},[252,83914,1429],{"class":262},[252,83916,83917,83919,83921,83924],{"class":254,"line":10065},[252,83918,57556],{"class":311},[252,83920,51577],{"class":262},[252,83922,83923],{"class":311},"#888",[252,83925,1429],{"class":262},[252,83927,83928,83930,83932,83934,83936],{"class":254,"line":16744},[252,83929,55062],{"class":311},[252,83931,51577],{"class":262},[252,83933,812],{"class":311},[252,83935,51632],{"class":258},[252,83937,1429],{"class":262},[252,83939,83940,83942,83944,83946,83948],{"class":254,"line":16750},[252,83941,62140],{"class":311},[252,83943,51577],{"class":262},[252,83945,963],{"class":311},[252,83947,51632],{"class":258},[252,83949,1429],{"class":262},[252,83951,83952],{"class":254,"line":16773},[252,83953,2326],{"class":262},[252,83955,83956],{"class":254,"line":16779},[252,83957,2539],{"emptyLinePlaceholder":181},[252,83959,83960,83962,83965],{"class":254,"line":16802},[252,83961,78764],{"class":2102},[252,83963,83964],{"class":2102}," .count",[252,83966,15712],{"class":262},[252,83968,83969,83971,83973,83975],{"class":254,"line":16816},[252,83970,61977],{"class":311},[252,83972,51577],{"class":262},[252,83974,480],{"class":311},[252,83976,1429],{"class":262},[252,83978,83979,83981,83983,83986],{"class":254,"line":16836},[252,83980,57556],{"class":311},[252,83982,51577],{"class":262},[252,83984,83985],{"class":311},"#aaa",[252,83987,1429],{"class":262},[252,83989,83990],{"class":254,"line":16842},[252,83991,2326],{"class":262},[252,83993,83994],{"class":254,"line":16853},[252,83995,2539],{"emptyLinePlaceholder":181},[252,83997,83998,84000],{"class":254,"line":16876},[252,83999,72615],{"class":2102},[252,84001,15712],{"class":262},[252,84003,84004,84006,84008,84010,84012],{"class":254,"line":16898},[252,84005,54911],{"class":311},[252,84007,51577],{"class":262},[252,84009,78713],{"class":311},[252,84011,51632],{"class":258},[252,84013,1429],{"class":262},[252,84015,84016,84018,84020,84022,84024],{"class":254,"line":16903},[252,84017,54846],{"class":311},[252,84019,51577],{"class":262},[252,84021,454],{"class":311},[252,84023,51696],{"class":311},[252,84025,1429],{"class":262},[252,84027,84028,84030,84032,84034],{"class":254,"line":16909},[252,84029,55149],{"class":311},[252,84031,51577],{"class":262},[252,84033,51617],{"class":311},[252,84035,1429],{"class":262},[252,84037,84038,84040,84042,84044],{"class":254,"line":16923},[252,84039,55160],{"class":311},[252,84041,51577],{"class":262},[252,84043,51720],{"class":311},[252,84045,1429],{"class":262},[252,84047,84048,84051,84053,84055,84057,84059,84062],{"class":254,"line":16936},[252,84049,84050],{"class":311},"      border-top",[252,84052,51577],{"class":262},[252,84054,480],{"class":311},[252,84056,51632],{"class":258},[252,84058,51661],{"class":311},[252,84060,84061],{"class":311}," #4e4e4e",[252,84063,1429],{"class":262},[252,84065,84066,84068,84070,84072,84074],{"class":254,"line":16941},[252,84067,54835],{"class":311},[252,84069,51577],{"class":262},[252,84071,963],{"class":311},[252,84073,51632],{"class":258},[252,84075,1429],{"class":262},[252,84077,84078],{"class":254,"line":16955},[252,84079,2326],{"class":262},[252,84081,84082],{"class":254,"line":16960},[252,84083,2539],{"emptyLinePlaceholder":181},[252,84085,84086,84088,84091],{"class":254,"line":16966},[252,84087,72615],{"class":2102},[252,84089,84090],{"class":2102}," .amount",[252,84092,15712],{"class":262},[252,84094,84095,84097,84099,84101,84103],{"class":254,"line":16971},[252,84096,55062],{"class":311},[252,84098,51577],{"class":262},[252,84100,913],{"class":311},[252,84102,51632],{"class":258},[252,84104,1429],{"class":262},[252,84106,84107,84109,84111,84113],{"class":254,"line":16985},[252,84108,57556],{"class":311},[252,84110,51577],{"class":262},[252,84112,79079],{"class":311},[252,84114,1429],{"class":262},[252,84116,84117,84119,84121,84123],{"class":254,"line":16990},[252,84118,62474],{"class":311},[252,84120,51577],{"class":262},[252,84122,51629],{"class":311},[252,84124,1429],{"class":262},[252,84126,84127,84129,84131,84133,84135],{"class":254,"line":16995},[252,84128,61890],{"class":311},[252,84130,51577],{"class":262},[252,84132,919],{"class":311},[252,84134,51632],{"class":258},[252,84136,1429],{"class":262},[252,84138,84139],{"class":254,"line":17009},[252,84140,2326],{"class":262},[252,84142,84143,84145,84147],{"class":254,"line":17021},[252,84144,52557],{"class":262},[252,84146,5266],{"class":51440},[252,84148,51447],{"class":262},[252,84150,84151,84153,84155],{"class":254,"line":17026},[252,84152,51925],{"class":262},[252,84154,51474],{"class":51440},[252,84156,51447],{"class":262},[252,84158,84159],{"class":254,"line":17039},[252,84160,2539],{"emptyLinePlaceholder":181},[252,84162,84163,84165,84167],{"class":254,"line":17044},[252,84164,1173],{"class":262},[252,84166,51940],{"class":51440},[252,84168,51447],{"class":262},[252,84170,84171,84173,84175,84177,84179,84181],{"class":254,"line":17049},[252,84172,52284],{"class":262},[252,84174,51751],{"class":51440},[252,84176,53626],{"class":2102},[252,84178,308],{"class":262},[252,84180,62748],{"class":367},[252,84182,51447],{"class":262},[252,84184,84185,84187,84189],{"class":254,"line":17054},[252,84186,52557],{"class":262},[252,84188,51751],{"class":51440},[252,84190,51447],{"class":262},[252,84192,84193,84195,84197,84199,84201,84203],{"class":254,"line":17067},[252,84194,52284],{"class":262},[252,84196,51751],{"class":51440},[252,84198,53626],{"class":2102},[252,84200,308],{"class":262},[252,84202,62720],{"class":367},[252,84204,51447],{"class":262},[252,84206,84207,84209,84211,84214,84216,84218,84220,84223,84225,84227,84229,84231],{"class":254,"line":17072},[252,84208,51481],{"class":262},[252,84210,51751],{"class":51440},[252,84212,84213],{"class":262},">合计：\u003C",[252,84215,252],{"class":51440},[252,84217,53626],{"class":2102},[252,84219,308],{"class":262},[252,84221,84222],{"class":367},"\"amount\"",[252,84224,55454],{"class":262},[252,84226,252],{"class":51440},[252,84228,55454],{"class":262},[252,84230,51751],{"class":51440},[252,84232,51447],{"class":262},[252,84234,84235,84237,84239],{"class":254,"line":32773},[252,84236,52557],{"class":262},[252,84238,51751],{"class":51440},[252,84240,51447],{"class":262},[252,84242,84243,84245,84247],{"class":254,"line":32779},[252,84244,52284],{"class":262},[252,84246,51953],{"class":51440},[252,84248,51447],{"class":262},[252,84250,84251,84253,84255,84257],{"class":254,"line":32785},[252,84252,11361],{"class":258},[252,84254,79516],{"class":311},[252,84256,13704],{"class":258},[252,84258,55587],{"class":262},[252,84260,84261],{"class":254,"line":32791},[252,84262,79525],{"class":262},[252,84264,84265,84267,84269],{"class":254,"line":32797},[252,84266,79530],{"class":262},[252,84268,79533],{"class":367},[252,84270,31606],{"class":262},[252,84272,84273,84275,84277],{"class":254,"line":32808},[252,84274,79540],{"class":262},[252,84276,79543],{"class":367},[252,84278,31606],{"class":262},[252,84280,84281,84283,84286],{"class":254,"line":32814},[252,84282,79550],{"class":262},[252,84284,84285],{"class":311},"289.9",[252,84287,31606],{"class":262},[252,84289,84290,84292,84294],{"class":254,"line":32834},[252,84291,79560],{"class":262},[252,84293,79563],{"class":367},[252,84295,31606],{"class":262},[252,84297,84298,84301,84303],{"class":254,"line":32840},[252,84299,84300],{"class":262},"        count: ",[252,84302,340],{"class":311},[252,84304,31606],{"class":262},[252,84306,84307,84310,84313],{"class":254,"line":32851},[252,84308,84309],{"class":262},"        spec: { color: ",[252,84311,84312],{"class":367},"'白色'",[252,84314,55744],{"class":262},[252,84316,84317],{"class":254,"line":32857},[252,84318,78031],{"class":262},[252,84320,84321],{"class":254,"line":32863},[252,84322,79525],{"class":262},[252,84324,84325,84327,84329],{"class":254,"line":32869},[252,84326,79530],{"class":262},[252,84328,79624],{"class":367},[252,84330,31606],{"class":262},[252,84332,84333,84335,84337],{"class":254,"line":32875},[252,84334,79540],{"class":262},[252,84336,79633],{"class":367},[252,84338,31606],{"class":262},[252,84340,84341,84343,84346],{"class":254,"line":32881},[252,84342,79550],{"class":262},[252,84344,84345],{"class":311},"109.8",[252,84347,31606],{"class":262},[252,84349,84350,84352,84354],{"class":254,"line":32887},[252,84351,79560],{"class":262},[252,84353,79651],{"class":367},[252,84355,31606],{"class":262},[252,84357,84358,84360,84362],{"class":254,"line":32893},[252,84359,84300],{"class":262},[252,84361,334],{"class":311},[252,84363,31606],{"class":262},[252,84365,84366,84369,84371,84373,84375],{"class":254,"line":32913},[252,84367,84368],{"class":262},"        spec: { size: ",[252,84370,82042],{"class":367},[252,84372,55604],{"class":262},[252,84374,82047],{"class":367},[252,84376,55744],{"class":262},[252,84378,84379],{"class":254,"line":32919},[252,84380,78031],{"class":262},[252,84382,84383],{"class":254,"line":32935},[252,84384,79525],{"class":262},[252,84386,84387,84389,84391],{"class":254,"line":32941},[252,84388,79530],{"class":262},[252,84390,79668],{"class":367},[252,84392,31606],{"class":262},[252,84394,84395,84397,84399],{"class":254,"line":32955},[252,84396,79540],{"class":262},[252,84398,79677],{"class":367},[252,84400,31606],{"class":262},[252,84402,84403,84405,84408],{"class":254,"line":32961},[252,84404,79550],{"class":262},[252,84406,84407],{"class":311},"488",[252,84409,31606],{"class":262},[252,84411,84412,84414,84416],{"class":254,"line":32976},[252,84413,79560],{"class":262},[252,84415,79695],{"class":367},[252,84417,31606],{"class":262},[252,84419,84420,84422,84424],{"class":254,"line":32982},[252,84421,84300],{"class":262},[252,84423,480],{"class":311},[252,84425,31606],{"class":262},[252,84427,84428,84430,84433,84436,84439],{"class":254,"line":32991},[252,84429,84309],{"class":262},[252,84431,84432],{"class":367},"'青色'",[252,84434,84435],{"class":262},", sum: ",[252,84437,84438],{"class":367},"'一大四小'",[252,84440,55744],{"class":262},[252,84442,84443],{"class":254,"line":32997},[252,84444,78031],{"class":262},[252,84446,84447],{"class":254,"line":33006},[252,84448,79525],{"class":262},[252,84450,84451,84453,84455],{"class":254,"line":33012},[252,84452,79530],{"class":262},[252,84454,79712],{"class":367},[252,84456,31606],{"class":262},[252,84458,84459,84461,84463],{"class":254,"line":33018},[252,84460,79540],{"class":262},[252,84462,79721],{"class":367},[252,84464,31606],{"class":262},[252,84466,84467,84469,84472],{"class":254,"line":33027},[252,84468,79550],{"class":262},[252,84470,84471],{"class":311},"139",[252,84473,31606],{"class":262},[252,84475,84476,84478,84480],{"class":254,"line":33033},[252,84477,79560],{"class":262},[252,84479,79739],{"class":367},[252,84481,31606],{"class":262},[252,84483,84484,84486,84488],{"class":254,"line":33044},[252,84485,84300],{"class":262},[252,84487,480],{"class":311},[252,84489,31606],{"class":262},[252,84491,84492,84494,84497,84499,84502],{"class":254,"line":33050},[252,84493,84368],{"class":262},[252,84495,84496],{"class":367},"'小号'",[252,84498,55604],{"class":262},[252,84500,84501],{"class":367},"'紫色'",[252,84503,55610],{"class":262},[252,84505,84506,84509],{"class":254,"line":33069},[252,84507,84508],{"class":262},"        gift: ",[252,84510,84511],{"class":367},"'50g茶叶,清洗球'\n",[252,84513,84514],{"class":254,"line":33075},[252,84515,52538],{"class":262},[252,84517,84518],{"class":254,"line":33086},[252,84519,53249],{"class":262},[252,84521,84522],{"class":254,"line":33092},[252,84523,84524],{"class":321},"    \u002F\u002F  1.根据数据渲染页面\n",[252,84526,84527,84529,84531,84533,84535,84537,84539,84541,84543,84545,84547,84549],{"class":254,"line":33112},[252,84528,52547],{"class":262},[252,84530,54539],{"class":2102},[252,84532,263],{"class":262},[252,84534,80040],{"class":367},[252,84536,74389],{"class":262},[252,84538,308],{"class":258},[252,84540,80187],{"class":262},[252,84542,74184],{"class":2102},[252,84544,263],{"class":262},[252,84546,79934],{"class":5356},[252,84548,79937],{"class":258},[252,84550,15712],{"class":262},[252,84552,84553],{"class":254,"line":33128},[252,84554,84555],{"class":321},"      \u002F\u002F 对象解构\n",[252,84557,84558,84560,84562,84564,84566,84568,84570,84573,84575,84577,84579,84582,84584,84587,84589,84591],{"class":254,"line":33134},[252,84559,58368],{"class":258},[252,84561,79946],{"class":262},[252,84563,79959],{"class":311},[252,84565,12575],{"class":262},[252,84567,79949],{"class":311},[252,84569,12575],{"class":262},[252,84571,84572],{"class":311},"count",[252,84574,12575],{"class":262},[252,84576,79954],{"class":311},[252,84578,12575],{"class":262},[252,84580,84581],{"class":311},"spec",[252,84583,12575],{"class":262},[252,84585,84586],{"class":311},"gift",[252,84588,79962],{"class":262},[252,84590,308],{"class":258},[252,84592,79967],{"class":262},[252,84594,84595],{"class":254,"line":33148},[252,84596,84597],{"class":321},"      \u002F\u002F 规格文字模块处理\n",[252,84599,84600,84602,84605,84607,84609,84611,84613,84615,84617,84619],{"class":254,"line":33154},[252,84601,58368],{"class":258},[252,84603,84604],{"class":311}," text",[252,84606,13704],{"class":258},[252,84608,82077],{"class":262},[252,84610,82080],{"class":2102},[252,84612,82083],{"class":262},[252,84614,74363],{"class":2102},[252,84616,263],{"class":262},[252,84618,82090],{"class":367},[252,84620,269],{"class":262},[252,84622,84623],{"class":254,"line":33160},[252,84624,84625],{"class":321},"      \u002F\u002F 处理赠品模块\n",[252,84627,84628,84630,84632,84634,84637,84639,84641,84643,84645,84648,84650,84652,84654,84656,84658,84661,84663,84666,84668,84670,84672,84674,84676,84678],{"class":254,"line":33171},[252,84629,58368],{"class":258},[252,84631,74059],{"class":311},[252,84633,13704],{"class":258},[252,84635,84636],{"class":262}," gift ",[252,84638,1249],{"class":258},[252,84640,83250],{"class":262},[252,84642,83253],{"class":2102},[252,84644,263],{"class":262},[252,84646,84647],{"class":367},"','",[252,84649,30966],{"class":262},[252,84651,74184],{"class":2102},[252,84653,263],{"class":262},[252,84655,79934],{"class":5356},[252,84657,79937],{"class":258},[252,84659,84660],{"class":367}," `\u003Cspan class=\"tag\">【赠品】${",[252,84662,79934],{"class":262},[252,84664,84665],{"class":367},"}\u003C\u002Fspan>`",[252,84667,30966],{"class":262},[252,84669,74363],{"class":2102},[252,84671,263],{"class":262},[252,84673,74368],{"class":367},[252,84675,13854],{"class":262},[252,84677,1122],{"class":258},[252,84679,70244],{"class":367},[252,84681,84682],{"class":254,"line":33177},[252,84683,84684],{"class":321},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[252,84686,84687,84689,84692,84694,84697,84699,84701,84703,84706,84708,84710,84712,84715,84717,84719],{"class":254,"line":33183},[252,84688,58368],{"class":258},[252,84690,84691],{"class":311}," subtotal",[252,84693,13704],{"class":258},[252,84695,84696],{"class":262}," ((price ",[252,84698,718],{"class":258},[252,84700,5894],{"class":311},[252,84702,6658],{"class":258},[252,84704,84705],{"class":262}," count) ",[252,84707,847],{"class":258},[252,84709,5894],{"class":311},[252,84711,30966],{"class":262},[252,84713,84714],{"class":2102},"toFixed",[252,84716,263],{"class":262},[252,84718,340],{"class":311},[252,84720,269],{"class":262},[252,84722,84723],{"class":254,"line":33193},[252,84724,2539],{"emptyLinePlaceholder":181},[252,84726,84727,84729],{"class":254,"line":33199},[252,84728,74122],{"class":258},[252,84730,70308],{"class":367},[252,84732,84733],{"class":254,"line":33210},[252,84734,84735],{"class":367},"        \u003Cdiv class=\"item\">\n",[252,84737,84738,84741,84743],{"class":254,"line":33216},[252,84739,84740],{"class":367},"          \u003Cimg src=\"${",[252,84742,79959],{"class":262},[252,84744,79991],{"class":367},[252,84746,84747,84750,84752,84755,84757],{"class":254,"line":33226},[252,84748,84749],{"class":367},"          \u003Cp class=\"name\">${",[252,84751,79949],{"class":262},[252,84753,84754],{"class":367},"}${",[252,84756,1438],{"class":262},[252,84758,80001],{"class":367},[252,84760,84761,84764,84766],{"class":254,"line":33231},[252,84762,84763],{"class":367},"          \u003Cp class=\"spec\">${",[252,84765,5327],{"class":262},[252,84767,80001],{"class":367},[252,84769,84770,84773,84775,84777,84779,84781,84783,84785],{"class":254,"line":33237},[252,84771,84772],{"class":367},"          \u003Cp class=\"price\">${",[252,84774,79954],{"class":262},[252,84776,821],{"class":367},[252,84778,84714],{"class":2102},[252,84780,263],{"class":367},[252,84782,340],{"class":311},[252,84784,692],{"class":367},[252,84786,80001],{"class":367},[252,84788,84789,84792,84794],{"class":254,"line":33286},[252,84790,84791],{"class":367},"          \u003Cp class=\"count\">x${",[252,84793,84572],{"class":262},[252,84795,80001],{"class":367},[252,84797,84798,84801,84804],{"class":254,"line":33333},[252,84799,84800],{"class":367},"          \u003Cp class=\"sub-total\">${",[252,84802,84803],{"class":262},"subtotal",[252,84805,80001],{"class":367},[252,84807,84808],{"class":254,"line":33338},[252,84809,84810],{"class":367},"        \u003C\u002Fdiv> \n",[252,84812,84813],{"class":254,"line":33344},[252,84814,84815],{"class":367},"             `\n",[252,84817,84818,84821,84823,84825,84827],{"class":254,"line":33363},[252,84819,84820],{"class":262},"    }).",[252,84822,74363],{"class":2102},[252,84824,263],{"class":262},[252,84826,74368],{"class":367},[252,84828,269],{"class":262},[252,84830,84831],{"class":254,"line":33369},[252,84832,84833],{"class":321},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[252,84835,84836,84838,84840,84842,84844,84847,84849,84852,84854,84856,84858,84861,84864,84866,84869,84871,84873,84875,84878,84880,84882,84884,84886],{"class":254,"line":33389},[252,84837,11361],{"class":258},[252,84839,62925],{"class":311},[252,84841,13704],{"class":258},[252,84843,80187],{"class":262},[252,84845,84846],{"class":2102},"reduce",[252,84848,2515],{"class":262},[252,84850,84851],{"class":5356},"prev",[252,84853,12575],{"class":262},[252,84855,79934],{"class":5356},[252,84857,13854],{"class":262},[252,84859,84860],{"class":258},"=>",[252,84862,84863],{"class":262}," prev ",[252,84865,744],{"class":258},[252,84867,84868],{"class":262}," (item.price ",[252,84870,718],{"class":258},[252,84872,5894],{"class":311},[252,84874,6658],{"class":258},[252,84876,84877],{"class":262}," item.count) ",[252,84879,847],{"class":258},[252,84881,5894],{"class":311},[252,84883,12575],{"class":262},[252,84885,454],{"class":311},[252,84887,269],{"class":262},[252,84889,84890,84892,84894,84896,84899,84901,84903,84906,84908,84910,84912],{"class":254,"line":33395},[252,84891,52547],{"class":262},[252,84893,54539],{"class":2102},[252,84895,263],{"class":262},[252,84897,84898],{"class":367},"'.amount'",[252,84900,74389],{"class":262},[252,84902,308],{"class":258},[252,84904,84905],{"class":262}," total.",[252,84907,84714],{"class":2102},[252,84909,263],{"class":262},[252,84911,340],{"class":311},[252,84913,269],{"class":262},[252,84915,84916,84918,84920],{"class":254,"line":33401},[252,84917,52557],{"class":262},[252,84919,51953],{"class":51440},[252,84921,51447],{"class":262},[252,84923,84924,84926,84928],{"class":254,"line":33411},[252,84925,51925],{"class":262},[252,84927,51940],{"class":51440},[252,84929,51447],{"class":262},[252,84931,84932],{"class":254,"line":33416},[252,84933,2539],{"emptyLinePlaceholder":181},[252,84935,84936,84938,84940],{"class":254,"line":33422},[252,84937,51925],{"class":262},[252,84939,50775],{"class":51440},[252,84941,51447],{"class":262},[14,84943,84945],{"id":84944},"_411-编程思想","4.11 编程思想",[224,84947,84949],{"id":84948},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,84951,84952,84955],{},[412,84953,84954],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,84957,84958],{},"调用就可以了",[19,84960,84961],{},[1601,84962],{"alt":169,"src":84963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[224,84965,84967],{"id":84966},"_4112-面向对象","4.11.2 面向对象",[19,84969,84970],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,84972,84973],{},[1601,84974],{"alt":169,"src":84975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,84977,84978],{},"面向对象的特性：",[1270,84980,84981,84984,84987],{},[210,84982,84983],{},"封装性",[210,84985,84986],{},"继承性",[210,84988,84989],{},"多态性",[224,84991,84993],{"id":84992},"_4113-两者比较","4.11.3 两者比较",[19,84995,84996],{},[1601,84997],{"alt":169,"src":84998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85000,85002],{"id":85001},"_412-构造函数回顾","4.12 构造函数回顾",[19,85004,85005],{},[1601,85006],{"alt":169,"src":85007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85009,85010],{},[1601,85011],{"alt":169,"src":85012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85014,85015],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85017,85018],{},[1601,85019],{"alt":169,"src":85020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85022,85024],{"id":85023},"_413-原型","4.13 原型",[224,85026,85028],{"id":85027},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85030,85031],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85033,85034],{},[1601,85035],{"alt":169,"src":85036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85038,85039],{},[1601,85040],{"alt":169,"src":85041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85043,85044],{},"原型是构造函数的属性，它也是一个对象",[19,85046,85047],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85049,85050],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[244,85052,85054],{"className":53207,"code":85053,"language":53209,"meta":169,"style":169},"\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",[22,85055,85056,85064,85069,85077,85082,85087,85092,85097,85102,85106,85110,85114,85119,85124,85128,85133,85138,85143,85148,85153,85157,85165],{"__ignoreMap":169},[252,85057,85058,85060,85062],{"class":254,"line":255},[252,85059,1173],{"class":262},[252,85061,51940],{"class":51440},[252,85063,51447],{"class":262},[252,85065,85066],{"class":254,"line":170},[252,85067,85068],{"class":321},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[252,85070,85071,85073,85075],{"class":254,"line":1318},[252,85072,52284],{"class":262},[252,85074,51953],{"class":51440},[252,85076,51447],{"class":262},[252,85078,85079],{"class":254,"line":1333},[252,85080,85081],{"class":262},"    function Star(uname, age) {\n",[252,85083,85084],{"class":254,"line":1339},[252,85085,85086],{"class":262},"      this.uname = uname,\n",[252,85088,85089],{"class":254,"line":1353},[252,85090,85091],{"class":262},"        this.age = age\n",[252,85093,85094],{"class":254,"line":1359},[252,85095,85096],{"class":262},"      \u002F\u002F this.sing = function () {\n",[252,85098,85099],{"class":254,"line":1450},[252,85100,85101],{"class":262},"      \u002F\u002F   console.log('唱歌')\n",[252,85103,85104],{"class":254,"line":1456},[252,85105,2539],{"emptyLinePlaceholder":181},[252,85107,85108],{"class":254,"line":1468},[252,85109,60177],{"class":262},[252,85111,85112],{"class":254,"line":1751},[252,85113,2326],{"class":262},[252,85115,85116],{"class":254,"line":1756},[252,85117,85118],{"class":262},"    Star.prototype.sing = function () {\n",[252,85120,85121],{"class":254,"line":1762},[252,85122,85123],{"class":262},"      console.log('唱歌')\n",[252,85125,85126],{"class":254,"line":1767},[252,85127,2326],{"class":262},[252,85129,85130],{"class":254,"line":1781},[252,85131,85132],{"class":262},"    \u002F\u002F console.dir(Star.prototype)\n",[252,85134,85135],{"class":254,"line":1786},[252,85136,85137],{"class":262},"    const pink = new Star('pink', 18)\n",[252,85139,85140],{"class":254,"line":1792},[252,85141,85142],{"class":262},"    const red = new Star('red', 20)\n",[252,85144,85145],{"class":254,"line":1813},[252,85146,85147],{"class":262},"    pink.sing()\n",[252,85149,85150],{"class":254,"line":1818},[252,85151,85152],{"class":262},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[252,85154,85155],{"class":254,"line":1832},[252,85156,2539],{"emptyLinePlaceholder":181},[252,85158,85159,85161,85163],{"class":254,"line":1837},[252,85160,52557],{"class":262},[252,85162,51953],{"class":51440},[252,85164,51447],{"class":262},[252,85166,85167,85169,85171],{"class":254,"line":1866},[252,85168,51925],{"class":262},[252,85170,51940],{"class":51440},[252,85172,51447],{"class":262},[19,85174,85175],{},[1601,85176],{"alt":169,"src":85177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[244,85179,85181],{"className":53207,"code":85180,"language":53209,"meta":169,"style":169},"\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",[22,85182,85183,85191,85199,85204,85209,85214,85219,85223,85228,85233,85238,85242,85247,85251,85255,85260,85264,85272],{"__ignoreMap":169},[252,85184,85185,85187,85189],{"class":254,"line":255},[252,85186,1173],{"class":262},[252,85188,51940],{"class":51440},[252,85190,51447],{"class":262},[252,85192,85193,85195,85197],{"class":254,"line":170},[252,85194,52284],{"class":262},[252,85196,51953],{"class":51440},[252,85198,51447],{"class":262},[252,85200,85201],{"class":254,"line":1318},[252,85202,85203],{"class":262},"    let that\n",[252,85205,85206],{"class":254,"line":1333},[252,85207,85208],{"class":262},"    function Star(uname) {\n",[252,85210,85211],{"class":254,"line":1339},[252,85212,85213],{"class":262},"      this.uname = uname\n",[252,85215,85216],{"class":254,"line":1353},[252,85217,85218],{"class":262},"      that = this\n",[252,85220,85221],{"class":254,"line":1359},[252,85222,2326],{"class":262},[252,85224,85225],{"class":254,"line":1450},[252,85226,85227],{"class":262},"    \u002F\u002F 实例对象是 ldh\n",[252,85229,85230],{"class":254,"line":1456},[252,85231,85232],{"class":262},"    const ldh = new Star('刘德华')\n",[252,85234,85235],{"class":254,"line":1468},[252,85236,85237],{"class":262},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[252,85239,85240],{"class":254,"line":1751},[252,85241,2539],{"emptyLinePlaceholder":181},[252,85243,85244],{"class":254,"line":1756},[252,85245,85246],{"class":262},"    Star.sing = function () {\n",[252,85248,85249],{"class":254,"line":1762},[252,85250,85123],{"class":262},[252,85252,85253],{"class":254,"line":1767},[252,85254,2326],{"class":262},[252,85256,85257],{"class":254,"line":1781},[252,85258,85259],{"class":262},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[252,85261,85262],{"class":254,"line":1786},[252,85263,2539],{"emptyLinePlaceholder":181},[252,85265,85266,85268,85270],{"class":254,"line":1792},[252,85267,52557],{"class":262},[252,85269,51953],{"class":51440},[252,85271,51447],{"class":262},[252,85273,85274,85276,85278],{"class":254,"line":1813},[252,85275,51925],{"class":262},[252,85277,51940],{"class":51440},[252,85279,51447],{"class":262},[19,85281,85282],{},"构造函数的this指向的是实例对象；",[19,85284,85285],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[224,85287,85289],{"id":85288},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85291,85292],{},[1601,85293],{"alt":169,"src":85294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[244,85296,85298],{"className":53207,"code":85297,"language":53209,"meta":169,"style":169},"\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",[22,85299,85300,85308,85316,85321,85326,85331,85336,85341,85346,85351,85356,85361,85366,85370,85375,85380,85385,85390,85394,85399,85404,85409,85414,85418,85423,85428,85433,85438,85442,85447,85451,85459],{"__ignoreMap":169},[252,85301,85302,85304,85306],{"class":254,"line":255},[252,85303,1173],{"class":262},[252,85305,51940],{"class":51440},[252,85307,51447],{"class":262},[252,85309,85310,85312,85314],{"class":254,"line":170},[252,85311,52284],{"class":262},[252,85313,51953],{"class":51440},[252,85315,51447],{"class":262},[252,85317,85318],{"class":254,"line":1318},[252,85319,85320],{"class":262},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[252,85322,85323],{"class":254,"line":1333},[252,85324,85325],{"class":262},"    const arr = [1, 2, 3]\n",[252,85327,85328],{"class":254,"line":1339},[252,85329,85330],{"class":262},"    \u002F\u002F 自己定义数组的扩展方法\n",[252,85332,85333],{"class":254,"line":1353},[252,85334,85335],{"class":262},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[252,85337,85338],{"class":254,"line":1359},[252,85339,85340],{"class":262},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[252,85342,85343],{"class":254,"line":1450},[252,85344,85345],{"class":262},"    \u002F\u002F ①.最大值\n",[252,85347,85348],{"class":254,"line":1456},[252,85349,85350],{"class":262},"    Array.prototype.max = function () {\n",[252,85352,85353],{"class":254,"line":1468},[252,85354,85355],{"class":262},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[252,85357,85358],{"class":254,"line":1751},[252,85359,85360],{"class":262},"      return Math.max(...this)\n",[252,85362,85363],{"class":254,"line":1756},[252,85364,85365],{"class":262},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[252,85367,85368],{"class":254,"line":1762},[252,85369,2326],{"class":262},[252,85371,85372],{"class":254,"line":1767},[252,85373,85374],{"class":262},"    console.log(arr.max())\n",[252,85376,85377],{"class":254,"line":1781},[252,85378,85379],{"class":262},"    \u002F\u002F ②最小值\n",[252,85381,85382],{"class":254,"line":1786},[252,85383,85384],{"class":262},"    Array.prototype.min = function () {\n",[252,85386,85387],{"class":254,"line":1792},[252,85388,85389],{"class":262},"      return Math.min(...this)\n",[252,85391,85392],{"class":254,"line":1813},[252,85393,2326],{"class":262},[252,85395,85396],{"class":254,"line":1818},[252,85397,85398],{"class":262},"    console.log(arr.min())\n",[252,85400,85401],{"class":254,"line":1832},[252,85402,85403],{"class":262},"    \u002F\u002F③求和\n",[252,85405,85406],{"class":254,"line":1837},[252,85407,85408],{"class":262},"    Array.prototype.sum = function () {\n",[252,85410,85411],{"class":254,"line":1866},[252,85412,85413],{"class":262},"      return this.reduce((prev, current) => prev + current, 0)\n",[252,85415,85416],{"class":254,"line":1871},[252,85417,2326],{"class":262},[252,85419,85420],{"class":254,"line":1888},[252,85421,85422],{"class":262},"    console.log(arr.sum())\n",[252,85424,85425],{"class":254,"line":1893},[252,85426,85427],{"class":262},"    \u002F\u002F ③排序\n",[252,85429,85430],{"class":254,"line":1898},[252,85431,85432],{"class":262},"    Array.prototype.rever = function () {\n",[252,85434,85435],{"class":254,"line":1903},[252,85436,85437],{"class":262},"      return this.reverse()\n",[252,85439,85440],{"class":254,"line":1917},[252,85441,2326],{"class":262},[252,85443,85444],{"class":254,"line":1922},[252,85445,85446],{"class":262},"    console.log(arr.rever())\n",[252,85448,85449],{"class":254,"line":2716},[252,85450,2539],{"emptyLinePlaceholder":181},[252,85452,85453,85455,85457],{"class":254,"line":2730},[252,85454,52557],{"class":262},[252,85456,51953],{"class":51440},[252,85458,51447],{"class":262},[252,85460,85461,85463,85465],{"class":254,"line":2738},[252,85462,51925],{"class":262},[252,85464,51940],{"class":51440},[252,85466,51447],{"class":262},[19,85468,85469],{},[1601,85470],{"alt":169,"src":85471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[224,85473,85475],{"id":85474},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85477,85478],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85480,85481],{},[1601,85482],{"alt":169,"src":85483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[244,85485,85487],{"className":53207,"code":85486,"language":53209,"meta":169,"style":169},"\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",[22,85488,85489,85497,85505,85510,85515,85519,85524,85529,85534,85542],{"__ignoreMap":169},[252,85490,85491,85493,85495],{"class":254,"line":255},[252,85492,1173],{"class":262},[252,85494,51940],{"class":51440},[252,85496,51447],{"class":262},[252,85498,85499,85501,85503],{"class":254,"line":170},[252,85500,52284],{"class":262},[252,85502,51953],{"class":51440},[252,85504,51447],{"class":262},[252,85506,85507],{"class":254,"line":1318},[252,85508,85509],{"class":262},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[252,85511,85512],{"class":254,"line":1333},[252,85513,85514],{"class":262},"    function Star() {\n",[252,85516,85517],{"class":254,"line":1339},[252,85518,2326],{"class":262},[252,85520,85521],{"class":254,"line":1353},[252,85522,85523],{"class":262},"    const ldh = new Star()\n",[252,85525,85526],{"class":254,"line":1359},[252,85527,85528],{"class":262},"    console.log(Star.prototype)\n",[252,85530,85531],{"class":254,"line":1450},[252,85532,85533],{"class":262},"    console.log(Star.prototype.constructor === Star)\n",[252,85535,85536,85538,85540],{"class":254,"line":1456},[252,85537,52557],{"class":262},[252,85539,51953],{"class":51440},[252,85541,51447],{"class":262},[252,85543,85544,85546,85548],{"class":254,"line":1468},[252,85545,51925],{"class":262},[252,85547,51940],{"class":51440},[252,85549,51447],{"class":262},[19,85551,85552],{},[1601,85553],{"alt":169,"src":85554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85556,85557],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[244,85559,85561],{"className":53207,"code":85560,"language":53209,"meta":169,"style":169},"  \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",[22,85562,85563,85571,85575,85579,85583,85588,85593,85598,85602,85607,85612,85617,85622,85627,85632,85636,85640,85645,85650,85655,85659,85664,85669,85673,85677,85681],{"__ignoreMap":169},[252,85564,85565,85567,85569],{"class":254,"line":255},[252,85566,52284],{"class":262},[252,85568,51953],{"class":51440},[252,85570,51447],{"class":262},[252,85572,85573],{"class":254,"line":170},[252,85574,85509],{"class":262},[252,85576,85577],{"class":254,"line":1318},[252,85578,85514],{"class":262},[252,85580,85581],{"class":254,"line":1333},[252,85582,2326],{"class":262},[252,85584,85585],{"class":254,"line":1339},[252,85586,85587],{"class":262},"    \u002F\u002F const ldh = new Star()\n",[252,85589,85590],{"class":254,"line":1353},[252,85591,85592],{"class":262},"    \u002F\u002F console.log(Star.prototype)\n",[252,85594,85595],{"class":254,"line":1359},[252,85596,85597],{"class":262},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[252,85599,85600],{"class":254,"line":1450},[252,85601,2539],{"emptyLinePlaceholder":181},[252,85603,85604],{"class":254,"line":1456},[252,85605,85606],{"class":262},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[252,85608,85609],{"class":254,"line":1468},[252,85610,85611],{"class":262},"    \u002F\u002F Star.prototype.sing = function () {\n",[252,85613,85614],{"class":254,"line":1751},[252,85615,85616],{"class":262},"    \u002F\u002F   console.log('唱歌')\n",[252,85618,85619],{"class":254,"line":1756},[252,85620,85621],{"class":262},"    \u002F\u002F }\n",[252,85623,85624],{"class":254,"line":1762},[252,85625,85626],{"class":262},"    \u002F\u002F Star.prototype.dance = function () {\n",[252,85628,85629],{"class":254,"line":1767},[252,85630,85631],{"class":262},"    \u002F\u002F   console.log('跳舞')\n",[252,85633,85634],{"class":254,"line":1781},[252,85635,85621],{"class":262},[252,85637,85638],{"class":254,"line":1786},[252,85639,85528],{"class":262},[252,85641,85642],{"class":254,"line":1792},[252,85643,85644],{"class":262},"    Star.prototype = {\n",[252,85646,85647],{"class":254,"line":1813},[252,85648,85649],{"class":262},"      sing: function () {\n",[252,85651,85652],{"class":254,"line":1818},[252,85653,85654],{"class":262},"        console.log('唱歌')\n",[252,85656,85657],{"class":254,"line":1832},[252,85658,78031],{"class":262},[252,85660,85661],{"class":254,"line":1837},[252,85662,85663],{"class":262},"      dance: function () {\n",[252,85665,85666],{"class":254,"line":1866},[252,85667,85668],{"class":262},"        console.log('跳舞')\n",[252,85670,85671],{"class":254,"line":1871},[252,85672,52538],{"class":262},[252,85674,85675],{"class":254,"line":1888},[252,85676,2326],{"class":262},[252,85678,85679],{"class":254,"line":1893},[252,85680,85528],{"class":262},[252,85682,85683,85685,85687],{"class":254,"line":1898},[252,85684,52557],{"class":262},[252,85686,51953],{"class":51440},[252,85688,51447],{"class":262},[19,85690,85691],{},"进行输出结果后会发现：",[19,85693,85694],{},[1601,85695],{"alt":169,"src":85696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85698,85699],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85701,85702],{},"所以，要重新指回创造这个原型对象的构造函数",[244,85704,85706],{"className":71353,"code":85705,"language":71355,"meta":169,"style":169},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[22,85707,85708,85722,85727,85732,85743,85756,85761,85772,85786,85790],{"__ignoreMap":169},[252,85709,85710,85713,85715,85718,85720],{"class":254,"line":255},[252,85711,85712],{"class":311},"Star",[252,85714,821],{"class":262},[252,85716,85717],{"class":311},"prototype",[252,85719,13704],{"class":258},[252,85721,15712],{"class":262},[252,85723,85724],{"class":254,"line":170},[252,85725,85726],{"class":321},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[252,85728,85729],{"class":254,"line":1318},[252,85730,85731],{"class":262},"  constructor: Star,\n",[252,85733,85734,85737,85739,85741],{"class":254,"line":1333},[252,85735,85736],{"class":2102},"  sing",[252,85738,51577],{"class":262},[252,85740,54589],{"class":258},[252,85742,54592],{"class":262},[252,85744,85745,85747,85749,85751,85754],{"class":254,"line":1339},[252,85746,73893],{"class":262},[252,85748,58387],{"class":2102},[252,85750,263],{"class":262},[252,85752,85753],{"class":367},"'唱歌'",[252,85755,269],{"class":262},[252,85757,85758],{"class":254,"line":1353},[252,85759,85760],{"class":262},"   },\n",[252,85762,85763,85766,85768,85770],{"class":254,"line":1359},[252,85764,85765],{"class":2102},"   dance",[252,85767,51577],{"class":262},[252,85769,54589],{"class":258},[252,85771,54592],{"class":262},[252,85773,85774,85777,85779,85781,85784],{"class":254,"line":1450},[252,85775,85776],{"class":262},"     console.",[252,85778,58387],{"class":2102},[252,85780,263],{"class":262},[252,85782,85783],{"class":367},"'跳舞'",[252,85785,269],{"class":262},[252,85787,85788],{"class":254,"line":1456},[252,85789,4448],{"class":262},[252,85791,85792],{"class":254,"line":1468},[252,85793,1704],{"class":262},[19,85795,85796],{},[1601,85797],{"alt":169,"src":85798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,85800,85801],{},"总结1：",[19,85803,85804],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,85806,85807],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,85809,85810],{},"constructor指的是他的来源",[19,85812,85813],{},[1601,85814],{"alt":169,"src":85815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,85817,85818],{},[1601,85819],{"alt":169,"src":85820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,85822,85823],{},"总结2：",[19,85825,85826],{},[1601,85827],{"alt":169,"src":85828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,85830,85831],{},[1601,85832],{"alt":169,"src":85833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,85835,85836],{},[1601,85837],{"alt":169,"src":85838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[224,85840,85842],{"id":85841},"_4134-对象原型","4.13.4 对象原型",[19,85844,85845],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,85847,85848],{},"对象原型就是__proto__这个属性",[19,85850,85851],{},[1601,85852],{"alt":169,"src":85853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,85855,85856],{},[1601,85857],{"alt":169,"src":85858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,85860,85861],{},[1601,85862],{"alt":169,"src":85863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,85865,85866],{},[1601,85867],{"alt":169,"src":85868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[244,85870,85872],{"className":53207,"code":85871,"language":53209,"meta":169,"style":169},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[22,85873,85874,85882,85890,85894,85898,85902,85907,85915],{"__ignoreMap":169},[252,85875,85876,85878,85880],{"class":254,"line":255},[252,85877,1173],{"class":262},[252,85879,51940],{"class":51440},[252,85881,51447],{"class":262},[252,85883,85884,85886,85888],{"class":254,"line":170},[252,85885,52284],{"class":262},[252,85887,51953],{"class":51440},[252,85889,51447],{"class":262},[252,85891,85892],{"class":254,"line":1318},[252,85893,85514],{"class":262},[252,85895,85896],{"class":254,"line":1333},[252,85897,2326],{"class":262},[252,85899,85900],{"class":254,"line":1339},[252,85901,85523],{"class":262},[252,85903,85904],{"class":254,"line":1353},[252,85905,85906],{"class":262},"    console.log(ldh)\n",[252,85908,85909,85911,85913],{"class":254,"line":1359},[252,85910,52557],{"class":262},[252,85912,51953],{"class":51440},[252,85914,51447],{"class":262},[252,85916,85917,85919,85921],{"class":254,"line":1450},[252,85918,51925],{"class":262},[252,85920,51940],{"class":51440},[252,85922,51447],{"class":262},[19,85924,85925],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,85927,85928],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,85930,85931],{},[1601,85932],{"alt":169,"src":85933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,85935,85936],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,85938,85939],{},"对象原型指向原型对象",[19,85941,85942],{},[1601,85943],{"alt":169,"src":85944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,85946,85947],{},[1601,85948],{"alt":169,"src":85949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,85951,85952],{},[1601,85953],{"alt":169,"src":85954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[224,85956,85958],{"id":85957},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,85960,85961],{},[1601,85962],{"alt":169,"src":85963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[207,85965,85966,85969,85972,85975],{},[210,85967,85968],{},"构造函数通过new的形式实例化得到实例对象",[210,85970,85971],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[210,85973,85974],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[210,85976,85977],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,85979,85980],{},[1601,85981],{"alt":169,"src":85982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,85984,85985],{},"题目梳理：",[19,85987,85988],{},[1601,85989],{"alt":169,"src":85990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[224,85992,85994],{"id":85993},"_4136-原型继承","4.13.6 原型继承",[19,85996,85997],{},[1601,85998],{"alt":169,"src":85999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86001,86002],{},[1601,86003],{"alt":169,"src":86004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86006,86007],{},[1601,86008],{"alt":169,"src":86009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86011,86012],{},[1601,86013],{"alt":169,"src":86014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86016,86017],{},[1601,86018],{"alt":169,"src":86019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86021,86022],{},[1601,86023],{"alt":169,"src":86024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86026,86027],{},[1601,86028],{"alt":169,"src":86029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86031,86032],{},[1601,86033],{"alt":169,"src":86034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86036,86037],{},"回顾：构造函数每次new得到对象都是不同的",[224,86039,86041],{"id":86040},"_4137-原型链","4.13.7 原型链",[19,86043,86044],{},[1601,86045],{"alt":169,"src":86046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86048,86049],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86051,86052],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86054,86055],{},"大哥是Object",[19,86057,86058],{},[1601,86059],{"alt":169,"src":86060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86062,86063],{},[1601,86064],{"alt":169,"src":86065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86067,86068],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86070,86071],{},"万物皆对象",[224,86073,86075],{"id":86074},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86077,86078],{},"模态框",[19,86080,86081],{},"以后遇见这个效果直接使用这个就行",[19,86083,86084],{},[1601,86085],{"alt":169,"src":86086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86088,86089],{},[1601,86090],{"alt":169,"src":86091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86093,86094],{},[1601,86095],{"alt":169,"src":86096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86098,86099],{},[1601,86100],{"alt":169,"src":86101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86103,86104],{},"补充知识点：",[207,86106,86107],{},[210,86108,86109],{},"append()",[19,86111,86112],{},[1601,86113],{"alt":169,"src":86114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[244,86116,86118],{"className":50773,"code":86117,"language":50775,"meta":169,"style":169},"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",[22,86119,86120,86125,86130,86135,86139,86143,86147,86152,86157,86162,86166],{"__ignoreMap":169},[252,86121,86122],{"class":254,"line":255},[252,86123,86124],{"class":262},"append(param1)\n",[252,86126,86127],{"class":254,"line":170},[252,86128,86129],{"class":262},"append(param1, param2)\n",[252,86131,86132],{"class":254,"line":1318},[252,86133,86134],{"class":262},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[252,86136,86137],{"class":254,"line":1333},[252,86138,2539],{"emptyLinePlaceholder":181},[252,86140,86141],{"class":254,"line":1339},[252,86142,2539],{"emptyLinePlaceholder":181},[252,86144,86145],{"class":254,"line":1353},[252,86146,2539],{"emptyLinePlaceholder":181},[252,86148,86149],{"class":254,"line":1359},[252,86150,86151],{"class":262},"let div = document.createElement(\"div\");\n",[252,86153,86154],{"class":254,"line":1450},[252,86155,86156],{"class":262},"let p = document.createElement(\"p\");\n",[252,86158,86159],{"class":254,"line":1456},[252,86160,86161],{"class":262},"div.append(p);\n",[252,86163,86164],{"class":254,"line":1468},[252,86165,2539],{"emptyLinePlaceholder":181},[252,86167,86168,86171,86173],{"class":254,"line":1751},[252,86169,86170],{"class":262},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[252,86172,19],{"class":51440},[252,86174,86175],{"class":262},"> ]\n",[207,86177,86178],{"start":170},[210,86179,86180],{},"remove()",[19,86182,86183],{},"自己删自己",[19,86185,86186],{},[1601,86187],{"alt":169,"src":86188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[244,86190,86192],{"className":50773,"code":86191,"language":50775,"meta":169,"style":169},"\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",[22,86193,86194,86204,86218,86222,86230,86244,86264,86276,86284,86291,86303,86316,86351,86363,86374,86386,86398,86410,86437,86447,86451,86455,86464,86476,86490,86500,86512,86516,86520,86530,86541,86551,86561,86574,86587,86597,86601,86605,86614,86624,86636,86640,86644,86653,86663,86673,86685,86689,86693,86703,86719,86730,86740,86750,86762,86774,86786,86790,86794,86807,86818,86822,86830,86838,86842,86850,86870,86890,86898,86903,86929,86934,86939,86958,86963,86975,86980,86991,87001,87011,87016,87021,87025,87030,87035,87040,87060,87065,87085,87090,87104,87109,87114,87119,87135,87139,87144,87173,87178,87183,87188,87199,87203,87207,87211,87216,87241,87246,87271,87276,87285,87289,87294,87319,87323,87348,87352,87361,87365,87370,87388,87398,87402,87410,87418,87422],{"__ignoreMap":169},[252,86195,86196,86198,86200,86202],{"class":254,"line":255},[252,86197,51437],{"class":262},[252,86199,51441],{"class":51440},[252,86201,51444],{"class":2102},[252,86203,51447],{"class":262},[252,86205,86206,86208,86210,86212,86214,86216],{"class":254,"line":170},[252,86207,1173],{"class":262},[252,86209,50775],{"class":51440},[252,86211,51456],{"class":2102},[252,86213,308],{"class":262},[252,86215,51461],{"class":367},[252,86217,51447],{"class":262},[252,86219,86220],{"class":254,"line":1318},[252,86221,2539],{"emptyLinePlaceholder":181},[252,86223,86224,86226,86228],{"class":254,"line":1333},[252,86225,1173],{"class":262},[252,86227,51474],{"class":51440},[252,86229,51447],{"class":262},[252,86231,86232,86234,86236,86238,86240,86242],{"class":254,"line":1339},[252,86233,52284],{"class":262},[252,86235,51484],{"class":51440},[252,86237,51487],{"class":2102},[252,86239,308],{"class":262},[252,86241,51492],{"class":367},[252,86243,51447],{"class":262},[252,86245,86246,86248,86250,86252,86254,86256,86258,86260,86262],{"class":254,"line":1353},[252,86247,52284],{"class":262},[252,86249,51484],{"class":51440},[252,86251,15060],{"class":2102},[252,86253,308],{"class":262},[252,86255,51531],{"class":367},[252,86257,51511],{"class":2102},[252,86259,308],{"class":262},[252,86261,51538],{"class":367},[252,86263,51447],{"class":262},[252,86265,86266,86268,86270,86272,86274],{"class":254,"line":1359},[252,86267,52284],{"class":262},[252,86269,51547],{"class":51440},[252,86271,51550],{"class":262},[252,86273,51547],{"class":51440},[252,86275,51447],{"class":262},[252,86277,86278,86280,86282],{"class":254,"line":1450},[252,86279,52284],{"class":262},[252,86281,5266],{"class":51440},[252,86283,51447],{"class":262},[252,86285,86286,86289],{"class":254,"line":1456},[252,86287,86288],{"class":2102},"    .modal",[252,86290,15712],{"class":262},[252,86292,86293,86295,86297,86299,86301],{"class":254,"line":1468},[252,86294,54911],{"class":311},[252,86296,51577],{"class":262},[252,86298,4112],{"class":311},[252,86300,51632],{"class":258},[252,86302,1429],{"class":262},[252,86304,86305,86308,86310,86312,86314],{"class":254,"line":1751},[252,86306,86307],{"class":311},"      min-height",[252,86309,51577],{"class":262},[252,86311,574],{"class":311},[252,86313,51632],{"class":258},[252,86315,1429],{"class":262},[252,86317,86318,86320,86322,86324,86326,86328,86330,86332,86334,86336,86338,86340,86342,86344,86346,86349],{"class":254,"line":1756},[252,86319,78889],{"class":311},[252,86321,51577],{"class":262},[252,86323,454],{"class":311},[252,86325,4232],{"class":311},[252,86327,2177],{"class":311},[252,86329,51632],{"class":258},[252,86331,78906],{"class":311},[252,86333,263],{"class":262},[252,86335,454],{"class":311},[252,86337,12575],{"class":262},[252,86339,454],{"class":311},[252,86341,12575],{"class":262},[252,86343,454],{"class":311},[252,86345,12575],{"class":262},[252,86347,86348],{"class":311},"0.1",[252,86350,2858],{"class":262},[252,86352,86353,86355,86357,86359,86361],{"class":254,"line":1762},[252,86354,55274],{"class":311},[252,86356,51577],{"class":262},[252,86358,556],{"class":311},[252,86360,51632],{"class":258},[252,86362,1429],{"class":262},[252,86364,86365,86367,86369,86372],{"class":254,"line":1767},[252,86366,54899],{"class":311},[252,86368,51577],{"class":262},[252,86370,86371],{"class":311},"fixed",[252,86373,1429],{"class":262},[252,86375,86376,86379,86381,86384],{"class":254,"line":1781},[252,86377,86378],{"class":311},"      z-index",[252,86380,51577],{"class":262},[252,86382,86383],{"class":311},"999",[252,86385,1429],{"class":262},[252,86387,86388,86390,86392,86394,86396],{"class":254,"line":1786},[252,86389,54978],{"class":311},[252,86391,51577],{"class":262},[252,86393,919],{"class":311},[252,86395,591],{"class":258},[252,86397,1429],{"class":262},[252,86399,86400,86402,86404,86406,86408],{"class":254,"line":1792},[252,86401,55087],{"class":311},[252,86403,51577],{"class":262},[252,86405,919],{"class":311},[252,86407,591],{"class":258},[252,86409,1429],{"class":262},[252,86411,86412,86414,86416,86418,86420,86423,86425,86427,86429,86431,86433,86435],{"class":254,"line":1813},[252,86413,78930],{"class":311},[252,86415,51577],{"class":262},[252,86417,78935],{"class":311},[252,86419,263],{"class":262},[252,86421,86422],{"class":311},"-50",[252,86424,591],{"class":258},[252,86426,12575],{"class":262},[252,86428,86422],{"class":311},[252,86430,591],{"class":258},[252,86432,12575],{"class":262},[252,86434,454],{"class":311},[252,86436,2858],{"class":262},[252,86438,86439,86441,86443,86445],{"class":254,"line":1818},[252,86440,55024],{"class":311},[252,86442,51577],{"class":262},[252,86444,60982],{"class":311},[252,86446,1429],{"class":262},[252,86448,86449],{"class":254,"line":1832},[252,86450,2326],{"class":262},[252,86452,86453],{"class":254,"line":1837},[252,86454,2539],{"emptyLinePlaceholder":181},[252,86456,86457,86459,86462],{"class":254,"line":1866},[252,86458,86288],{"class":2102},[252,86460,86461],{"class":2102}," .header",[252,86463,15712],{"class":262},[252,86465,86466,86468,86470,86472,86474],{"class":254,"line":1871},[252,86467,57499],{"class":311},[252,86469,51577],{"class":262},[252,86471,664],{"class":311},[252,86473,51632],{"class":258},[252,86475,1429],{"class":262},[252,86477,86478,86480,86482,86484,86486,86488],{"class":254,"line":1888},[252,86479,54835],{"class":311},[252,86481,51577],{"class":262},[252,86483,454],{"class":311},[252,86485,2177],{"class":311},[252,86487,51632],{"class":258},[252,86489,1429],{"class":262},[252,86491,86492,86494,86496,86498],{"class":254,"line":1893},[252,86493,54899],{"class":311},[252,86495,51577],{"class":262},[252,86497,54904],{"class":311},[252,86499,1429],{"class":262},[252,86501,86502,86504,86506,86508,86510],{"class":254,"line":1898},[252,86503,55062],{"class":311},[252,86505,51577],{"class":262},[252,86507,963],{"class":311},[252,86509,51632],{"class":258},[252,86511,1429],{"class":262},[252,86513,86514],{"class":254,"line":1903},[252,86515,2326],{"class":262},[252,86517,86518],{"class":254,"line":1917},[252,86519,2539],{"emptyLinePlaceholder":181},[252,86521,86522,86524,86526,86528],{"class":254,"line":1922},[252,86523,86288],{"class":2102},[252,86525,86461],{"class":2102},[252,86527,3171],{"class":51440},[252,86529,15712],{"class":262},[252,86531,86532,86535,86537,86539],{"class":254,"line":2716},[252,86533,86534],{"class":311},"      font-style",[252,86536,51577],{"class":262},[252,86538,63981],{"class":311},[252,86540,1429],{"class":262},[252,86542,86543,86545,86547,86549],{"class":254,"line":2730},[252,86544,57556],{"class":311},[252,86546,51577],{"class":262},[252,86548,62210],{"class":311},[252,86550,1429],{"class":262},[252,86552,86553,86555,86557,86559],{"class":254,"line":2738},[252,86554,54899],{"class":311},[252,86556,51577],{"class":262},[252,86558,54971],{"class":311},[252,86560,1429],{"class":262},[252,86562,86563,86566,86568,86570,86572],{"class":254,"line":2743},[252,86564,86565],{"class":311},"      right",[252,86567,51577],{"class":262},[252,86569,838],{"class":311},[252,86571,51632],{"class":258},[252,86573,1429],{"class":262},[252,86575,86576,86578,86580,86583,86585],{"class":254,"line":2749},[252,86577,55087],{"class":311},[252,86579,51577],{"class":262},[252,86581,86582],{"class":311},"-2",[252,86584,51632],{"class":258},[252,86586,1429],{"class":262},[252,86588,86589,86591,86593,86595],{"class":254,"line":2755},[252,86590,62165],{"class":311},[252,86592,51577],{"class":262},[252,86594,62170],{"class":311},[252,86596,1429],{"class":262},[252,86598,86599],{"class":254,"line":2760},[252,86600,2326],{"class":262},[252,86602,86603],{"class":254,"line":8088},[252,86604,2539],{"emptyLinePlaceholder":181},[252,86606,86607,86609,86612],{"class":254,"line":8112},[252,86608,86288],{"class":2102},[252,86610,86611],{"class":2102}," .body",[252,86613,15712],{"class":262},[252,86615,86616,86618,86620,86622],{"class":254,"line":8117},[252,86617,57426],{"class":311},[252,86619,51577],{"class":262},[252,86621,51732],{"class":311},[252,86623,1429],{"class":262},[252,86625,86626,86628,86630,86632,86634],{"class":254,"line":8123},[252,86627,54835],{"class":311},[252,86629,51577],{"class":262},[252,86631,709],{"class":311},[252,86633,51632],{"class":258},[252,86635,1429],{"class":262},[252,86637,86638],{"class":254,"line":8150},[252,86639,2326],{"class":262},[252,86641,86642],{"class":254,"line":8155},[252,86643,2539],{"emptyLinePlaceholder":181},[252,86645,86646,86648,86651],{"class":254,"line":8161},[252,86647,86288],{"class":2102},[252,86649,86650],{"class":2102}," .footer",[252,86652,15712],{"class":262},[252,86654,86655,86657,86659,86661],{"class":254,"line":8173},[252,86656,55149],{"class":311},[252,86658,51577],{"class":262},[252,86660,51617],{"class":311},[252,86662,1429],{"class":262},[252,86664,86665,86667,86669,86671],{"class":254,"line":8185},[252,86666,55160],{"class":311},[252,86668,51577],{"class":262},[252,86670,51720],{"class":311},[252,86672,1429],{"class":262},[252,86674,86675,86677,86679,86681,86683],{"class":254,"line":8197},[252,86676,54835],{"class":311},[252,86678,51577],{"class":262},[252,86680,709],{"class":311},[252,86682,51632],{"class":258},[252,86684,1429],{"class":262},[252,86686,86687],{"class":254,"line":9856},[252,86688,2326],{"class":262},[252,86690,86691],{"class":254,"line":9881},[252,86692,2539],{"emptyLinePlaceholder":181},[252,86694,86695,86697,86699,86701],{"class":254,"line":9904},[252,86696,86288],{"class":2102},[252,86698,86650],{"class":2102},[252,86700,1537],{"class":51440},[252,86702,15712],{"class":262},[252,86704,86705,86707,86709,86711,86713,86715,86717],{"class":254,"line":9928},[252,86706,54835],{"class":311},[252,86708,51577],{"class":262},[252,86710,334],{"class":311},[252,86712,51632],{"class":258},[252,86714,2222],{"class":311},[252,86716,51632],{"class":258},[252,86718,1429],{"class":262},[252,86720,86721,86723,86725,86728],{"class":254,"line":9933},[252,86722,61861],{"class":311},[252,86724,51577],{"class":262},[252,86726,86727],{"class":311},"#ccc",[252,86729,1429],{"class":262},[252,86731,86732,86734,86736,86738],{"class":254,"line":9938},[252,86733,64110],{"class":311},[252,86735,51577],{"class":262},[252,86737,54877],{"class":311},[252,86739,1429],{"class":262},[252,86741,86742,86744,86746,86748],{"class":254,"line":9943},[252,86743,57556],{"class":311},[252,86745,51577],{"class":262},[252,86747,60982],{"class":311},[252,86749,1429],{"class":262},[252,86751,86752,86754,86756,86758,86760],{"class":254,"line":9952},[252,86753,55274],{"class":311},[252,86755,51577],{"class":262},[252,86757,340],{"class":311},[252,86759,51632],{"class":258},[252,86761,1429],{"class":262},[252,86763,86764,86766,86768,86770,86772],{"class":254,"line":9957},[252,86765,61890],{"class":311},[252,86767,51577],{"class":262},[252,86769,709],{"class":311},[252,86771,51632],{"class":258},[252,86773,1429],{"class":262},[252,86775,86776,86778,86780,86782,86784],{"class":254,"line":9963},[252,86777,55062],{"class":311},[252,86779,51577],{"class":262},[252,86781,812],{"class":311},[252,86783,51632],{"class":258},[252,86785,1429],{"class":262},[252,86787,86788],{"class":254,"line":9984},[252,86789,2326],{"class":262},[252,86791,86792],{"class":254,"line":9990},[252,86793,2539],{"emptyLinePlaceholder":181},[252,86795,86796,86798,86800,86802,86805],{"class":254,"line":10004},[252,86797,86288],{"class":2102},[252,86799,86650],{"class":2102},[252,86801,1537],{"class":51440},[252,86803,86804],{"class":2102},".submit",[252,86806,15712],{"class":262},[252,86808,86809,86811,86813,86816],{"class":254,"line":10010},[252,86810,55024],{"class":311},[252,86812,51577],{"class":262},[252,86814,86815],{"class":311},"#369",[252,86817,1429],{"class":262},[252,86819,86820],{"class":254,"line":10037},[252,86821,2326],{"class":262},[252,86823,86824,86826,86828],{"class":254,"line":10046},[252,86825,52557],{"class":262},[252,86827,5266],{"class":51440},[252,86829,51447],{"class":262},[252,86831,86832,86834,86836],{"class":254,"line":10052},[252,86833,51925],{"class":262},[252,86835,51474],{"class":51440},[252,86837,51447],{"class":262},[252,86839,86840],{"class":254,"line":10060},[252,86841,2539],{"emptyLinePlaceholder":181},[252,86843,86844,86846,86848],{"class":254,"line":10065},[252,86845,1173],{"class":262},[252,86847,51940],{"class":51440},[252,86849,51447],{"class":262},[252,86851,86852,86854,86856,86858,86860,86863,86866,86868],{"class":254,"line":16744},[252,86853,52284],{"class":262},[252,86855,54027],{"class":51440},[252,86857,15099],{"class":2102},[252,86859,308],{"class":262},[252,86861,86862],{"class":367},"\"delete\"",[252,86864,86865],{"class":262},">删除\u003C\u002F",[252,86867,54027],{"class":51440},[252,86869,51447],{"class":262},[252,86871,86872,86874,86876,86878,86880,86883,86886,86888],{"class":254,"line":16750},[252,86873,52284],{"class":262},[252,86875,54027],{"class":51440},[252,86877,15099],{"class":2102},[252,86879,308],{"class":262},[252,86881,86882],{"class":367},"\"login\"",[252,86884,86885],{"class":262},">登录\u003C\u002F",[252,86887,54027],{"class":51440},[252,86889,51447],{"class":262},[252,86891,86892,86894,86896],{"class":254,"line":16773},[252,86893,52284],{"class":262},[252,86895,51953],{"class":51440},[252,86897,51447],{"class":262},[252,86899,86900],{"class":254,"line":16779},[252,86901,86902],{"class":321},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[252,86904,86905,86907,86910,86912,86914,86916,86918,86920,86923,86925,86927],{"class":254,"line":16802},[252,86906,70224],{"class":258},[252,86908,86909],{"class":2102}," Modal",[252,86911,263],{"class":262},[252,86913,51547],{"class":5356},[252,86915,13704],{"class":258},[252,86917,70070],{"class":367},[252,86919,12575],{"class":262},[252,86921,86922],{"class":5356},"message",[252,86924,13704],{"class":258},[252,86926,70070],{"class":367},[252,86928,12582],{"class":262},[252,86930,86931],{"class":254,"line":16816},[252,86932,86933],{"class":321},"      \u002F\u002F 创建Model 模态框盒子\n",[252,86935,86936],{"class":254,"line":16836},[252,86937,86938],{"class":321},"      \u002F\u002F 1.1 创建div标签\n",[252,86940,86941,86943,86946,86948,86950,86952,86954,86956],{"class":254,"line":16842},[252,86942,70191],{"class":311},[252,86944,86945],{"class":262},".modalBox ",[252,86947,308],{"class":258},[252,86949,54536],{"class":262},[252,86951,70291],{"class":2102},[252,86953,263],{"class":262},[252,86955,82070],{"class":367},[252,86957,269],{"class":262},[252,86959,86960],{"class":254,"line":16853},[252,86961,86962],{"class":321},"      \u002F\u002F 1.2 给div 添加类名为model\n",[252,86964,86965,86967,86970,86972],{"class":254,"line":16876},[252,86966,70191],{"class":311},[252,86968,86969],{"class":262},".modalBox.className ",[252,86971,308],{"class":258},[252,86973,86974],{"class":367}," 'modal'\n",[252,86976,86977],{"class":254,"line":16898},[252,86978,86979],{"class":321},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[252,86981,86982,86984,86987,86989],{"class":254,"line":16903},[252,86983,70191],{"class":311},[252,86985,86986],{"class":262},".modalBox.innerHTML ",[252,86988,308],{"class":258},[252,86990,70308],{"class":367},[252,86992,86993,86996,86998],{"class":254,"line":16909},[252,86994,86995],{"class":367},"        \u003Cdiv class=\"header\">${",[252,86997,51547],{"class":262},[252,86999,87000],{"class":367},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[252,87002,87003,87006,87008],{"class":254,"line":16923},[252,87004,87005],{"class":367},"        \u003Cdiv class=\"body\">${",[252,87007,86922],{"class":262},[252,87009,87010],{"class":367},"}\u003C\u002Fdiv>\n",[252,87012,87013],{"class":254,"line":16936},[252,87014,87015],{"class":367},"      `\n",[252,87017,87018],{"class":254,"line":16941},[252,87019,87020],{"class":321},"      \u002F\u002F console.log(this.modalBox)\n",[252,87022,87023],{"class":254,"line":16955},[252,87024,2326],{"class":262},[252,87026,87027],{"class":254,"line":16960},[252,87028,87029],{"class":321},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[252,87031,87032],{"class":254,"line":16966},[252,87033,87034],{"class":321},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[252,87036,87037],{"class":254,"line":16971},[252,87038,87039],{"class":321},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[252,87041,87042,87045,87047,87049,87051,87054,87056,87058],{"class":254,"line":16985},[252,87043,87044],{"class":311},"    Modal",[252,87046,821],{"class":262},[252,87048,85717],{"class":311},[252,87050,821],{"class":262},[252,87052,87053],{"class":2102},"open",[252,87055,13704],{"class":258},[252,87057,59058],{"class":258},[252,87059,54592],{"class":262},[252,87061,87062],{"class":254,"line":16990},[252,87063,87064],{"class":321},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[252,87066,87067,87069,87072,87074,87076,87078,87080,87083],{"class":254,"line":16995},[252,87068,58368],{"class":258},[252,87070,87071],{"class":311}," box",[252,87073,13704],{"class":258},[252,87075,54536],{"class":262},[252,87077,54539],{"class":2102},[252,87079,263],{"class":262},[252,87081,87082],{"class":367},"'.modal'",[252,87084,269],{"class":262},[252,87086,87087],{"class":254,"line":17009},[252,87088,87089],{"class":321},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[252,87091,87092,87095,87097,87100,87102],{"class":254,"line":17021},[252,87093,87094],{"class":262},"      box ",[252,87096,1854],{"class":258},[252,87098,87099],{"class":262}," box.",[252,87101,57146],{"class":2102},[252,87103,2115],{"class":262},[252,87105,87106],{"class":254,"line":17026},[252,87107,87108],{"class":321},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[252,87110,87111],{"class":254,"line":17039},[252,87112,87113],{"class":321},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[252,87115,87116],{"class":254,"line":17044},[252,87117,87118],{"class":321},"      \u002F\u002F append可以增加对象\n",[252,87120,87121,87124,87127,87129,87132],{"class":254,"line":17049},[252,87122,87123],{"class":262},"      document.body.",[252,87125,87126],{"class":2102},"append",[252,87128,263],{"class":262},[252,87130,87131],{"class":311},"this",[252,87133,87134],{"class":262},".modalBox)\n",[252,87136,87137],{"class":254,"line":17054},[252,87138,2539],{"emptyLinePlaceholder":181},[252,87140,87141],{"class":254,"line":17067},[252,87142,87143],{"class":321},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[252,87145,87146,87148,87151,87153,87155,87158,87160,87162,87164,87166,87169,87171],{"class":254,"line":17072},[252,87147,70191],{"class":311},[252,87149,87150],{"class":262},".modalBox.",[252,87152,54539],{"class":2102},[252,87154,263],{"class":262},[252,87156,87157],{"class":367},"'i'",[252,87159,30966],{"class":262},[252,87161,57953],{"class":2102},[252,87163,263],{"class":262},[252,87165,57958],{"class":367},[252,87167,87168],{"class":262},", () ",[252,87170,84860],{"class":258},[252,87172,15712],{"class":262},[252,87174,87175],{"class":254,"line":32773},[252,87176,87177],{"class":321},"        \u002F\u002F 这个地方需要用到箭头函数\n",[252,87179,87180],{"class":254,"line":32779},[252,87181,87182],{"class":321},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[252,87184,87185],{"class":254,"line":32785},[252,87186,87187],{"class":321},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[252,87189,87190,87192,87194,87197],{"class":254,"line":32791},[252,87191,64866],{"class":311},[252,87193,821],{"class":262},[252,87195,87196],{"class":2102},"close",[252,87198,2115],{"class":262},[252,87200,87201],{"class":254,"line":32797},[252,87202,64955],{"class":262},[252,87204,87205],{"class":254,"line":32808},[252,87206,2326],{"class":262},[252,87208,87209],{"class":254,"line":32814},[252,87210,2539],{"emptyLinePlaceholder":181},[252,87212,87213],{"class":254,"line":32834},[252,87214,87215],{"class":321},"    \u002F\u002F 测试一下 点击 删除按钮\n",[252,87217,87218,87220,87222,87224,87227,87229,87231,87233,87235,87237,87239],{"class":254,"line":32840},[252,87219,52547],{"class":262},[252,87221,54539],{"class":2102},[252,87223,263],{"class":262},[252,87225,87226],{"class":367},"'#delete'",[252,87228,30966],{"class":262},[252,87230,57953],{"class":2102},[252,87232,263],{"class":262},[252,87234,57958],{"class":367},[252,87236,87168],{"class":262},[252,87238,84860],{"class":258},[252,87240,15712],{"class":262},[252,87242,87243],{"class":254,"line":32851},[252,87244,87245],{"class":321},"      \u002F\u002F 先调用Model构造函数\n",[252,87247,87248,87250,87253,87255,87257,87259,87261,87264,87266,87269],{"class":254,"line":32857},[252,87249,58368],{"class":258},[252,87251,87252],{"class":311}," del",[252,87254,13704],{"class":258},[252,87256,11718],{"class":258},[252,87258,86909],{"class":2102},[252,87260,263],{"class":262},[252,87262,87263],{"class":367},"'温馨的提示'",[252,87265,12575],{"class":262},[252,87267,87268],{"class":367},"'您没有删除权限操作'",[252,87270,269],{"class":262},[252,87272,87273],{"class":254,"line":32863},[252,87274,87275],{"class":321},"      \u002F\u002F 实例对象调用open方法\n",[252,87277,87278,87281,87283],{"class":254,"line":32869},[252,87279,87280],{"class":262},"      del.",[252,87282,87053],{"class":2102},[252,87284,2115],{"class":262},[252,87286,87287],{"class":254,"line":32875},[252,87288,33601],{"class":262},[252,87290,87291],{"class":254,"line":32881},[252,87292,87293],{"class":321},"    \u002F\u002F 测试一下 点击 登录按钮\n",[252,87295,87296,87298,87300,87302,87305,87307,87309,87311,87313,87315,87317],{"class":254,"line":32887},[252,87297,52547],{"class":262},[252,87299,54539],{"class":2102},[252,87301,263],{"class":262},[252,87303,87304],{"class":367},"'#login'",[252,87306,30966],{"class":262},[252,87308,57953],{"class":2102},[252,87310,263],{"class":262},[252,87312,57958],{"class":367},[252,87314,87168],{"class":262},[252,87316,84860],{"class":258},[252,87318,15712],{"class":262},[252,87320,87321],{"class":254,"line":32893},[252,87322,87245],{"class":321},[252,87324,87325,87327,87330,87332,87334,87336,87338,87341,87343,87346],{"class":254,"line":32913},[252,87326,58368],{"class":258},[252,87328,87329],{"class":311}," log",[252,87331,13704],{"class":258},[252,87333,11718],{"class":258},[252,87335,86909],{"class":2102},[252,87337,263],{"class":262},[252,87339,87340],{"class":367},"'友情提示'",[252,87342,12575],{"class":262},[252,87344,87345],{"class":367},"'您还没有登录呢'",[252,87347,269],{"class":262},[252,87349,87350],{"class":254,"line":32919},[252,87351,87275],{"class":321},[252,87353,87354,87357,87359],{"class":254,"line":32935},[252,87355,87356],{"class":262},"      log.",[252,87358,87053],{"class":2102},[252,87360,2115],{"class":262},[252,87362,87363],{"class":254,"line":32941},[252,87364,33601],{"class":262},[252,87366,87367],{"class":254,"line":32955},[252,87368,87369],{"class":321},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[252,87371,87372,87374,87376,87378,87380,87382,87384,87386],{"class":254,"line":32961},[252,87373,87044],{"class":311},[252,87375,821],{"class":262},[252,87377,85717],{"class":311},[252,87379,821],{"class":262},[252,87381,87196],{"class":2102},[252,87383,13704],{"class":258},[252,87385,59058],{"class":258},[252,87387,54592],{"class":262},[252,87389,87390,87392,87394,87396],{"class":254,"line":32976},[252,87391,70191],{"class":311},[252,87393,87150],{"class":262},[252,87395,57146],{"class":2102},[252,87397,2115],{"class":262},[252,87399,87400],{"class":254,"line":32982},[252,87401,2326],{"class":262},[252,87403,87404,87406,87408],{"class":254,"line":32991},[252,87405,52557],{"class":262},[252,87407,51953],{"class":51440},[252,87409,51447],{"class":262},[252,87411,87412,87414,87416],{"class":254,"line":32997},[252,87413,51925],{"class":262},[252,87415,51940],{"class":51440},[252,87417,51447],{"class":262},[252,87419,87420],{"class":254,"line":33006},[252,87421,2539],{"emptyLinePlaceholder":181},[252,87423,87424,87426,87428],{"class":254,"line":33012},[252,87425,51925],{"class":262},[252,87427,50775],{"class":51440},[252,87429,51447],{"class":262},[19,87431,87432],{},[1601,87433],{"alt":169,"src":87434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87436,87438],{"id":87437},"_414-深浅拷贝","4.14 深浅拷贝",[224,87440,87442],{"id":87441},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87444,87445],{},[1601,87446],{"alt":169,"src":87447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87449,87450],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87452,87453],{},[1601,87454],{"alt":169,"src":87455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87457,87458],{},[1601,87459],{"alt":169,"src":87460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87462,87463],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87465,87466],{},[1601,87467],{"alt":169,"src":87468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87470,11472],{},[19,87472,87473],{},[1601,87474],{"alt":169,"src":87475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[224,87477,87479],{"id":87478},"_4142-深拷贝","4.14.2 深拷贝",[19,87481,87482],{},"深拷贝：拷贝的是对象，不是地址",[19,87484,87485],{},"常用的三种方法：",[207,87487,87488,87491,87494],{},[210,87489,87490],{},"通过递归实现深拷贝",[210,87492,87493],{},"lodash\u002FcloneDeep",[210,87495,87496],{},"通过JSON.stringify()实现",[22137,87498,87500],{"id":87499},"_41421-递归函数","4.14.2.1 递归函数",[19,87502,87503],{},[1601,87504],{"alt":169,"src":87505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[207,87507,87508],{},[210,87509,87510],{},"死递归占溢出：",[244,87512,87514],{"className":53207,"code":87513,"language":53209,"meta":169,"style":169},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[22,87515,87516,87524,87532,87536,87541,87545,87550,87558],{"__ignoreMap":169},[252,87517,87518,87520,87522],{"class":254,"line":255},[252,87519,1173],{"class":262},[252,87521,51940],{"class":51440},[252,87523,51447],{"class":262},[252,87525,87526,87528,87530],{"class":254,"line":170},[252,87527,52284],{"class":262},[252,87529,51953],{"class":51440},[252,87531,51447],{"class":262},[252,87533,87534],{"class":254,"line":1318},[252,87535,77283],{"class":262},[252,87537,87538],{"class":254,"line":1333},[252,87539,87540],{"class":262},"      fn()\n",[252,87542,87543],{"class":254,"line":1339},[252,87544,2326],{"class":262},[252,87546,87547],{"class":254,"line":1353},[252,87548,87549],{"class":262},"    fn()\n",[252,87551,87552,87554,87556],{"class":254,"line":1359},[252,87553,52557],{"class":262},[252,87555,51953],{"class":51440},[252,87557,51447],{"class":262},[252,87559,87560,87562,87564],{"class":254,"line":1450},[252,87561,51925],{"class":262},[252,87563,51940],{"class":51440},[252,87565,51447],{"class":262},[207,87567,87568],{"start":170},[210,87569,87570],{},"递归函数要加判断条件：",[19,87572,87573],{},[1601,87574],{"alt":169,"src":87575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[207,87577,87578],{"start":1318},[210,87579,87580],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[244,87582,87584],{"className":50773,"code":87583,"language":50775,"meta":169,"style":169},"\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",[22,87585,87586,87596,87610,87614,87622,87636,87656,87668,87676,87680,87688,87700,87708,87716,87741,87753,87757,87764,87772,87780,87784],{"__ignoreMap":169},[252,87587,87588,87590,87592,87594],{"class":254,"line":255},[252,87589,51437],{"class":262},[252,87591,51441],{"class":51440},[252,87593,51444],{"class":2102},[252,87595,51447],{"class":262},[252,87597,87598,87600,87602,87604,87606,87608],{"class":254,"line":170},[252,87599,1173],{"class":262},[252,87601,50775],{"class":51440},[252,87603,51456],{"class":2102},[252,87605,308],{"class":262},[252,87607,51461],{"class":367},[252,87609,51447],{"class":262},[252,87611,87612],{"class":254,"line":1318},[252,87613,2539],{"emptyLinePlaceholder":181},[252,87615,87616,87618,87620],{"class":254,"line":1333},[252,87617,1173],{"class":262},[252,87619,51474],{"class":51440},[252,87621,51447],{"class":262},[252,87623,87624,87626,87628,87630,87632,87634],{"class":254,"line":1339},[252,87625,52284],{"class":262},[252,87627,51484],{"class":51440},[252,87629,51487],{"class":2102},[252,87631,308],{"class":262},[252,87633,51492],{"class":367},[252,87635,51447],{"class":262},[252,87637,87638,87640,87642,87644,87646,87648,87650,87652,87654],{"class":254,"line":1353},[252,87639,52284],{"class":262},[252,87641,51484],{"class":51440},[252,87643,15060],{"class":2102},[252,87645,308],{"class":262},[252,87647,51531],{"class":367},[252,87649,51511],{"class":2102},[252,87651,308],{"class":262},[252,87653,51538],{"class":367},[252,87655,51447],{"class":262},[252,87657,87658,87660,87662,87664,87666],{"class":254,"line":1359},[252,87659,52284],{"class":262},[252,87661,51547],{"class":51440},[252,87663,51550],{"class":262},[252,87665,51547],{"class":51440},[252,87667,51447],{"class":262},[252,87669,87670,87672,87674],{"class":254,"line":1450},[252,87671,51925],{"class":262},[252,87673,51474],{"class":51440},[252,87675,51447],{"class":262},[252,87677,87678],{"class":254,"line":1456},[252,87679,2539],{"emptyLinePlaceholder":181},[252,87681,87682,87684,87686],{"class":254,"line":1468},[252,87683,1173],{"class":262},[252,87685,51940],{"class":51440},[252,87687,51447],{"class":262},[252,87689,87690,87692,87694,87696,87698],{"class":254,"line":1751},[252,87691,52284],{"class":262},[252,87693,51751],{"class":51440},[252,87695,55454],{"class":262},[252,87697,51751],{"class":51440},[252,87699,51447],{"class":262},[252,87701,87702,87704,87706],{"class":254,"line":1756},[252,87703,52284],{"class":262},[252,87705,51953],{"class":51440},[252,87707,51447],{"class":262},[252,87709,87710,87712,87714],{"class":254,"line":1762},[252,87711,70224],{"class":258},[252,87713,73913],{"class":2102},[252,87715,10993],{"class":262},[252,87717,87718,87720,87722,87724,87726,87728,87730,87732,87734,87736,87739],{"class":254,"line":1767},[252,87719,55911],{"class":262},[252,87721,54539],{"class":2102},[252,87723,263],{"class":262},[252,87725,82070],{"class":367},[252,87727,74389],{"class":262},[252,87729,308],{"class":258},[252,87731,11718],{"class":258},[252,87733,73929],{"class":2102},[252,87735,17401],{"class":262},[252,87737,87738],{"class":2102},"toLocaleString",[252,87740,2115],{"class":262},[252,87742,87743,87746,87749,87751],{"class":254,"line":1781},[252,87744,87745],{"class":2102},"      setTimeout",[252,87747,87748],{"class":262},"(getTime, ",[252,87750,6550],{"class":311},[252,87752,269],{"class":262},[252,87754,87755],{"class":254,"line":1786},[252,87756,2326],{"class":262},[252,87758,87759,87762],{"class":254,"line":1792},[252,87760,87761],{"class":2102},"    getTime",[252,87763,2115],{"class":262},[252,87765,87766,87768,87770],{"class":254,"line":1813},[252,87767,52557],{"class":262},[252,87769,51953],{"class":51440},[252,87771,51447],{"class":262},[252,87773,87774,87776,87778],{"class":254,"line":1818},[252,87775,51925],{"class":262},[252,87777,51940],{"class":51440},[252,87779,51447],{"class":262},[252,87781,87782],{"class":254,"line":1832},[252,87783,2539],{"emptyLinePlaceholder":181},[252,87785,87786,87788,87790],{"class":254,"line":1837},[252,87787,51925],{"class":262},[252,87789,50775],{"class":51440},[252,87791,51447],{"class":262},[19,87793,87794],{},[1601,87795],{"alt":169,"src":87796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[207,87798,87799],{"start":1333},[210,87800,87490],{},[19,87802,87803],{},[1601,87804],{"alt":169,"src":87805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,87807,87808],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,87810,39329],{},[19,87812,87813],{},"这个是简易版的递归函数深拷贝",[19,87815,87816],{},"一定要注意先数组再对象，因为万物皆可对象",[244,87818,87820],{"className":50773,"code":87819,"language":50775,"meta":169,"style":169},"\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",[22,87821,87822,87832,87846,87850,87858,87872,87892,87904,87912,87916,87924,87932,87942,87951,87959,87975,87979,87987,87991,87995,88007,88012,88031,88047,88052,88057,88062,88077,88082,88087,88096,88104,88121,88129,88135,88143,88148,88153,88162,88166,88170,88174,88185,88194,88204,88218,88228,88236,88244,88252,88256],{"__ignoreMap":169},[252,87823,87824,87826,87828,87830],{"class":254,"line":255},[252,87825,51437],{"class":262},[252,87827,51441],{"class":51440},[252,87829,51444],{"class":2102},[252,87831,51447],{"class":262},[252,87833,87834,87836,87838,87840,87842,87844],{"class":254,"line":170},[252,87835,1173],{"class":262},[252,87837,50775],{"class":51440},[252,87839,51456],{"class":2102},[252,87841,308],{"class":262},[252,87843,51461],{"class":367},[252,87845,51447],{"class":262},[252,87847,87848],{"class":254,"line":1318},[252,87849,2539],{"emptyLinePlaceholder":181},[252,87851,87852,87854,87856],{"class":254,"line":1333},[252,87853,1173],{"class":262},[252,87855,51474],{"class":51440},[252,87857,51447],{"class":262},[252,87859,87860,87862,87864,87866,87868,87870],{"class":254,"line":1339},[252,87861,52284],{"class":262},[252,87863,51484],{"class":51440},[252,87865,51487],{"class":2102},[252,87867,308],{"class":262},[252,87869,51492],{"class":367},[252,87871,51447],{"class":262},[252,87873,87874,87876,87878,87880,87882,87884,87886,87888,87890],{"class":254,"line":1353},[252,87875,52284],{"class":262},[252,87877,51484],{"class":51440},[252,87879,15060],{"class":2102},[252,87881,308],{"class":262},[252,87883,51531],{"class":367},[252,87885,51511],{"class":2102},[252,87887,308],{"class":262},[252,87889,51538],{"class":367},[252,87891,51447],{"class":262},[252,87893,87894,87896,87898,87900,87902],{"class":254,"line":1359},[252,87895,52284],{"class":262},[252,87897,51547],{"class":51440},[252,87899,51550],{"class":262},[252,87901,51547],{"class":51440},[252,87903,51447],{"class":262},[252,87905,87906,87908,87910],{"class":254,"line":1450},[252,87907,51925],{"class":262},[252,87909,51474],{"class":51440},[252,87911,51447],{"class":262},[252,87913,87914],{"class":254,"line":1456},[252,87915,2539],{"emptyLinePlaceholder":181},[252,87917,87918,87920,87922],{"class":254,"line":1468},[252,87919,1173],{"class":262},[252,87921,51940],{"class":51440},[252,87923,51447],{"class":262},[252,87925,87926,87928,87930],{"class":254,"line":1751},[252,87927,52284],{"class":262},[252,87929,51953],{"class":51440},[252,87931,51447],{"class":262},[252,87933,87934,87936,87938,87940],{"class":254,"line":1756},[252,87935,11361],{"class":258},[252,87937,70111],{"class":311},[252,87939,13704],{"class":258},[252,87941,15712],{"class":262},[252,87943,87944,87946,87949],{"class":254,"line":1762},[252,87945,71756],{"class":262},[252,87947,87948],{"class":367},"'pink'",[252,87950,31606],{"class":262},[252,87952,87953,87955,87957],{"class":254,"line":1767},[252,87954,71766],{"class":262},[252,87956,913],{"class":311},[252,87958,31606],{"class":262},[252,87960,87961,87964,87967,87969,87972],{"class":254,"line":1781},[252,87962,87963],{"class":262},"      hobby: [",[252,87965,87966],{"class":367},"'乒乓球'",[252,87968,12575],{"class":262},[252,87970,87971],{"class":367},"'足球'",[252,87973,87974],{"class":262},"],\n",[252,87976,87977],{"class":254,"line":1786},[252,87978,78011],{"class":262},[252,87980,87981,87984],{"class":254,"line":1792},[252,87982,87983],{"class":262},"        baby: ",[252,87985,87986],{"class":367},"'小pink'\n",[252,87988,87989],{"class":254,"line":1813},[252,87990,52538],{"class":262},[252,87992,87993],{"class":254,"line":1818},[252,87994,2326],{"class":262},[252,87996,87997,87999,88002,88004],{"class":254,"line":1832},[252,87998,11361],{"class":258},[252,88000,88001],{"class":311}," o",[252,88003,13704],{"class":258},[252,88005,88006],{"class":262}," {}\n",[252,88008,88009],{"class":254,"line":1837},[252,88010,88011],{"class":321},"    \u002F\u002F 拷贝函数\n",[252,88013,88014,88016,88019,88021,88024,88026,88029],{"class":254,"line":1866},[252,88015,70224],{"class":258},[252,88017,88018],{"class":2102}," deepCopy",[252,88020,263],{"class":262},[252,88022,88023],{"class":5356},"newObj",[252,88025,12575],{"class":262},[252,88027,88028],{"class":5356},"oldObj",[252,88030,12582],{"class":262},[252,88032,88033,88035,88037,88039,88042,88044],{"class":254,"line":1871},[252,88034,52424],{"class":258},[252,88036,1797],{"class":262},[252,88038,51987],{"class":258},[252,88040,88041],{"class":262}," k ",[252,88043,26183],{"class":258},[252,88045,88046],{"class":262}," oldObj) {\n",[252,88048,88049],{"class":254,"line":1888},[252,88050,88051],{"class":321},"        \u002F\u002F 处理数组的问题\n",[252,88053,88054],{"class":254,"line":1893},[252,88055,88056],{"class":321},"        \u002F\u002F 判断是否属于数组\n",[252,88058,88059],{"class":254,"line":1898},[252,88060,88061],{"class":321},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[252,88063,88064,88066,88069,88072,88075],{"class":254,"line":1903},[252,88065,2636],{"class":258},[252,88067,88068],{"class":262}," (oldObj[k] ",[252,88070,88071],{"class":258},"instanceof",[252,88073,88074],{"class":2102}," Array",[252,88076,12582],{"class":262},[252,88078,88079],{"class":254,"line":1917},[252,88080,88081],{"class":321},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[252,88083,88084],{"class":254,"line":1922},[252,88085,88086],{"class":321},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[252,88088,88089,88092,88094],{"class":254,"line":2716},[252,88090,88091],{"class":262},"          newObj[k] ",[252,88093,308],{"class":258},[252,88095,51978],{"class":262},[252,88097,88098,88101],{"class":254,"line":2730},[252,88099,88100],{"class":2102},"          deepCopy",[252,88102,88103],{"class":262},"(newObj[k], oldObj[k])\n",[252,88105,88106,88108,88110,88112,88114,88116,88119],{"class":254,"line":2738},[252,88107,80219],{"class":262},[252,88109,1840],{"class":258},[252,88111,1843],{"class":258},[252,88113,88068],{"class":262},[252,88115,88071],{"class":258},[252,88117,88118],{"class":2102}," Object",[252,88120,12582],{"class":262},[252,88122,88123,88125,88127],{"class":254,"line":2743},[252,88124,88091],{"class":262},[252,88126,308],{"class":258},[252,88128,88006],{"class":262},[252,88130,88131,88133],{"class":254,"line":2749},[252,88132,88100],{"class":2102},[252,88134,88103],{"class":262},[252,88136,88137,88139,88141],{"class":254,"line":2755},[252,88138,80219],{"class":262},[252,88140,1840],{"class":258},[252,88142,15712],{"class":262},[252,88144,88145],{"class":254,"line":2760},[252,88146,88147],{"class":321},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[252,88149,88150],{"class":254,"line":8088},[252,88151,88152],{"class":321},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[252,88154,88155,88157,88159],{"class":254,"line":8112},[252,88156,88091],{"class":262},[252,88158,308],{"class":258},[252,88160,88161],{"class":262}," oldObj[k]\n",[252,88163,88164],{"class":254,"line":8117},[252,88165,2668],{"class":262},[252,88167,88168],{"class":254,"line":8123},[252,88169,52538],{"class":262},[252,88171,88172],{"class":254,"line":8150},[252,88173,2326],{"class":262},[252,88175,88176,88179,88182],{"class":254,"line":8155},[252,88177,88178],{"class":2102},"    deepCopy",[252,88180,88181],{"class":262},"(o, obj) ",[252,88183,88184],{"class":321},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[252,88186,88187,88189,88191],{"class":254,"line":8161},[252,88188,73893],{"class":262},[252,88190,58387],{"class":2102},[252,88192,88193],{"class":262},"(o)\n",[252,88195,88196,88199,88201],{"class":254,"line":8173},[252,88197,88198],{"class":262},"    o.age ",[252,88200,308],{"class":258},[252,88202,88203],{"class":311}," 20\n",[252,88205,88206,88209,88211,88213,88215],{"class":254,"line":8185},[252,88207,88208],{"class":262},"    o.hobby[",[252,88210,454],{"class":311},[252,88212,4582],{"class":262},[252,88214,308],{"class":258},[252,88216,88217],{"class":367}," '篮球'\n",[252,88219,88220,88223,88225],{"class":254,"line":8197},[252,88221,88222],{"class":262},"    o.family ",[252,88224,308],{"class":258},[252,88226,88227],{"class":367}," '老pink'\n",[252,88229,88230,88232,88234],{"class":254,"line":9856},[252,88231,73893],{"class":262},[252,88233,58387],{"class":2102},[252,88235,70176],{"class":262},[252,88237,88238,88240,88242],{"class":254,"line":9881},[252,88239,52557],{"class":262},[252,88241,51953],{"class":51440},[252,88243,51447],{"class":262},[252,88245,88246,88248,88250],{"class":254,"line":9904},[252,88247,51925],{"class":262},[252,88249,51940],{"class":51440},[252,88251,51447],{"class":262},[252,88253,88254],{"class":254,"line":9928},[252,88255,2539],{"emptyLinePlaceholder":181},[252,88257,88258,88260,88262],{"class":254,"line":9933},[252,88259,51925],{"class":262},[252,88261,50775],{"class":51440},[252,88263,51447],{"class":262},[19,88265,88266],{},[1601,88267],{"alt":169,"src":88268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22137,88270,88272,88273],{"id":88271},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[412,88274,88275],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88277,88278],{},[501,88279,88280],{"href":88280,"rel":88281},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24004],[19,88283,88284],{},"lodash里边的方法都要加上一个下划线_",[19,88286,88287],{},"_.cloneDeep()",[244,88289,88291],{"className":50773,"code":88290,"language":50775,"meta":169,"style":169},"\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",[22,88292,88293,88303,88317,88321,88329,88343,88363,88375,88383,88387,88395,88400,88419,88427,88437,88445,88453,88465,88469,88475,88479,88483,88499,88507,88516,88524,88532,88540,88544],{"__ignoreMap":169},[252,88294,88295,88297,88299,88301],{"class":254,"line":255},[252,88296,51437],{"class":262},[252,88298,51441],{"class":51440},[252,88300,51444],{"class":2102},[252,88302,51447],{"class":262},[252,88304,88305,88307,88309,88311,88313,88315],{"class":254,"line":170},[252,88306,1173],{"class":262},[252,88308,50775],{"class":51440},[252,88310,51456],{"class":2102},[252,88312,308],{"class":262},[252,88314,51461],{"class":367},[252,88316,51447],{"class":262},[252,88318,88319],{"class":254,"line":1318},[252,88320,2539],{"emptyLinePlaceholder":181},[252,88322,88323,88325,88327],{"class":254,"line":1333},[252,88324,1173],{"class":262},[252,88326,51474],{"class":51440},[252,88328,51447],{"class":262},[252,88330,88331,88333,88335,88337,88339,88341],{"class":254,"line":1339},[252,88332,52284],{"class":262},[252,88334,51484],{"class":51440},[252,88336,51487],{"class":2102},[252,88338,308],{"class":262},[252,88340,51492],{"class":367},[252,88342,51447],{"class":262},[252,88344,88345,88347,88349,88351,88353,88355,88357,88359,88361],{"class":254,"line":1353},[252,88346,52284],{"class":262},[252,88348,51484],{"class":51440},[252,88350,15060],{"class":2102},[252,88352,308],{"class":262},[252,88354,51531],{"class":367},[252,88356,51511],{"class":2102},[252,88358,308],{"class":262},[252,88360,51538],{"class":367},[252,88362,51447],{"class":262},[252,88364,88365,88367,88369,88371,88373],{"class":254,"line":1359},[252,88366,52284],{"class":262},[252,88368,51547],{"class":51440},[252,88370,51550],{"class":262},[252,88372,51547],{"class":51440},[252,88374,51447],{"class":262},[252,88376,88377,88379,88381],{"class":254,"line":1450},[252,88378,51925],{"class":262},[252,88380,51474],{"class":51440},[252,88382,51447],{"class":262},[252,88384,88385],{"class":254,"line":1456},[252,88386,2539],{"emptyLinePlaceholder":181},[252,88388,88389,88391,88393],{"class":254,"line":1468},[252,88390,1173],{"class":262},[252,88392,51940],{"class":51440},[252,88394,51447],{"class":262},[252,88396,88397],{"class":254,"line":1751},[252,88398,88399],{"class":321},"  \u003C!-- 先引用这个库 -->\n",[252,88401,88402,88404,88406,88408,88410,88413,88415,88417],{"class":254,"line":1756},[252,88403,52284],{"class":262},[252,88405,51953],{"class":51440},[252,88407,55379],{"class":2102},[252,88409,308],{"class":262},[252,88411,88412],{"class":367},"\"lodash.min.js\"",[252,88414,55454],{"class":262},[252,88416,51953],{"class":51440},[252,88418,51447],{"class":262},[252,88420,88421,88423,88425],{"class":254,"line":1762},[252,88422,52284],{"class":262},[252,88424,51953],{"class":51440},[252,88426,51447],{"class":262},[252,88428,88429,88431,88433,88435],{"class":254,"line":1767},[252,88430,11361],{"class":258},[252,88432,70111],{"class":311},[252,88434,13704],{"class":258},[252,88436,15712],{"class":262},[252,88438,88439,88441,88443],{"class":254,"line":1781},[252,88440,71756],{"class":262},[252,88442,87948],{"class":367},[252,88444,31606],{"class":262},[252,88446,88447,88449,88451],{"class":254,"line":1786},[252,88448,71766],{"class":262},[252,88450,913],{"class":311},[252,88452,31606],{"class":262},[252,88454,88455,88457,88459,88461,88463],{"class":254,"line":1792},[252,88456,87963],{"class":262},[252,88458,87966],{"class":367},[252,88460,12575],{"class":262},[252,88462,87971],{"class":367},[252,88464,87974],{"class":262},[252,88466,88467],{"class":254,"line":1813},[252,88468,78011],{"class":262},[252,88470,88471,88473],{"class":254,"line":1818},[252,88472,87983],{"class":262},[252,88474,87986],{"class":367},[252,88476,88477],{"class":254,"line":1832},[252,88478,52538],{"class":262},[252,88480,88481],{"class":254,"line":1837},[252,88482,2326],{"class":262},[252,88484,88485,88487,88489,88491,88494,88497],{"class":254,"line":1866},[252,88486,11361],{"class":258},[252,88488,88001],{"class":311},[252,88490,13704],{"class":258},[252,88492,88493],{"class":262}," _.",[252,88495,88496],{"class":2102},"cloneDeep",[252,88498,70176],{"class":262},[252,88500,88501,88503,88505],{"class":254,"line":1871},[252,88502,73893],{"class":262},[252,88504,58387],{"class":2102},[252,88506,88193],{"class":262},[252,88508,88509,88512,88514],{"class":254,"line":1888},[252,88510,88511],{"class":262},"    o.family.baby ",[252,88513,308],{"class":258},[252,88515,88227],{"class":367},[252,88517,88518,88520,88522],{"class":254,"line":1893},[252,88519,73893],{"class":262},[252,88521,58387],{"class":2102},[252,88523,70176],{"class":262},[252,88525,88526,88528,88530],{"class":254,"line":1898},[252,88527,52557],{"class":262},[252,88529,51953],{"class":51440},[252,88531,51447],{"class":262},[252,88533,88534,88536,88538],{"class":254,"line":1903},[252,88535,51925],{"class":262},[252,88537,51940],{"class":51440},[252,88539,51447],{"class":262},[252,88541,88542],{"class":254,"line":1917},[252,88543,2539],{"emptyLinePlaceholder":181},[252,88545,88546,88548,88550],{"class":254,"line":1922},[252,88547,51925],{"class":262},[252,88549,50775],{"class":51440},[252,88551,51447],{"class":262},[19,88553,88554],{},[1601,88555],{"alt":169,"src":88556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22137,88558,88560],{"id":88559},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[244,88562,88564],{"className":50773,"code":88563,"language":50775,"meta":169,"style":169},"\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",[22,88565,88566,88576,88590,88594,88602,88616,88636,88648,88656,88660,88668,88676,88686,88694,88702,88714,88718,88724,88728,88732,88737,88742,88747,88773,88781,88790,88798,88806,88814,88818],{"__ignoreMap":169},[252,88567,88568,88570,88572,88574],{"class":254,"line":255},[252,88569,51437],{"class":262},[252,88571,51441],{"class":51440},[252,88573,51444],{"class":2102},[252,88575,51447],{"class":262},[252,88577,88578,88580,88582,88584,88586,88588],{"class":254,"line":170},[252,88579,1173],{"class":262},[252,88581,50775],{"class":51440},[252,88583,51456],{"class":2102},[252,88585,308],{"class":262},[252,88587,51461],{"class":367},[252,88589,51447],{"class":262},[252,88591,88592],{"class":254,"line":1318},[252,88593,2539],{"emptyLinePlaceholder":181},[252,88595,88596,88598,88600],{"class":254,"line":1333},[252,88597,1173],{"class":262},[252,88599,51474],{"class":51440},[252,88601,51447],{"class":262},[252,88603,88604,88606,88608,88610,88612,88614],{"class":254,"line":1339},[252,88605,52284],{"class":262},[252,88607,51484],{"class":51440},[252,88609,51487],{"class":2102},[252,88611,308],{"class":262},[252,88613,51492],{"class":367},[252,88615,51447],{"class":262},[252,88617,88618,88620,88622,88624,88626,88628,88630,88632,88634],{"class":254,"line":1353},[252,88619,52284],{"class":262},[252,88621,51484],{"class":51440},[252,88623,15060],{"class":2102},[252,88625,308],{"class":262},[252,88627,51531],{"class":367},[252,88629,51511],{"class":2102},[252,88631,308],{"class":262},[252,88633,51538],{"class":367},[252,88635,51447],{"class":262},[252,88637,88638,88640,88642,88644,88646],{"class":254,"line":1359},[252,88639,52284],{"class":262},[252,88641,51547],{"class":51440},[252,88643,51550],{"class":262},[252,88645,51547],{"class":51440},[252,88647,51447],{"class":262},[252,88649,88650,88652,88654],{"class":254,"line":1450},[252,88651,51925],{"class":262},[252,88653,51474],{"class":51440},[252,88655,51447],{"class":262},[252,88657,88658],{"class":254,"line":1456},[252,88659,2539],{"emptyLinePlaceholder":181},[252,88661,88662,88664,88666],{"class":254,"line":1468},[252,88663,1173],{"class":262},[252,88665,51940],{"class":51440},[252,88667,51447],{"class":262},[252,88669,88670,88672,88674],{"class":254,"line":1751},[252,88671,52284],{"class":262},[252,88673,51953],{"class":51440},[252,88675,51447],{"class":262},[252,88677,88678,88680,88682,88684],{"class":254,"line":1756},[252,88679,11361],{"class":258},[252,88681,70111],{"class":311},[252,88683,13704],{"class":258},[252,88685,15712],{"class":262},[252,88687,88688,88690,88692],{"class":254,"line":1762},[252,88689,71756],{"class":262},[252,88691,87948],{"class":367},[252,88693,31606],{"class":262},[252,88695,88696,88698,88700],{"class":254,"line":1767},[252,88697,71766],{"class":262},[252,88699,913],{"class":311},[252,88701,31606],{"class":262},[252,88703,88704,88706,88708,88710,88712],{"class":254,"line":1781},[252,88705,87963],{"class":262},[252,88707,87966],{"class":367},[252,88709,12575],{"class":262},[252,88711,87971],{"class":367},[252,88713,87974],{"class":262},[252,88715,88716],{"class":254,"line":1786},[252,88717,78011],{"class":262},[252,88719,88720,88722],{"class":254,"line":1792},[252,88721,87983],{"class":262},[252,88723,87986],{"class":367},[252,88725,88726],{"class":254,"line":1813},[252,88727,52538],{"class":262},[252,88729,88730],{"class":254,"line":1818},[252,88731,2326],{"class":262},[252,88733,88734],{"class":254,"line":1832},[252,88735,88736],{"class":321},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[252,88738,88739],{"class":254,"line":1837},[252,88740,88741],{"class":321},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[252,88743,88744],{"class":254,"line":1866},[252,88745,88746],{"class":321},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[252,88748,88749,88751,88753,88755,88758,88760,88763,88765,88767,88769,88771],{"class":254,"line":1871},[252,88750,11361],{"class":258},[252,88752,88001],{"class":311},[252,88754,13704],{"class":258},[252,88756,88757],{"class":311}," JSON",[252,88759,821],{"class":262},[252,88761,88762],{"class":2102},"parse",[252,88764,263],{"class":262},[252,88766,71804],{"class":311},[252,88768,821],{"class":262},[252,88770,71809],{"class":2102},[252,88772,71812],{"class":262},[252,88774,88775,88777,88779],{"class":254,"line":1888},[252,88776,73893],{"class":262},[252,88778,58387],{"class":2102},[252,88780,88193],{"class":262},[252,88782,88783,88785,88787],{"class":254,"line":1893},[252,88784,88511],{"class":262},[252,88786,308],{"class":258},[252,88788,88789],{"class":367}," '123'\n",[252,88791,88792,88794,88796],{"class":254,"line":1898},[252,88793,73893],{"class":262},[252,88795,58387],{"class":2102},[252,88797,70176],{"class":262},[252,88799,88800,88802,88804],{"class":254,"line":1903},[252,88801,52557],{"class":262},[252,88803,51953],{"class":51440},[252,88805,51447],{"class":262},[252,88807,88808,88810,88812],{"class":254,"line":1917},[252,88809,51925],{"class":262},[252,88811,51940],{"class":51440},[252,88813,51447],{"class":262},[252,88815,88816],{"class":254,"line":1922},[252,88817,2539],{"emptyLinePlaceholder":181},[252,88819,88820,88822,88824],{"class":254,"line":2716},[252,88821,51925],{"class":262},[252,88823,50775],{"class":51440},[252,88825,51447],{"class":262},[19,88827,88828],{},[1601,88829],{"alt":169,"src":88830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88832,88834],{"id":88833},"_415-异常处理","4.15 异常处理",[207,88836,88837],{},[210,88838,88839],{},"throw抛异常",[19,88841,88842],{},[1601,88843],{"alt":169,"src":88844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[207,88846,88847],{"start":170},[210,88848,88849],{},"try\u002Fcatch 捕获错误信息",[19,88851,88852],{},[1601,88853],{"alt":169,"src":88854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[244,88856,88858],{"className":50773,"code":88857,"language":50775,"meta":169,"style":169},"\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",[22,88859,88860,88870,88884,88888,88896,88910,88930,88942,88950,88954,88962,88974,88982,88991,88998,89003,89022,89031,89042,89047,89057,89062,89067,89072,89089,89093,89098,89105,89117,89121,89133,89137,89141,89146,89151,89158,89166,89174,89178],{"__ignoreMap":169},[252,88861,88862,88864,88866,88868],{"class":254,"line":255},[252,88863,51437],{"class":262},[252,88865,51441],{"class":51440},[252,88867,51444],{"class":2102},[252,88869,51447],{"class":262},[252,88871,88872,88874,88876,88878,88880,88882],{"class":254,"line":170},[252,88873,1173],{"class":262},[252,88875,50775],{"class":51440},[252,88877,51456],{"class":2102},[252,88879,308],{"class":262},[252,88881,51461],{"class":367},[252,88883,51447],{"class":262},[252,88885,88886],{"class":254,"line":1318},[252,88887,2539],{"emptyLinePlaceholder":181},[252,88889,88890,88892,88894],{"class":254,"line":1333},[252,88891,1173],{"class":262},[252,88893,51474],{"class":51440},[252,88895,51447],{"class":262},[252,88897,88898,88900,88902,88904,88906,88908],{"class":254,"line":1339},[252,88899,52284],{"class":262},[252,88901,51484],{"class":51440},[252,88903,51487],{"class":2102},[252,88905,308],{"class":262},[252,88907,51492],{"class":367},[252,88909,51447],{"class":262},[252,88911,88912,88914,88916,88918,88920,88922,88924,88926,88928],{"class":254,"line":1353},[252,88913,52284],{"class":262},[252,88915,51484],{"class":51440},[252,88917,15060],{"class":2102},[252,88919,308],{"class":262},[252,88921,51531],{"class":367},[252,88923,51511],{"class":2102},[252,88925,308],{"class":262},[252,88927,51538],{"class":367},[252,88929,51447],{"class":262},[252,88931,88932,88934,88936,88938,88940],{"class":254,"line":1359},[252,88933,52284],{"class":262},[252,88935,51547],{"class":51440},[252,88937,51550],{"class":262},[252,88939,51547],{"class":51440},[252,88941,51447],{"class":262},[252,88943,88944,88946,88948],{"class":254,"line":1450},[252,88945,51925],{"class":262},[252,88947,51474],{"class":51440},[252,88949,51447],{"class":262},[252,88951,88952],{"class":254,"line":1456},[252,88953,2539],{"emptyLinePlaceholder":181},[252,88955,88956,88958,88960],{"class":254,"line":1468},[252,88957,1173],{"class":262},[252,88959,51940],{"class":51440},[252,88961,51447],{"class":262},[252,88963,88964,88966,88968,88970,88972],{"class":254,"line":1751},[252,88965,52284],{"class":262},[252,88967,19],{"class":51440},[252,88969,53634],{"class":262},[252,88971,19],{"class":51440},[252,88973,51447],{"class":262},[252,88975,88976,88978,88980],{"class":254,"line":1756},[252,88977,52284],{"class":262},[252,88979,51953],{"class":51440},[252,88981,51447],{"class":262},[252,88983,88984,88986,88989],{"class":254,"line":1762},[252,88985,70224],{"class":258},[252,88987,88988],{"class":2102}," fn",[252,88990,10993],{"class":262},[252,88992,88993,88996],{"class":254,"line":1767},[252,88994,88995],{"class":258},"      try",[252,88997,15712],{"class":262},[252,88999,89000],{"class":254,"line":1781},[252,89001,89002],{"class":321},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[252,89004,89005,89007,89009,89011,89013,89015,89017,89020],{"class":254,"line":1786},[252,89006,61410],{"class":258},[252,89008,6965],{"class":311},[252,89010,13704],{"class":258},[252,89012,54536],{"class":262},[252,89014,54539],{"class":2102},[252,89016,263],{"class":262},[252,89018,89019],{"class":367},"'.p'",[252,89021,269],{"class":262},[252,89023,89024,89027,89029],{"class":254,"line":1792},[252,89025,89026],{"class":262},"        p.style.color ",[252,89028,308],{"class":258},[252,89030,67191],{"class":367},[252,89032,89033,89036,89039],{"class":254,"line":1813},[252,89034,89035],{"class":262},"      } ",[252,89037,89038],{"class":258},"catch",[252,89040,89041],{"class":262}," (err) {\n",[252,89043,89044],{"class":254,"line":1818},[252,89045,89046],{"class":321},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[252,89048,89049,89052,89054],{"class":254,"line":1832},[252,89050,89051],{"class":262},"        console.",[252,89053,58387],{"class":2102},[252,89055,89056],{"class":262},"(err.message)\n",[252,89058,89059],{"class":254,"line":1837},[252,89060,89061],{"class":321},"        \u002F\u002F 想要中断程序，需要加return\n",[252,89063,89064],{"class":254,"line":1866},[252,89065,89066],{"class":321},"        \u002F\u002F return\n",[252,89068,89069],{"class":254,"line":1871},[252,89070,89071],{"class":321},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[252,89073,89074,89077,89079,89082,89084,89087],{"class":254,"line":1888},[252,89075,89076],{"class":258},"        throw",[252,89078,11718],{"class":258},[252,89080,89081],{"class":2102}," Error",[252,89083,263],{"class":262},[252,89085,89086],{"class":367},"'你看看，选择器错误了吧'",[252,89088,269],{"class":262},[252,89090,89091],{"class":254,"line":1893},[252,89092,52538],{"class":262},[252,89094,89095],{"class":254,"line":1898},[252,89096,89097],{"class":321},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[252,89099,89100,89103],{"class":254,"line":1903},[252,89101,89102],{"class":258},"      finally",[252,89104,15712],{"class":262},[252,89106,89107,89110,89112,89115],{"class":254,"line":1917},[252,89108,89109],{"class":2102},"        alert",[252,89111,263],{"class":262},[252,89113,89114],{"class":367},"'弹出对话框'",[252,89116,269],{"class":262},[252,89118,89119],{"class":254,"line":1922},[252,89120,52538],{"class":262},[252,89122,89123,89125,89127,89129,89131],{"class":254,"line":2716},[252,89124,58384],{"class":262},[252,89126,58387],{"class":2102},[252,89128,263],{"class":262},[252,89130,735],{"class":311},[252,89132,269],{"class":262},[252,89134,89135],{"class":254,"line":2730},[252,89136,2539],{"emptyLinePlaceholder":181},[252,89138,89139],{"class":254,"line":2738},[252,89140,2326],{"class":262},[252,89142,89143],{"class":254,"line":2743},[252,89144,89145],{"class":321},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[252,89147,89148],{"class":254,"line":2749},[252,89149,89150],{"class":321},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[252,89152,89153,89156],{"class":254,"line":2755},[252,89154,89155],{"class":2102},"    fn",[252,89157,2115],{"class":262},[252,89159,89160,89162,89164],{"class":254,"line":2760},[252,89161,52557],{"class":262},[252,89163,51953],{"class":51440},[252,89165,51447],{"class":262},[252,89167,89168,89170,89172],{"class":254,"line":8088},[252,89169,51925],{"class":262},[252,89171,51940],{"class":51440},[252,89173,51447],{"class":262},[252,89175,89176],{"class":254,"line":8112},[252,89177,2539],{"emptyLinePlaceholder":181},[252,89179,89180,89182,89184],{"class":254,"line":8117},[252,89181,51925],{"class":262},[252,89183,50775],{"class":51440},[252,89185,51447],{"class":262},[19,89187,89188],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[207,89190,89191],{"start":1318},[210,89192,89193],{},"debugger",[19,89195,89196],{},[1601,89197],{"alt":169,"src":89198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89200,89201],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89203,89205],{"id":89204},"_416-处理this","4.16 处理this",[224,89207,89209],{"id":89208},"_4161-this的指向","4.16.1 this的指向",[207,89211,89212],{},[210,89213,89214],{},"普通函数的this",[19,89216,89217],{},[1601,89218],{"alt":169,"src":89219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[207,89221,89222],{"start":170},[210,89223,89224],{},"箭头函数的this",[19,89226,89227],{},[1601,89228],{"alt":169,"src":89229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89231,89232],{},[1601,89233],{"alt":169,"src":89234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89236,89237],{},[1601,89238],{"alt":169,"src":89239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[224,89241,89243],{"id":89242},"_4162-this的改变","4.16.2 this的改变",[19,89245,89246],{},"call() apply() bind()",[207,89248,89249],{},[210,89250,89251],{},"call()",[19,89253,89254],{},[1601,89255],{"alt":169,"src":89256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89258,89259],{},"两个作用：①调用函数；②改变this指向",[244,89261,89263],{"className":53207,"code":89262,"language":53209,"meta":169,"style":169},"\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",[22,89264,89265,89273,89281,89285,89290,89294,89299,89304,89309,89313,89318,89326],{"__ignoreMap":169},[252,89266,89267,89269,89271],{"class":254,"line":255},[252,89268,1173],{"class":262},[252,89270,51940],{"class":51440},[252,89272,51447],{"class":262},[252,89274,89275,89277,89279],{"class":254,"line":170},[252,89276,52284],{"class":262},[252,89278,51953],{"class":51440},[252,89280,51447],{"class":262},[252,89282,89283],{"class":254,"line":1318},[252,89284,71663],{"class":262},[252,89286,89287],{"class":254,"line":1333},[252,89288,89289],{"class":262},"      uname: 'pink'\n",[252,89291,89292],{"class":254,"line":1339},[252,89293,2326],{"class":262},[252,89295,89296],{"class":254,"line":1353},[252,89297,89298],{"class":262},"    function fn(x, y) {\n",[252,89300,89301],{"class":254,"line":1359},[252,89302,89303],{"class":262},"      console.log(this)  \u002F\u002Fwindow\n",[252,89305,89306],{"class":254,"line":1450},[252,89307,89308],{"class":262},"      console.log(x + y)\n",[252,89310,89311],{"class":254,"line":1456},[252,89312,2326],{"class":262},[252,89314,89315],{"class":254,"line":1468},[252,89316,89317],{"class":262},"    fn.call(obj, 1, 2)\n",[252,89319,89320,89322,89324],{"class":254,"line":1751},[252,89321,52557],{"class":262},[252,89323,51953],{"class":51440},[252,89325,51447],{"class":262},[252,89327,89328,89330,89332],{"class":254,"line":1756},[252,89329,51925],{"class":262},[252,89331,51940],{"class":51440},[252,89333,51447],{"class":262},[19,89335,89336],{},[1601,89337],{"alt":169,"src":89338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[207,89340,89341],{"start":170},[210,89342,89343],{},"apply()",[19,89345,89346],{},[1601,89347],{"alt":169,"src":89348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89350,89259],{},[19,89352,89353],{},"call传递的是普通参数，而apply必须传递的是数组",[244,89355,89357],{"className":50773,"code":89356,"language":50775,"meta":169,"style":169},"\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",[22,89358,89359,89369,89383,89387,89395,89409,89429,89441,89449,89453,89461,89469,89479,89486,89490,89495,89511,89523,89537,89541,89546,89565,89570,89574,89579,89584,89592,89597,89619,89624,89640,89656,89668,89672,89677,89696,89704,89712,89716],{"__ignoreMap":169},[252,89360,89361,89363,89365,89367],{"class":254,"line":255},[252,89362,51437],{"class":262},[252,89364,51441],{"class":51440},[252,89366,51444],{"class":2102},[252,89368,51447],{"class":262},[252,89370,89371,89373,89375,89377,89379,89381],{"class":254,"line":170},[252,89372,1173],{"class":262},[252,89374,50775],{"class":51440},[252,89376,51456],{"class":2102},[252,89378,308],{"class":262},[252,89380,51461],{"class":367},[252,89382,51447],{"class":262},[252,89384,89385],{"class":254,"line":1318},[252,89386,2539],{"emptyLinePlaceholder":181},[252,89388,89389,89391,89393],{"class":254,"line":1333},[252,89390,1173],{"class":262},[252,89392,51474],{"class":51440},[252,89394,51447],{"class":262},[252,89396,89397,89399,89401,89403,89405,89407],{"class":254,"line":1339},[252,89398,52284],{"class":262},[252,89400,51484],{"class":51440},[252,89402,51487],{"class":2102},[252,89404,308],{"class":262},[252,89406,51492],{"class":367},[252,89408,51447],{"class":262},[252,89410,89411,89413,89415,89417,89419,89421,89423,89425,89427],{"class":254,"line":1353},[252,89412,52284],{"class":262},[252,89414,51484],{"class":51440},[252,89416,15060],{"class":2102},[252,89418,308],{"class":262},[252,89420,51531],{"class":367},[252,89422,51511],{"class":2102},[252,89424,308],{"class":262},[252,89426,51538],{"class":367},[252,89428,51447],{"class":262},[252,89430,89431,89433,89435,89437,89439],{"class":254,"line":1359},[252,89432,52284],{"class":262},[252,89434,51547],{"class":51440},[252,89436,51550],{"class":262},[252,89438,51547],{"class":51440},[252,89440,51447],{"class":262},[252,89442,89443,89445,89447],{"class":254,"line":1450},[252,89444,51925],{"class":262},[252,89446,51474],{"class":51440},[252,89448,51447],{"class":262},[252,89450,89451],{"class":254,"line":1456},[252,89452,2539],{"emptyLinePlaceholder":181},[252,89454,89455,89457,89459],{"class":254,"line":1468},[252,89456,1173],{"class":262},[252,89458,51940],{"class":51440},[252,89460,51447],{"class":262},[252,89462,89463,89465,89467],{"class":254,"line":1751},[252,89464,52284],{"class":262},[252,89466,51953],{"class":51440},[252,89468,51447],{"class":262},[252,89470,89471,89473,89475,89477],{"class":254,"line":1756},[252,89472,11361],{"class":258},[252,89474,70111],{"class":311},[252,89476,13704],{"class":258},[252,89478,15712],{"class":262},[252,89480,89481,89483],{"class":254,"line":1762},[252,89482,71766],{"class":262},[252,89484,89485],{"class":311},"18\n",[252,89487,89488],{"class":254,"line":1767},[252,89489,2326],{"class":262},[252,89491,89492],{"class":254,"line":1781},[252,89493,89494],{"class":321},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[252,89496,89497,89499,89501,89503,89505,89507,89509],{"class":254,"line":1786},[252,89498,70224],{"class":258},[252,89500,88988],{"class":2102},[252,89502,263],{"class":262},[252,89504,1083],{"class":5356},[252,89506,12575],{"class":262},[252,89508,1108],{"class":5356},[252,89510,12582],{"class":262},[252,89512,89513,89515,89517,89519,89521],{"class":254,"line":1792},[252,89514,58384],{"class":262},[252,89516,58387],{"class":2102},[252,89518,263],{"class":262},[252,89520,87131],{"class":311},[252,89522,269],{"class":262},[252,89524,89525,89527,89529,89532,89534],{"class":254,"line":1813},[252,89526,58384],{"class":262},[252,89528,58387],{"class":2102},[252,89530,89531],{"class":262},"(x ",[252,89533,744],{"class":258},[252,89535,89536],{"class":262}," y)\n",[252,89538,89539],{"class":254,"line":1818},[252,89540,2326],{"class":262},[252,89542,89543],{"class":254,"line":1832},[252,89544,89545],{"class":321},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[252,89547,89548,89551,89554,89557,89559,89561,89563],{"class":254,"line":1837},[252,89549,89550],{"class":262},"    fn.",[252,89552,89553],{"class":2102},"apply",[252,89555,89556],{"class":262},"(obj, [",[252,89558,480],{"class":311},[252,89560,12575],{"class":262},[252,89562,340],{"class":311},[252,89564,4796],{"class":262},[252,89566,89567],{"class":254,"line":1866},[252,89568,89569],{"class":321},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[252,89571,89572],{"class":254,"line":1871},[252,89573,2539],{"emptyLinePlaceholder":181},[252,89575,89576],{"class":254,"line":1888},[252,89577,89578],{"class":321},"    \u002F\u002F 使用场景：求数组最大值\n",[252,89580,89581],{"class":254,"line":1893},[252,89582,89583],{"class":321},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[252,89585,89586,89589],{"class":254,"line":1898},[252,89587,89588],{"class":321},"    \u002F\u002F console.log(max)",[252,89590,89591],{"class":321},"   \u002F\u002F3\n",[252,89593,89594],{"class":254,"line":1903},[252,89595,89596],{"class":321},"    \u002F\u002F 指向空或者Math都是可以的\n",[252,89598,89599,89601,89603,89605,89607,89609,89611,89613,89615,89617],{"class":254,"line":1917},[252,89600,11361],{"class":258},[252,89602,57835],{"class":311},[252,89604,13704],{"class":258},[252,89606,52366],{"class":262},[252,89608,574],{"class":311},[252,89610,12575],{"class":262},[252,89612,767],{"class":311},[252,89614,12575],{"class":262},[252,89616,798],{"class":311},[252,89618,33386],{"class":262},[252,89620,89621],{"class":254,"line":1922},[252,89622,89623],{"class":321},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[252,89625,89626,89628,89630,89632,89635,89637],{"class":254,"line":2716},[252,89627,11361],{"class":258},[252,89629,6091],{"class":311},[252,89631,13704],{"class":258},[252,89633,89634],{"class":262}," Math.max.",[252,89636,89553],{"class":2102},[252,89638,89639],{"class":262},"(Math, arr)\n",[252,89641,89642,89644,89647,89649,89652,89654],{"class":254,"line":2730},[252,89643,11361],{"class":258},[252,89645,89646],{"class":311}," min",[252,89648,13704],{"class":258},[252,89650,89651],{"class":262}," Math.min.",[252,89653,89553],{"class":2102},[252,89655,89639],{"class":262},[252,89657,89658,89660,89662,89665],{"class":254,"line":2738},[252,89659,73893],{"class":262},[252,89661,58387],{"class":2102},[252,89663,89664],{"class":262},"(max, min)     ",[252,89666,89667],{"class":321},"\u002F\u002F100,4\n",[252,89669,89670],{"class":254,"line":2743},[252,89671,2539],{"emptyLinePlaceholder":181},[252,89673,89674],{"class":254,"line":2749},[252,89675,89676],{"class":321},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[252,89678,89679,89681,89683,89686,89688,89690,89693],{"class":254,"line":2755},[252,89680,73893],{"class":262},[252,89682,58387],{"class":2102},[252,89684,89685],{"class":262},"(Max.",[252,89687,6155],{"class":2102},[252,89689,263],{"class":262},[252,89691,89692],{"class":258},"...",[252,89694,89695],{"class":262},"arr))\n",[252,89697,89698,89700,89702],{"class":254,"line":2760},[252,89699,52557],{"class":262},[252,89701,51953],{"class":51440},[252,89703,51447],{"class":262},[252,89705,89706,89708,89710],{"class":254,"line":8088},[252,89707,51925],{"class":262},[252,89709,51940],{"class":51440},[252,89711,51447],{"class":262},[252,89713,89714],{"class":254,"line":8112},[252,89715,2539],{"emptyLinePlaceholder":181},[252,89717,89718,89720,89722],{"class":254,"line":8117},[252,89719,51925],{"class":262},[252,89721,50775],{"class":51440},[252,89723,51447],{"class":262},[19,89725,89726],{},[1601,89727],{"alt":169,"src":89728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[207,89730,89731],{"start":1318},[210,89732,89733],{},"bind()",[19,89735,89736],{},[1601,89737],{"alt":169,"src":89738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89740,89741],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89743,89744],{},"bind的语法跟call很相似",[244,89746,89748],{"className":53207,"code":89747,"language":53209,"meta":169,"style":169},"\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",[22,89749,89750,89758,89766,89770,89775,89779,89783,89788,89792,89797,89802,89807,89812,89817,89822,89827,89831,89839],{"__ignoreMap":169},[252,89751,89752,89754,89756],{"class":254,"line":255},[252,89753,1173],{"class":262},[252,89755,51940],{"class":51440},[252,89757,51447],{"class":262},[252,89759,89760,89762,89764],{"class":254,"line":170},[252,89761,52284],{"class":262},[252,89763,51953],{"class":51440},[252,89765,51447],{"class":262},[252,89767,89768],{"class":254,"line":1318},[252,89769,71663],{"class":262},[252,89771,89772],{"class":254,"line":1333},[252,89773,89774],{"class":262},"      age: 18\n",[252,89776,89777],{"class":254,"line":1339},[252,89778,2326],{"class":262},[252,89780,89781],{"class":254,"line":1353},[252,89782,77283],{"class":262},[252,89784,89785],{"class":254,"line":1359},[252,89786,89787],{"class":262},"      console.log(this)\n",[252,89789,89790],{"class":254,"line":1450},[252,89791,2326],{"class":262},[252,89793,89794],{"class":254,"line":1456},[252,89795,89796],{"class":262},"    \u002F\u002F 1.bind 不会调用函数\n",[252,89798,89799],{"class":254,"line":1468},[252,89800,89801],{"class":262},"    \u002F\u002F 2.bind能改变this的指向\n",[252,89803,89804],{"class":254,"line":1751},[252,89805,89806],{"class":262},"    fn.bind()\n",[252,89808,89809],{"class":254,"line":1756},[252,89810,89811],{"class":262},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[252,89813,89814],{"class":254,"line":1762},[252,89815,89816],{"class":262},"    const fun = fn.bind(obj)\n",[252,89818,89819],{"class":254,"line":1767},[252,89820,89821],{"class":262},"    \u002F\u002F console.log(fun)\n",[252,89823,89824],{"class":254,"line":1781},[252,89825,89826],{"class":262},"    \u002F\u002F 调用,查看this的指向\n",[252,89828,89829],{"class":254,"line":1786},[252,89830,52791],{"class":262},[252,89832,89833,89835,89837],{"class":254,"line":1792},[252,89834,52557],{"class":262},[252,89836,51953],{"class":51440},[252,89838,51447],{"class":262},[252,89840,89841,89843,89845],{"class":254,"line":1813},[252,89842,51925],{"class":262},[252,89844,51940],{"class":51440},[252,89846,51447],{"class":262},[19,89848,89849],{},[1601,89850],{"alt":169,"src":89851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[207,89853,89854],{"start":1333},[210,89855,89856],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[244,89858,89860],{"className":53207,"code":89859,"language":53209,"meta":169,"style":169},"\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",[22,89861,89862,89870,89883,89891,89896,89900,89905,89910,89915,89920,89925,89930,89935,89940,89944,89952],{"__ignoreMap":169},[252,89863,89864,89866,89868],{"class":254,"line":255},[252,89865,1173],{"class":262},[252,89867,51940],{"class":51440},[252,89869,51447],{"class":262},[252,89871,89872,89874,89876,89879,89881],{"class":254,"line":170},[252,89873,52284],{"class":262},[252,89875,54027],{"class":51440},[252,89877,89878],{"class":262},">禁用\u003C\u002F",[252,89880,54027],{"class":51440},[252,89882,51447],{"class":262},[252,89884,89885,89887,89889],{"class":254,"line":1318},[252,89886,52284],{"class":262},[252,89888,51953],{"class":51440},[252,89890,51447],{"class":262},[252,89892,89893],{"class":254,"line":1333},[252,89894,89895],{"class":262},"    const btn = document.querySelector('button')\n",[252,89897,89898],{"class":254,"line":1339},[252,89899,59156],{"class":262},[252,89901,89902],{"class":254,"line":1353},[252,89903,89904],{"class":262},"      this.disabled = true\n",[252,89906,89907],{"class":254,"line":1359},[252,89908,89909],{"class":262},"      \u002F\u002F 定时器是window进行调用的\n",[252,89911,89912],{"class":254,"line":1450},[252,89913,89914],{"class":262},"      setTimeout(function () {\n",[252,89916,89917],{"class":254,"line":1456},[252,89918,89919],{"class":262},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[252,89921,89922],{"class":254,"line":1468},[252,89923,89924],{"class":262},"        this.disabled = false\n",[252,89926,89927],{"class":254,"line":1751},[252,89928,89929],{"class":262},"      }.bind(this), 2000)\n",[252,89931,89932],{"class":254,"line":1756},[252,89933,89934],{"class":262},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[252,89936,89937],{"class":254,"line":1762},[252,89938,89939],{"class":262},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[252,89941,89942],{"class":254,"line":1767},[252,89943,33601],{"class":262},[252,89945,89946,89948,89950],{"class":254,"line":1781},[252,89947,52557],{"class":262},[252,89949,51953],{"class":51440},[252,89951,51447],{"class":262},[252,89953,89954,89956,89958],{"class":254,"line":1786},[252,89955,51925],{"class":262},[252,89957,51940],{"class":51440},[252,89959,51447],{"class":262},[207,89961,89962],{"start":1339},[210,89963,22092],{},[19,89965,89966],{},[1601,89967],{"alt":169,"src":89968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,89970,89972],{"id":89971},"_417-性能优化","4.17 性能优化",[224,89974,89976],{"id":89975},"_4171-防抖","4.17.1 防抖",[19,89978,89979],{},[1601,89980],{"alt":169,"src":89981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,89983,89984],{},[412,89985,89986],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,89988,89989],{},"防抖实现方式：",[1270,89991,89992],{},[210,89993,89994],{},"lodash 提供了防抖处理",[19,89996,89997],{},"_.debounce(func,[wait=0],[options={}])",[19,89999,90000],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[244,90002,90004],{"className":50773,"code":90003,"language":50775,"meta":169,"style":169},"\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",[22,90005,90006,90016,90030,90034,90042,90056,90076,90088,90096,90102,90112,90124,90136,90147,90159,90169,90179,90192,90196,90204,90212,90216,90224,90242,90260,90268,90287,90297,90306,90317,90322,90326,90331,90336,90341,90366,90374,90382,90386],{"__ignoreMap":169},[252,90007,90008,90010,90012,90014],{"class":254,"line":255},[252,90009,51437],{"class":262},[252,90011,51441],{"class":51440},[252,90013,51444],{"class":2102},[252,90015,51447],{"class":262},[252,90017,90018,90020,90022,90024,90026,90028],{"class":254,"line":170},[252,90019,1173],{"class":262},[252,90021,50775],{"class":51440},[252,90023,51456],{"class":2102},[252,90025,308],{"class":262},[252,90027,51461],{"class":367},[252,90029,51447],{"class":262},[252,90031,90032],{"class":254,"line":1318},[252,90033,2539],{"emptyLinePlaceholder":181},[252,90035,90036,90038,90040],{"class":254,"line":1333},[252,90037,1173],{"class":262},[252,90039,51474],{"class":51440},[252,90041,51447],{"class":262},[252,90043,90044,90046,90048,90050,90052,90054],{"class":254,"line":1339},[252,90045,52284],{"class":262},[252,90047,51484],{"class":51440},[252,90049,51487],{"class":2102},[252,90051,308],{"class":262},[252,90053,51492],{"class":367},[252,90055,51447],{"class":262},[252,90057,90058,90060,90062,90064,90066,90068,90070,90072,90074],{"class":254,"line":1353},[252,90059,52284],{"class":262},[252,90061,51484],{"class":51440},[252,90063,15060],{"class":2102},[252,90065,308],{"class":262},[252,90067,51531],{"class":367},[252,90069,51511],{"class":2102},[252,90071,308],{"class":262},[252,90073,51538],{"class":367},[252,90075,51447],{"class":262},[252,90077,90078,90080,90082,90084,90086],{"class":254,"line":1359},[252,90079,52284],{"class":262},[252,90081,51547],{"class":51440},[252,90083,51550],{"class":262},[252,90085,51547],{"class":51440},[252,90087,51447],{"class":262},[252,90089,90090,90092,90094],{"class":254,"line":1450},[252,90091,52284],{"class":262},[252,90093,5266],{"class":51440},[252,90095,51447],{"class":262},[252,90097,90098,90100],{"class":254,"line":1456},[252,90099,54892],{"class":2102},[252,90101,15712],{"class":262},[252,90103,90104,90106,90108,90110],{"class":254,"line":1468},[252,90105,72736],{"class":311},[252,90107,51577],{"class":262},[252,90109,60645],{"class":311},[252,90111,1429],{"class":262},[252,90113,90114,90116,90118,90120,90122],{"class":254,"line":1751},[252,90115,54911],{"class":311},[252,90117,51577],{"class":262},[252,90119,1861],{"class":311},[252,90121,51632],{"class":258},[252,90123,1429],{"class":262},[252,90125,90126,90128,90130,90132,90134],{"class":254,"line":1756},[252,90127,54925],{"class":311},[252,90129,51577],{"class":262},[252,90131,1861],{"class":311},[252,90133,51632],{"class":258},[252,90135,1429],{"class":262},[252,90137,90138,90140,90142,90145],{"class":254,"line":1762},[252,90139,55024],{"class":311},[252,90141,51577],{"class":262},[252,90143,90144],{"class":311},"gray",[252,90146,1429],{"class":262},[252,90148,90149,90151,90153,90155,90157],{"class":254,"line":1767},[252,90150,55062],{"class":311},[252,90152,51577],{"class":262},[252,90154,1088],{"class":311},[252,90156,51632],{"class":258},[252,90158,1429],{"class":262},[252,90160,90161,90163,90165,90167],{"class":254,"line":1781},[252,90162,57556],{"class":311},[252,90164,51577],{"class":262},[252,90166,60982],{"class":311},[252,90168,1429],{"class":262},[252,90170,90171,90173,90175,90177],{"class":254,"line":1786},[252,90172,57426],{"class":311},[252,90174,51577],{"class":262},[252,90176,51732],{"class":311},[252,90178,1429],{"class":262},[252,90180,90181,90184,90186,90188,90190],{"class":254,"line":1792},[252,90182,90183],{"class":311},"      padding-top",[252,90185,51577],{"class":262},[252,90187,582],{"class":311},[252,90189,51632],{"class":258},[252,90191,1429],{"class":262},[252,90193,90194],{"class":254,"line":1813},[252,90195,2326],{"class":262},[252,90197,90198,90200,90202],{"class":254,"line":1818},[252,90199,52557],{"class":262},[252,90201,5266],{"class":51440},[252,90203,51447],{"class":262},[252,90205,90206,90208,90210],{"class":254,"line":1832},[252,90207,51925],{"class":262},[252,90209,51474],{"class":51440},[252,90211,51447],{"class":262},[252,90213,90214],{"class":254,"line":1837},[252,90215,2539],{"emptyLinePlaceholder":181},[252,90217,90218,90220,90222],{"class":254,"line":1866},[252,90219,1173],{"class":262},[252,90221,51940],{"class":51440},[252,90223,51447],{"class":262},[252,90225,90226,90228,90230,90232,90234,90236,90238,90240],{"class":254,"line":1871},[252,90227,52284],{"class":262},[252,90229,51751],{"class":51440},[252,90231,53626],{"class":2102},[252,90233,308],{"class":262},[252,90235,53631],{"class":367},[252,90237,55454],{"class":262},[252,90239,51751],{"class":51440},[252,90241,51447],{"class":262},[252,90243,90244,90246,90248,90250,90252,90254,90256,90258],{"class":254,"line":1888},[252,90245,52284],{"class":262},[252,90247,51953],{"class":51440},[252,90249,55379],{"class":2102},[252,90251,308],{"class":262},[252,90253,88412],{"class":367},[252,90255,55454],{"class":262},[252,90257,51953],{"class":51440},[252,90259,51447],{"class":262},[252,90261,90262,90264,90266],{"class":254,"line":1893},[252,90263,52284],{"class":262},[252,90265,51953],{"class":51440},[252,90267,51447],{"class":262},[252,90269,90270,90272,90274,90276,90278,90280,90282,90285],{"class":254,"line":1898},[252,90271,11361],{"class":258},[252,90273,87071],{"class":311},[252,90275,13704],{"class":258},[252,90277,54536],{"class":262},[252,90279,54539],{"class":2102},[252,90281,263],{"class":262},[252,90283,90284],{"class":367},"'.box'",[252,90286,269],{"class":262},[252,90288,90289,90291,90293,90295],{"class":254,"line":1903},[252,90290,52359],{"class":258},[252,90292,9578],{"class":262},[252,90294,308],{"class":258},[252,90296,47473],{"class":311},[252,90298,90299,90301,90304],{"class":254,"line":1917},[252,90300,70224],{"class":258},[252,90302,90303],{"class":2102}," mouseMove",[252,90305,10993],{"class":262},[252,90307,90308,90311,90313,90315],{"class":254,"line":1922},[252,90309,90310],{"class":262},"      box.innerHTML ",[252,90312,308],{"class":258},[252,90314,3171],{"class":262},[252,90316,2841],{"class":258},[252,90318,90319],{"class":254,"line":2716},[252,90320,90321],{"class":321},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[252,90323,90324],{"class":254,"line":2730},[252,90325,2326],{"class":262},[252,90327,90328],{"class":254,"line":2738},[252,90329,90330],{"class":321},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[252,90332,90333],{"class":254,"line":2743},[252,90334,90335],{"class":321},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[252,90337,90338],{"class":254,"line":2749},[252,90339,90340],{"class":321},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[252,90342,90343,90346,90348,90350,90353,90356,90359,90362,90364],{"class":254,"line":2755},[252,90344,90345],{"class":262},"    box.",[252,90347,57953],{"class":2102},[252,90349,263],{"class":262},[252,90351,90352],{"class":367},"'mousemove'",[252,90354,90355],{"class":262},", _.",[252,90357,90358],{"class":2102},"debounce",[252,90360,90361],{"class":262},"(mouseMove, ",[252,90363,65214],{"class":311},[252,90365,30637],{"class":262},[252,90367,90368,90370,90372],{"class":254,"line":2760},[252,90369,52557],{"class":262},[252,90371,51953],{"class":51440},[252,90373,51447],{"class":262},[252,90375,90376,90378,90380],{"class":254,"line":8088},[252,90377,51925],{"class":262},[252,90379,51940],{"class":51440},[252,90381,51447],{"class":262},[252,90383,90384],{"class":254,"line":8112},[252,90385,2539],{"emptyLinePlaceholder":181},[252,90387,90388,90390,90392],{"class":254,"line":8117},[252,90389,51925],{"class":262},[252,90391,50775],{"class":51440},[252,90393,51447],{"class":262},[1270,90395,90396],{},[210,90397,90398],{},"手写一个防抖函数来处理",[19,90400,90401],{},"防抖的核心就是利用定时器来实现的：",[19,90403,90404],{},"①声明一个定时器变量",[19,90406,90407],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90409,90410],{},"③如果没有定时器则开启定时器，记得存到变量里面",[244,90412,90414],{"className":50773,"code":90413,"language":50775,"meta":169,"style":169},"\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",[22,90415,90416,90426,90440,90444,90452,90466,90486,90498,90506,90512,90522,90534,90546,90556,90568,90578,90588,90600,90604,90612,90620,90624,90632,90650,90668,90676,90694,90704,90712,90722,90726,90730,90734,90739,90744,90749,90754,90759,90764,90782,90789,90794,90802,90807,90820,90836,90846,90851,90855,90859,90879,90883,90888,90893,90898,90903,90911,90919,90923],{"__ignoreMap":169},[252,90417,90418,90420,90422,90424],{"class":254,"line":255},[252,90419,51437],{"class":262},[252,90421,51441],{"class":51440},[252,90423,51444],{"class":2102},[252,90425,51447],{"class":262},[252,90427,90428,90430,90432,90434,90436,90438],{"class":254,"line":170},[252,90429,1173],{"class":262},[252,90431,50775],{"class":51440},[252,90433,51456],{"class":2102},[252,90435,308],{"class":262},[252,90437,51461],{"class":367},[252,90439,51447],{"class":262},[252,90441,90442],{"class":254,"line":1318},[252,90443,2539],{"emptyLinePlaceholder":181},[252,90445,90446,90448,90450],{"class":254,"line":1333},[252,90447,1173],{"class":262},[252,90449,51474],{"class":51440},[252,90451,51447],{"class":262},[252,90453,90454,90456,90458,90460,90462,90464],{"class":254,"line":1339},[252,90455,52284],{"class":262},[252,90457,51484],{"class":51440},[252,90459,51487],{"class":2102},[252,90461,308],{"class":262},[252,90463,51492],{"class":367},[252,90465,51447],{"class":262},[252,90467,90468,90470,90472,90474,90476,90478,90480,90482,90484],{"class":254,"line":1353},[252,90469,52284],{"class":262},[252,90471,51484],{"class":51440},[252,90473,15060],{"class":2102},[252,90475,308],{"class":262},[252,90477,51531],{"class":367},[252,90479,51511],{"class":2102},[252,90481,308],{"class":262},[252,90483,51538],{"class":367},[252,90485,51447],{"class":262},[252,90487,90488,90490,90492,90494,90496],{"class":254,"line":1359},[252,90489,52284],{"class":262},[252,90491,51547],{"class":51440},[252,90493,51550],{"class":262},[252,90495,51547],{"class":51440},[252,90497,51447],{"class":262},[252,90499,90500,90502,90504],{"class":254,"line":1450},[252,90501,52284],{"class":262},[252,90503,5266],{"class":51440},[252,90505,51447],{"class":262},[252,90507,90508,90510],{"class":254,"line":1456},[252,90509,54892],{"class":2102},[252,90511,15712],{"class":262},[252,90513,90514,90516,90518,90520],{"class":254,"line":1468},[252,90515,72736],{"class":311},[252,90517,51577],{"class":262},[252,90519,60645],{"class":311},[252,90521,1429],{"class":262},[252,90523,90524,90526,90528,90530,90532],{"class":254,"line":1751},[252,90525,54911],{"class":311},[252,90527,51577],{"class":262},[252,90529,1861],{"class":311},[252,90531,51632],{"class":258},[252,90533,1429],{"class":262},[252,90535,90536,90538,90540,90542,90544],{"class":254,"line":1756},[252,90537,54925],{"class":311},[252,90539,51577],{"class":262},[252,90541,1861],{"class":311},[252,90543,51632],{"class":258},[252,90545,1429],{"class":262},[252,90547,90548,90550,90552,90554],{"class":254,"line":1762},[252,90549,55024],{"class":311},[252,90551,51577],{"class":262},[252,90553,90144],{"class":311},[252,90555,1429],{"class":262},[252,90557,90558,90560,90562,90564,90566],{"class":254,"line":1767},[252,90559,55062],{"class":311},[252,90561,51577],{"class":262},[252,90563,1088],{"class":311},[252,90565,51632],{"class":258},[252,90567,1429],{"class":262},[252,90569,90570,90572,90574,90576],{"class":254,"line":1781},[252,90571,57556],{"class":311},[252,90573,51577],{"class":262},[252,90575,60982],{"class":311},[252,90577,1429],{"class":262},[252,90579,90580,90582,90584,90586],{"class":254,"line":1786},[252,90581,57426],{"class":311},[252,90583,51577],{"class":262},[252,90585,51732],{"class":311},[252,90587,1429],{"class":262},[252,90589,90590,90592,90594,90596,90598],{"class":254,"line":1792},[252,90591,90183],{"class":311},[252,90593,51577],{"class":262},[252,90595,582],{"class":311},[252,90597,51632],{"class":258},[252,90599,1429],{"class":262},[252,90601,90602],{"class":254,"line":1813},[252,90603,2326],{"class":262},[252,90605,90606,90608,90610],{"class":254,"line":1818},[252,90607,52557],{"class":262},[252,90609,5266],{"class":51440},[252,90611,51447],{"class":262},[252,90613,90614,90616,90618],{"class":254,"line":1832},[252,90615,51925],{"class":262},[252,90617,51474],{"class":51440},[252,90619,51447],{"class":262},[252,90621,90622],{"class":254,"line":1837},[252,90623,2539],{"emptyLinePlaceholder":181},[252,90625,90626,90628,90630],{"class":254,"line":1866},[252,90627,1173],{"class":262},[252,90629,51940],{"class":51440},[252,90631,51447],{"class":262},[252,90633,90634,90636,90638,90640,90642,90644,90646,90648],{"class":254,"line":1871},[252,90635,52284],{"class":262},[252,90637,51751],{"class":51440},[252,90639,53626],{"class":2102},[252,90641,308],{"class":262},[252,90643,53631],{"class":367},[252,90645,55454],{"class":262},[252,90647,51751],{"class":51440},[252,90649,51447],{"class":262},[252,90651,90652,90654,90656,90658,90660,90662,90664,90666],{"class":254,"line":1888},[252,90653,52284],{"class":262},[252,90655,51953],{"class":51440},[252,90657,55379],{"class":2102},[252,90659,308],{"class":262},[252,90661,88412],{"class":367},[252,90663,55454],{"class":262},[252,90665,51953],{"class":51440},[252,90667,51447],{"class":262},[252,90669,90670,90672,90674],{"class":254,"line":1893},[252,90671,52284],{"class":262},[252,90673,51953],{"class":51440},[252,90675,51447],{"class":262},[252,90677,90678,90680,90682,90684,90686,90688,90690,90692],{"class":254,"line":1898},[252,90679,11361],{"class":258},[252,90681,87071],{"class":311},[252,90683,13704],{"class":258},[252,90685,54536],{"class":262},[252,90687,54539],{"class":2102},[252,90689,263],{"class":262},[252,90691,90284],{"class":367},[252,90693,269],{"class":262},[252,90695,90696,90698,90700,90702],{"class":254,"line":1903},[252,90697,52359],{"class":258},[252,90699,9578],{"class":262},[252,90701,308],{"class":258},[252,90703,47473],{"class":311},[252,90705,90706,90708,90710],{"class":254,"line":1917},[252,90707,70224],{"class":258},[252,90709,90303],{"class":2102},[252,90711,10993],{"class":262},[252,90713,90714,90716,90718,90720],{"class":254,"line":1922},[252,90715,90310],{"class":262},[252,90717,308],{"class":258},[252,90719,3171],{"class":262},[252,90721,2841],{"class":258},[252,90723,90724],{"class":254,"line":2716},[252,90725,90321],{"class":321},[252,90727,90728],{"class":254,"line":2730},[252,90729,2326],{"class":262},[252,90731,90732],{"class":254,"line":2738},[252,90733,90330],{"class":321},[252,90735,90736],{"class":254,"line":2743},[252,90737,90738],{"class":321},"    \u002F\u002F 手写防抖函数\n",[252,90740,90741],{"class":254,"line":2749},[252,90742,90743],{"class":321},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[252,90745,90746],{"class":254,"line":2755},[252,90747,90748],{"class":321},"    \u002F\u002F 1.声明定时器变量\n",[252,90750,90751],{"class":254,"line":2760},[252,90752,90753],{"class":321},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[252,90755,90756],{"class":254,"line":8088},[252,90757,90758],{"class":321},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[252,90760,90761],{"class":254,"line":8112},[252,90762,90763],{"class":321},"    \u002F\u002F 4.定时器里面写函数调用\n",[252,90765,90766,90768,90771,90773,90776,90778,90780],{"class":254,"line":8117},[252,90767,70224],{"class":258},[252,90769,90770],{"class":2102}," debounce",[252,90772,263],{"class":262},[252,90774,90775],{"class":5356},"fn",[252,90777,12575],{"class":262},[252,90779,983],{"class":5356},[252,90781,12582],{"class":262},[252,90783,90784,90786],{"class":254,"line":8123},[252,90785,79911],{"class":258},[252,90787,90788],{"class":262}," timer\n",[252,90790,90791],{"class":254,"line":8150},[252,90792,90793],{"class":321},"      \u002F\u002F return 返回一个匿名函数\n",[252,90795,90796,90798,90800],{"class":254,"line":8155},[252,90797,74122],{"class":258},[252,90799,59058],{"class":258},[252,90801,54592],{"class":262},[252,90803,90804],{"class":254,"line":8161},[252,90805,90806],{"class":321},"        \u002F\u002F 这里边写第二三四步\n",[252,90808,90809,90811,90814,90817],{"class":254,"line":8173},[252,90810,2636],{"class":258},[252,90812,90813],{"class":262}," (timer) ",[252,90815,90816],{"class":2102},"clearTimeout",[252,90818,90819],{"class":262},"(timer)\n",[252,90821,90822,90825,90827,90830,90832,90834],{"class":254,"line":8185},[252,90823,90824],{"class":262},"        timer ",[252,90826,308],{"class":258},[252,90828,90829],{"class":2102}," setTimeout",[252,90831,263],{"class":262},[252,90833,54589],{"class":258},[252,90835,54592],{"class":262},[252,90837,90838,90841,90843],{"class":254,"line":8197},[252,90839,90840],{"class":2102},"          fn",[252,90842,13190],{"class":262},[252,90844,90845],{"class":321},"\u002F\u002F加小括号调用fn }, t)\n",[252,90847,90848],{"class":254,"line":9856},[252,90849,90850],{"class":262},"        }, t)\n",[252,90852,90853],{"class":254,"line":9881},[252,90854,52538],{"class":262},[252,90856,90857],{"class":254,"line":9904},[252,90858,2326],{"class":262},[252,90860,90861,90863,90865,90867,90869,90871,90873,90875,90877],{"class":254,"line":9928},[252,90862,90345],{"class":262},[252,90864,57953],{"class":2102},[252,90866,263],{"class":262},[252,90868,90352],{"class":367},[252,90870,12575],{"class":262},[252,90872,90358],{"class":2102},[252,90874,90361],{"class":262},[252,90876,65214],{"class":311},[252,90878,30637],{"class":262},[252,90880,90881],{"class":254,"line":9933},[252,90882,2539],{"emptyLinePlaceholder":181},[252,90884,90885],{"class":254,"line":9938},[252,90886,90887],{"class":321},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[252,90889,90890],{"class":254,"line":9943},[252,90891,90892],{"class":321},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[252,90894,90895],{"class":254,"line":9952},[252,90896,90897],{"class":321},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[252,90899,90900],{"class":254,"line":9957},[252,90901,90902],{"class":321},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[252,90904,90905,90907,90909],{"class":254,"line":9963},[252,90906,52557],{"class":262},[252,90908,51953],{"class":51440},[252,90910,51447],{"class":262},[252,90912,90913,90915,90917],{"class":254,"line":9984},[252,90914,51925],{"class":262},[252,90916,51940],{"class":51440},[252,90918,51447],{"class":262},[252,90920,90921],{"class":254,"line":9990},[252,90922,2539],{"emptyLinePlaceholder":181},[252,90924,90925,90927,90929],{"class":254,"line":10004},[252,90926,51925],{"class":262},[252,90928,50775],{"class":51440},[252,90930,51447],{"class":262},[224,90932,90934],{"id":90933},"_4172-节流","4.17.2 节流",[19,90936,90937],{},[1601,90938],{"alt":169,"src":90939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,90941,90942],{},[1601,90943],{"alt":169,"src":90944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,90946,90947],{},[412,90948,90949],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,90951,90952],{},"实现方式：",[1270,90954,90955],{},[210,90956,90957],{},"lodash 提供的节流函数来处理",[19,90959,90960],{},"_.throttle(func,[wait=0],[options=])",[19,90962,90963],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[244,90965,90967],{"className":50773,"code":90966,"language":50775,"meta":169,"style":169},"\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",[22,90968,90969,90979,90993,90997,91005,91019,91039,91051,91059,91065,91075,91087,91099,91109,91121,91131,91141,91153,91157,91165,91173,91177,91185,91203,91221,91229,91247,91257,91265,91275,91279,91283,91287,91292,91297,91318,91326,91334,91338],{"__ignoreMap":169},[252,90970,90971,90973,90975,90977],{"class":254,"line":255},[252,90972,51437],{"class":262},[252,90974,51441],{"class":51440},[252,90976,51444],{"class":2102},[252,90978,51447],{"class":262},[252,90980,90981,90983,90985,90987,90989,90991],{"class":254,"line":170},[252,90982,1173],{"class":262},[252,90984,50775],{"class":51440},[252,90986,51456],{"class":2102},[252,90988,308],{"class":262},[252,90990,51461],{"class":367},[252,90992,51447],{"class":262},[252,90994,90995],{"class":254,"line":1318},[252,90996,2539],{"emptyLinePlaceholder":181},[252,90998,90999,91001,91003],{"class":254,"line":1333},[252,91000,1173],{"class":262},[252,91002,51474],{"class":51440},[252,91004,51447],{"class":262},[252,91006,91007,91009,91011,91013,91015,91017],{"class":254,"line":1339},[252,91008,52284],{"class":262},[252,91010,51484],{"class":51440},[252,91012,51487],{"class":2102},[252,91014,308],{"class":262},[252,91016,51492],{"class":367},[252,91018,51447],{"class":262},[252,91020,91021,91023,91025,91027,91029,91031,91033,91035,91037],{"class":254,"line":1353},[252,91022,52284],{"class":262},[252,91024,51484],{"class":51440},[252,91026,15060],{"class":2102},[252,91028,308],{"class":262},[252,91030,51531],{"class":367},[252,91032,51511],{"class":2102},[252,91034,308],{"class":262},[252,91036,51538],{"class":367},[252,91038,51447],{"class":262},[252,91040,91041,91043,91045,91047,91049],{"class":254,"line":1359},[252,91042,52284],{"class":262},[252,91044,51547],{"class":51440},[252,91046,51550],{"class":262},[252,91048,51547],{"class":51440},[252,91050,51447],{"class":262},[252,91052,91053,91055,91057],{"class":254,"line":1450},[252,91054,52284],{"class":262},[252,91056,5266],{"class":51440},[252,91058,51447],{"class":262},[252,91060,91061,91063],{"class":254,"line":1456},[252,91062,54892],{"class":2102},[252,91064,15712],{"class":262},[252,91066,91067,91069,91071,91073],{"class":254,"line":1468},[252,91068,72736],{"class":311},[252,91070,51577],{"class":262},[252,91072,60645],{"class":311},[252,91074,1429],{"class":262},[252,91076,91077,91079,91081,91083,91085],{"class":254,"line":1751},[252,91078,54911],{"class":311},[252,91080,51577],{"class":262},[252,91082,1861],{"class":311},[252,91084,51632],{"class":258},[252,91086,1429],{"class":262},[252,91088,91089,91091,91093,91095,91097],{"class":254,"line":1756},[252,91090,54925],{"class":311},[252,91092,51577],{"class":262},[252,91094,1861],{"class":311},[252,91096,51632],{"class":258},[252,91098,1429],{"class":262},[252,91100,91101,91103,91105,91107],{"class":254,"line":1762},[252,91102,55024],{"class":311},[252,91104,51577],{"class":262},[252,91106,90144],{"class":311},[252,91108,1429],{"class":262},[252,91110,91111,91113,91115,91117,91119],{"class":254,"line":1767},[252,91112,55062],{"class":311},[252,91114,51577],{"class":262},[252,91116,1088],{"class":311},[252,91118,51632],{"class":258},[252,91120,1429],{"class":262},[252,91122,91123,91125,91127,91129],{"class":254,"line":1781},[252,91124,57556],{"class":311},[252,91126,51577],{"class":262},[252,91128,60982],{"class":311},[252,91130,1429],{"class":262},[252,91132,91133,91135,91137,91139],{"class":254,"line":1786},[252,91134,57426],{"class":311},[252,91136,51577],{"class":262},[252,91138,51732],{"class":311},[252,91140,1429],{"class":262},[252,91142,91143,91145,91147,91149,91151],{"class":254,"line":1792},[252,91144,90183],{"class":311},[252,91146,51577],{"class":262},[252,91148,582],{"class":311},[252,91150,51632],{"class":258},[252,91152,1429],{"class":262},[252,91154,91155],{"class":254,"line":1813},[252,91156,2326],{"class":262},[252,91158,91159,91161,91163],{"class":254,"line":1818},[252,91160,52557],{"class":262},[252,91162,5266],{"class":51440},[252,91164,51447],{"class":262},[252,91166,91167,91169,91171],{"class":254,"line":1832},[252,91168,51925],{"class":262},[252,91170,51474],{"class":51440},[252,91172,51447],{"class":262},[252,91174,91175],{"class":254,"line":1837},[252,91176,2539],{"emptyLinePlaceholder":181},[252,91178,91179,91181,91183],{"class":254,"line":1866},[252,91180,1173],{"class":262},[252,91182,51940],{"class":51440},[252,91184,51447],{"class":262},[252,91186,91187,91189,91191,91193,91195,91197,91199,91201],{"class":254,"line":1871},[252,91188,52284],{"class":262},[252,91190,51751],{"class":51440},[252,91192,53626],{"class":2102},[252,91194,308],{"class":262},[252,91196,53631],{"class":367},[252,91198,55454],{"class":262},[252,91200,51751],{"class":51440},[252,91202,51447],{"class":262},[252,91204,91205,91207,91209,91211,91213,91215,91217,91219],{"class":254,"line":1888},[252,91206,52284],{"class":262},[252,91208,51953],{"class":51440},[252,91210,55379],{"class":2102},[252,91212,308],{"class":262},[252,91214,88412],{"class":367},[252,91216,55454],{"class":262},[252,91218,51953],{"class":51440},[252,91220,51447],{"class":262},[252,91222,91223,91225,91227],{"class":254,"line":1893},[252,91224,52284],{"class":262},[252,91226,51953],{"class":51440},[252,91228,51447],{"class":262},[252,91230,91231,91233,91235,91237,91239,91241,91243,91245],{"class":254,"line":1898},[252,91232,11361],{"class":258},[252,91234,87071],{"class":311},[252,91236,13704],{"class":258},[252,91238,54536],{"class":262},[252,91240,54539],{"class":2102},[252,91242,263],{"class":262},[252,91244,90284],{"class":367},[252,91246,269],{"class":262},[252,91248,91249,91251,91253,91255],{"class":254,"line":1903},[252,91250,52359],{"class":258},[252,91252,9578],{"class":262},[252,91254,308],{"class":258},[252,91256,47473],{"class":311},[252,91258,91259,91261,91263],{"class":254,"line":1917},[252,91260,70224],{"class":258},[252,91262,90303],{"class":2102},[252,91264,10993],{"class":262},[252,91266,91267,91269,91271,91273],{"class":254,"line":1922},[252,91268,90310],{"class":262},[252,91270,308],{"class":258},[252,91272,3171],{"class":262},[252,91274,2841],{"class":258},[252,91276,91277],{"class":254,"line":2716},[252,91278,90321],{"class":321},[252,91280,91281],{"class":254,"line":2730},[252,91282,2326],{"class":262},[252,91284,91285],{"class":254,"line":2738},[252,91286,90330],{"class":321},[252,91288,91289],{"class":254,"line":2743},[252,91290,91291],{"class":321},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[252,91293,91294],{"class":254,"line":2749},[252,91295,91296],{"class":321},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[252,91298,91299,91301,91303,91305,91307,91309,91312,91314,91316],{"class":254,"line":2755},[252,91300,90345],{"class":262},[252,91302,57953],{"class":2102},[252,91304,263],{"class":262},[252,91306,90352],{"class":367},[252,91308,90355],{"class":262},[252,91310,91311],{"class":2102},"throttle",[252,91313,90361],{"class":262},[252,91315,65214],{"class":311},[252,91317,30637],{"class":262},[252,91319,91320,91322,91324],{"class":254,"line":2760},[252,91321,52557],{"class":262},[252,91323,51953],{"class":51440},[252,91325,51447],{"class":262},[252,91327,91328,91330,91332],{"class":254,"line":8088},[252,91329,51925],{"class":262},[252,91331,51940],{"class":51440},[252,91333,51447],{"class":262},[252,91335,91336],{"class":254,"line":8112},[252,91337,2539],{"emptyLinePlaceholder":181},[252,91339,91340,91342,91344],{"class":254,"line":8117},[252,91341,51925],{"class":262},[252,91343,50775],{"class":51440},[252,91345,51447],{"class":262},[1270,91347,91348],{},[210,91349,91350],{},"手写一个节流函数来处理",[19,91352,71092],{},[19,91354,90404],{},[19,91356,91357],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91359,91360],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[244,91362,91364],{"className":50773,"code":91363,"language":50775,"meta":169,"style":169},"\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",[22,91365,91366,91376,91390,91394,91402,91416,91436,91448,91456,91462,91472,91484,91496,91506,91518,91528,91538,91550,91554,91562,91570,91574,91582,91600,91618,91626,91644,91654,91662,91672,91676,91680,91684,91689,91694,91699,91704,91709,91714,91731,91737,91745,91756,91771,91778,91783,91788,91798,91803,91808,91813,91817,91821,91825,91845,91853,91861,91865],{"__ignoreMap":169},[252,91367,91368,91370,91372,91374],{"class":254,"line":255},[252,91369,51437],{"class":262},[252,91371,51441],{"class":51440},[252,91373,51444],{"class":2102},[252,91375,51447],{"class":262},[252,91377,91378,91380,91382,91384,91386,91388],{"class":254,"line":170},[252,91379,1173],{"class":262},[252,91381,50775],{"class":51440},[252,91383,51456],{"class":2102},[252,91385,308],{"class":262},[252,91387,51461],{"class":367},[252,91389,51447],{"class":262},[252,91391,91392],{"class":254,"line":1318},[252,91393,2539],{"emptyLinePlaceholder":181},[252,91395,91396,91398,91400],{"class":254,"line":1333},[252,91397,1173],{"class":262},[252,91399,51474],{"class":51440},[252,91401,51447],{"class":262},[252,91403,91404,91406,91408,91410,91412,91414],{"class":254,"line":1339},[252,91405,52284],{"class":262},[252,91407,51484],{"class":51440},[252,91409,51487],{"class":2102},[252,91411,308],{"class":262},[252,91413,51492],{"class":367},[252,91415,51447],{"class":262},[252,91417,91418,91420,91422,91424,91426,91428,91430,91432,91434],{"class":254,"line":1353},[252,91419,52284],{"class":262},[252,91421,51484],{"class":51440},[252,91423,15060],{"class":2102},[252,91425,308],{"class":262},[252,91427,51531],{"class":367},[252,91429,51511],{"class":2102},[252,91431,308],{"class":262},[252,91433,51538],{"class":367},[252,91435,51447],{"class":262},[252,91437,91438,91440,91442,91444,91446],{"class":254,"line":1359},[252,91439,52284],{"class":262},[252,91441,51547],{"class":51440},[252,91443,51550],{"class":262},[252,91445,51547],{"class":51440},[252,91447,51447],{"class":262},[252,91449,91450,91452,91454],{"class":254,"line":1450},[252,91451,52284],{"class":262},[252,91453,5266],{"class":51440},[252,91455,51447],{"class":262},[252,91457,91458,91460],{"class":254,"line":1456},[252,91459,54892],{"class":2102},[252,91461,15712],{"class":262},[252,91463,91464,91466,91468,91470],{"class":254,"line":1468},[252,91465,72736],{"class":311},[252,91467,51577],{"class":262},[252,91469,60645],{"class":311},[252,91471,1429],{"class":262},[252,91473,91474,91476,91478,91480,91482],{"class":254,"line":1751},[252,91475,54911],{"class":311},[252,91477,51577],{"class":262},[252,91479,1861],{"class":311},[252,91481,51632],{"class":258},[252,91483,1429],{"class":262},[252,91485,91486,91488,91490,91492,91494],{"class":254,"line":1756},[252,91487,54925],{"class":311},[252,91489,51577],{"class":262},[252,91491,1861],{"class":311},[252,91493,51632],{"class":258},[252,91495,1429],{"class":262},[252,91497,91498,91500,91502,91504],{"class":254,"line":1762},[252,91499,55024],{"class":311},[252,91501,51577],{"class":262},[252,91503,90144],{"class":311},[252,91505,1429],{"class":262},[252,91507,91508,91510,91512,91514,91516],{"class":254,"line":1767},[252,91509,55062],{"class":311},[252,91511,51577],{"class":262},[252,91513,1088],{"class":311},[252,91515,51632],{"class":258},[252,91517,1429],{"class":262},[252,91519,91520,91522,91524,91526],{"class":254,"line":1781},[252,91521,57556],{"class":311},[252,91523,51577],{"class":262},[252,91525,60982],{"class":311},[252,91527,1429],{"class":262},[252,91529,91530,91532,91534,91536],{"class":254,"line":1786},[252,91531,57426],{"class":311},[252,91533,51577],{"class":262},[252,91535,51732],{"class":311},[252,91537,1429],{"class":262},[252,91539,91540,91542,91544,91546,91548],{"class":254,"line":1792},[252,91541,90183],{"class":311},[252,91543,51577],{"class":262},[252,91545,582],{"class":311},[252,91547,51632],{"class":258},[252,91549,1429],{"class":262},[252,91551,91552],{"class":254,"line":1813},[252,91553,2326],{"class":262},[252,91555,91556,91558,91560],{"class":254,"line":1818},[252,91557,52557],{"class":262},[252,91559,5266],{"class":51440},[252,91561,51447],{"class":262},[252,91563,91564,91566,91568],{"class":254,"line":1832},[252,91565,51925],{"class":262},[252,91567,51474],{"class":51440},[252,91569,51447],{"class":262},[252,91571,91572],{"class":254,"line":1837},[252,91573,2539],{"emptyLinePlaceholder":181},[252,91575,91576,91578,91580],{"class":254,"line":1866},[252,91577,1173],{"class":262},[252,91579,51940],{"class":51440},[252,91581,51447],{"class":262},[252,91583,91584,91586,91588,91590,91592,91594,91596,91598],{"class":254,"line":1871},[252,91585,52284],{"class":262},[252,91587,51751],{"class":51440},[252,91589,53626],{"class":2102},[252,91591,308],{"class":262},[252,91593,53631],{"class":367},[252,91595,55454],{"class":262},[252,91597,51751],{"class":51440},[252,91599,51447],{"class":262},[252,91601,91602,91604,91606,91608,91610,91612,91614,91616],{"class":254,"line":1888},[252,91603,52284],{"class":262},[252,91605,51953],{"class":51440},[252,91607,55379],{"class":2102},[252,91609,308],{"class":262},[252,91611,88412],{"class":367},[252,91613,55454],{"class":262},[252,91615,51953],{"class":51440},[252,91617,51447],{"class":262},[252,91619,91620,91622,91624],{"class":254,"line":1893},[252,91621,52284],{"class":262},[252,91623,51953],{"class":51440},[252,91625,51447],{"class":262},[252,91627,91628,91630,91632,91634,91636,91638,91640,91642],{"class":254,"line":1898},[252,91629,11361],{"class":258},[252,91631,87071],{"class":311},[252,91633,13704],{"class":258},[252,91635,54536],{"class":262},[252,91637,54539],{"class":2102},[252,91639,263],{"class":262},[252,91641,90284],{"class":367},[252,91643,269],{"class":262},[252,91645,91646,91648,91650,91652],{"class":254,"line":1903},[252,91647,52359],{"class":258},[252,91649,9578],{"class":262},[252,91651,308],{"class":258},[252,91653,47473],{"class":311},[252,91655,91656,91658,91660],{"class":254,"line":1917},[252,91657,70224],{"class":258},[252,91659,90303],{"class":2102},[252,91661,10993],{"class":262},[252,91663,91664,91666,91668,91670],{"class":254,"line":1922},[252,91665,90310],{"class":262},[252,91667,308],{"class":258},[252,91669,3171],{"class":262},[252,91671,2841],{"class":258},[252,91673,91674],{"class":254,"line":2716},[252,91675,90321],{"class":321},[252,91677,91678],{"class":254,"line":2730},[252,91679,2326],{"class":262},[252,91681,91682],{"class":254,"line":2738},[252,91683,90330],{"class":321},[252,91685,91686],{"class":254,"line":2743},[252,91687,91688],{"class":321},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[252,91690,91691],{"class":254,"line":2749},[252,91692,91693],{"class":321},"    \u002F\u002F 1.声明一个定时器变量\n",[252,91695,91696],{"class":254,"line":2755},[252,91697,91698],{"class":321},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[252,91700,91701],{"class":254,"line":2760},[252,91702,91703],{"class":321},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[252,91705,91706],{"class":254,"line":8088},[252,91707,91708],{"class":321},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[252,91710,91711],{"class":254,"line":8112},[252,91712,91713],{"class":321},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[252,91715,91716,91718,91721,91723,91725,91727,91729],{"class":254,"line":8117},[252,91717,70224],{"class":258},[252,91719,91720],{"class":2102}," throttle",[252,91722,263],{"class":262},[252,91724,90775],{"class":5356},[252,91726,12575],{"class":262},[252,91728,983],{"class":5356},[252,91730,12582],{"class":262},[252,91732,91733,91735],{"class":254,"line":8123},[252,91734,79911],{"class":258},[252,91736,90788],{"class":262},[252,91738,91739,91741,91743],{"class":254,"line":8150},[252,91740,74122],{"class":258},[252,91742,59058],{"class":258},[252,91744,54592],{"class":262},[252,91746,91747,91749,91751,91753],{"class":254,"line":8155},[252,91748,2636],{"class":258},[252,91750,1797],{"class":262},[252,91752,489],{"class":258},[252,91754,91755],{"class":262},"timer) {\n",[252,91757,91758,91761,91763,91765,91767,91769],{"class":254,"line":8161},[252,91759,91760],{"class":262},"          timer ",[252,91762,308],{"class":258},[252,91764,90829],{"class":2102},[252,91766,263],{"class":262},[252,91768,54589],{"class":258},[252,91770,54592],{"class":262},[252,91772,91773,91776],{"class":254,"line":8173},[252,91774,91775],{"class":2102},"            fn",[252,91777,2115],{"class":262},[252,91779,91780],{"class":254,"line":8185},[252,91781,91782],{"class":321},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[252,91784,91785],{"class":254,"line":8197},[252,91786,91787],{"class":321},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[252,91789,91790,91793,91795],{"class":254,"line":9856},[252,91791,91792],{"class":262},"            timer ",[252,91794,308],{"class":258},[252,91796,91797],{"class":311}," null\n",[252,91799,91800],{"class":254,"line":9881},[252,91801,91802],{"class":321},"            \u002F\u002F 不能用clearTimeout(timer)\n",[252,91804,91805],{"class":254,"line":9904},[252,91806,91807],{"class":321},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[252,91809,91810],{"class":254,"line":9928},[252,91811,91812],{"class":262},"          }, t)\n",[252,91814,91815],{"class":254,"line":9933},[252,91816,2668],{"class":262},[252,91818,91819],{"class":254,"line":9938},[252,91820,52538],{"class":262},[252,91822,91823],{"class":254,"line":9943},[252,91824,2326],{"class":262},[252,91826,91827,91829,91831,91833,91835,91837,91839,91841,91843],{"class":254,"line":9952},[252,91828,90345],{"class":262},[252,91830,57953],{"class":2102},[252,91832,263],{"class":262},[252,91834,90352],{"class":367},[252,91836,12575],{"class":262},[252,91838,91311],{"class":2102},[252,91840,90361],{"class":262},[252,91842,65214],{"class":311},[252,91844,30637],{"class":262},[252,91846,91847,91849,91851],{"class":254,"line":9957},[252,91848,52557],{"class":262},[252,91850,51953],{"class":51440},[252,91852,51447],{"class":262},[252,91854,91855,91857,91859],{"class":254,"line":9963},[252,91856,51925],{"class":262},[252,91858,51940],{"class":51440},[252,91860,51447],{"class":262},[252,91862,91863],{"class":254,"line":9984},[252,91864,2539],{"emptyLinePlaceholder":181},[252,91866,91867,91869,91871],{"class":254,"line":9990},[252,91868,51925],{"class":262},[252,91870,50775],{"class":51440},[252,91872,51447],{"class":262},[224,91874,91876],{"id":91875},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[244,91878,91880],{"className":53207,"code":91879,"language":53209,"meta":169,"style":169},"\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",[22,91881,91882,91890,91898,91903,91908,91913,91918,91922,91930],{"__ignoreMap":169},[252,91883,91884,91886,91888],{"class":254,"line":255},[252,91885,1173],{"class":262},[252,91887,51940],{"class":51440},[252,91889,51447],{"class":262},[252,91891,91892,91894,91896],{"class":254,"line":170},[252,91893,52284],{"class":262},[252,91895,51953],{"class":51440},[252,91897,51447],{"class":262},[252,91899,91900],{"class":254,"line":1318},[252,91901,91902],{"class":262},"    let timer = null\n",[252,91904,91905],{"class":254,"line":1333},[252,91906,91907],{"class":262},"    timer = setTimeout(() => {\n",[252,91909,91910],{"class":254,"line":1339},[252,91911,91912],{"class":262},"      clearTimeout(timer)\n",[252,91914,91915],{"class":254,"line":1353},[252,91916,91917],{"class":262},"      console.log(timer)\n",[252,91919,91920],{"class":254,"line":1359},[252,91921,60365],{"class":262},[252,91923,91924,91926,91928],{"class":254,"line":1450},[252,91925,52557],{"class":262},[252,91927,51953],{"class":51440},[252,91929,51447],{"class":262},[252,91931,91932,91934,91936],{"class":254,"line":1456},[252,91933,51925],{"class":262},[252,91935,51940],{"class":51440},[252,91937,51447],{"class":262},[19,91939,91940],{},"输出为1",[19,91942,91943],{},"在开启的定时器里边写清除定时器",[19,91945,91946],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[224,91948,91950],{"id":91949},"_4174-节流综合案例","4.17.4 节流综合案例",[19,91952,91953],{},"页面打开，可以记录上一次的视频播放位置",[19,91955,91956],{},[1601,91957],{"alt":169,"src":91958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,91960,91961],{},[1601,91962],{"alt":169,"src":91963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[244,91965,91967],{"className":50773,"code":91966,"language":50775,"meta":169,"style":169},"\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",[22,91968,91969,91979,91993,91997,92005,92019,92039,92059,92081,92094,92102,92108,92118,92128,92138,92142,92146,92153,92166,92178,92182,92186,92196,92208,92222,92226,92230,92237,92247,92260,92272,92282,92292,92308,92320,92324,92328,92336,92346,92358,92368,92378,92388,92392,92396,92406,92417,92421,92429,92437,92441,92449,92464,92479,92494,92515,92523,92531,92546,92568,92576,92591,92617,92643,92669,92677,92685,92704,92712,92717,92736,92741,92759,92764,92769,92777,92782,92796,92804,92809,92826,92830,92835,92857,92861,92869,92877,92881],{"__ignoreMap":169},[252,91970,91971,91973,91975,91977],{"class":254,"line":255},[252,91972,51437],{"class":262},[252,91974,51441],{"class":51440},[252,91976,51444],{"class":2102},[252,91978,51447],{"class":262},[252,91980,91981,91983,91985,91987,91989,91991],{"class":254,"line":170},[252,91982,1173],{"class":262},[252,91984,50775],{"class":51440},[252,91986,51456],{"class":2102},[252,91988,308],{"class":262},[252,91990,51461],{"class":367},[252,91992,51447],{"class":262},[252,91994,91995],{"class":254,"line":1318},[252,91996,2539],{"emptyLinePlaceholder":181},[252,91998,91999,92001,92003],{"class":254,"line":1333},[252,92000,1173],{"class":262},[252,92002,51474],{"class":51440},[252,92004,51447],{"class":262},[252,92006,92007,92009,92011,92013,92015,92017],{"class":254,"line":1339},[252,92008,52284],{"class":262},[252,92010,51484],{"class":51440},[252,92012,51487],{"class":2102},[252,92014,308],{"class":262},[252,92016,51492],{"class":367},[252,92018,59267],{"class":262},[252,92020,92021,92023,92025,92027,92029,92031,92033,92035,92037],{"class":254,"line":1353},[252,92022,52284],{"class":262},[252,92024,51484],{"class":51440},[252,92026,51503],{"class":2102},[252,92028,308],{"class":262},[252,92030,51508],{"class":367},[252,92032,51511],{"class":2102},[252,92034,308],{"class":262},[252,92036,51516],{"class":367},[252,92038,59267],{"class":262},[252,92040,92041,92043,92045,92047,92049,92051,92053,92055,92057],{"class":254,"line":1359},[252,92042,52284],{"class":262},[252,92044,51484],{"class":51440},[252,92046,15060],{"class":2102},[252,92048,308],{"class":262},[252,92050,51531],{"class":367},[252,92052,51511],{"class":2102},[252,92054,308],{"class":262},[252,92056,51538],{"class":367},[252,92058,59267],{"class":262},[252,92060,92061,92063,92065,92067,92069,92072,92074,92076,92079],{"class":254,"line":1450},[252,92062,52284],{"class":262},[252,92064,51484],{"class":51440},[252,92066,15060],{"class":2102},[252,92068,308],{"class":262},[252,92070,92071],{"class":367},"\"referrer\"",[252,92073,51511],{"class":2102},[252,92075,308],{"class":262},[252,92077,92078],{"class":367},"\"never\"",[252,92080,59267],{"class":262},[252,92082,92083,92085,92087,92090,92092],{"class":254,"line":1456},[252,92084,52284],{"class":262},[252,92086,51547],{"class":51440},[252,92088,92089],{"class":262},">综合案例\u003C\u002F",[252,92091,51547],{"class":51440},[252,92093,51447],{"class":262},[252,92095,92096,92098,92100],{"class":254,"line":1468},[252,92097,52284],{"class":262},[252,92099,5266],{"class":51440},[252,92101,51447],{"class":262},[252,92103,92104,92106],{"class":254,"line":1751},[252,92105,6543],{"class":51440},[252,92107,15712],{"class":262},[252,92109,92110,92112,92114,92116],{"class":254,"line":1756},[252,92111,54835],{"class":311},[252,92113,51577],{"class":262},[252,92115,454],{"class":311},[252,92117,1429],{"class":262},[252,92119,92120,92122,92124,92126],{"class":254,"line":1762},[252,92121,54846],{"class":311},[252,92123,51577],{"class":262},[252,92125,454],{"class":311},[252,92127,1429],{"class":262},[252,92129,92130,92132,92134,92136],{"class":254,"line":1767},[252,92131,72736],{"class":311},[252,92133,51577],{"class":262},[252,92135,60645],{"class":311},[252,92137,1429],{"class":262},[252,92139,92140],{"class":254,"line":1781},[252,92141,2326],{"class":262},[252,92143,92144],{"class":254,"line":1786},[252,92145,2539],{"emptyLinePlaceholder":181},[252,92147,92148,92151],{"class":254,"line":1792},[252,92149,92150],{"class":2102},"    .container",[252,92152,15712],{"class":262},[252,92154,92155,92157,92159,92162,92164],{"class":254,"line":1813},[252,92156,54911],{"class":311},[252,92158,51577],{"class":262},[252,92160,92161],{"class":311},"1200",[252,92163,51632],{"class":258},[252,92165,1429],{"class":262},[252,92167,92168,92170,92172,92174,92176],{"class":254,"line":1818},[252,92169,54846],{"class":311},[252,92171,51577],{"class":262},[252,92173,454],{"class":311},[252,92175,51696],{"class":311},[252,92177,1429],{"class":262},[252,92179,92180],{"class":254,"line":1832},[252,92181,2326],{"class":262},[252,92183,92184],{"class":254,"line":1837},[252,92185,2539],{"emptyLinePlaceholder":181},[252,92187,92188,92191,92194],{"class":254,"line":1866},[252,92189,92190],{"class":2102},"    .video",[252,92192,92193],{"class":51440}," video",[252,92195,15712],{"class":262},[252,92197,92198,92200,92202,92204,92206],{"class":254,"line":1871},[252,92199,54911],{"class":311},[252,92201,51577],{"class":262},[252,92203,574],{"class":311},[252,92205,591],{"class":258},[252,92207,1429],{"class":262},[252,92209,92210,92212,92214,92216,92218,92220],{"class":254,"line":1888},[252,92211,54835],{"class":311},[252,92213,51577],{"class":262},[252,92215,963],{"class":311},[252,92217,51632],{"class":258},[252,92219,4232],{"class":311},[252,92221,1429],{"class":262},[252,92223,92224],{"class":254,"line":1893},[252,92225,2326],{"class":262},[252,92227,92228],{"class":254,"line":1898},[252,92229,2539],{"emptyLinePlaceholder":181},[252,92231,92232,92235],{"class":254,"line":1903},[252,92233,92234],{"class":2102},"    .elevator",[252,92236,15712],{"class":262},[252,92238,92239,92241,92243,92245],{"class":254,"line":1917},[252,92240,54899],{"class":311},[252,92242,51577],{"class":262},[252,92244,86371],{"class":311},[252,92246,1429],{"class":262},[252,92248,92249,92251,92253,92256,92258],{"class":254,"line":1922},[252,92250,55087],{"class":311},[252,92252,51577],{"class":262},[252,92254,92255],{"class":311},"280",[252,92257,51632],{"class":258},[252,92259,1429],{"class":262},[252,92261,92262,92264,92266,92268,92270],{"class":254,"line":2716},[252,92263,86565],{"class":311},[252,92265,51577],{"class":262},[252,92267,963],{"class":311},[252,92269,51632],{"class":258},[252,92271,1429],{"class":262},[252,92273,92274,92276,92278,92280],{"class":254,"line":2730},[252,92275,86378],{"class":311},[252,92277,51577],{"class":262},[252,92279,86383],{"class":311},[252,92281,1429],{"class":262},[252,92283,92284,92286,92288,92290],{"class":254,"line":2738},[252,92285,61861],{"class":311},[252,92287,51577],{"class":262},[252,92289,60982],{"class":311},[252,92291,1429],{"class":262},[252,92293,92294,92296,92298,92300,92302,92304,92306],{"class":254,"line":2743},[252,92295,62117],{"class":311},[252,92297,51577],{"class":262},[252,92299,480],{"class":311},[252,92301,51632],{"class":258},[252,92303,51661],{"class":311},[252,92305,62384],{"class":311},[252,92307,1429],{"class":262},[252,92309,92310,92312,92314,92316,92318],{"class":254,"line":2749},[252,92311,54911],{"class":311},[252,92313,51577],{"class":262},[252,92315,1170],{"class":311},[252,92317,51632],{"class":258},[252,92319,1429],{"class":262},[252,92321,92322],{"class":254,"line":2755},[252,92323,2326],{"class":262},[252,92325,92326],{"class":254,"line":2760},[252,92327,2539],{"emptyLinePlaceholder":181},[252,92329,92330,92332,92334],{"class":254,"line":8088},[252,92331,92234],{"class":2102},[252,92333,1537],{"class":51440},[252,92335,15712],{"class":262},[252,92337,92338,92340,92342,92344],{"class":254,"line":8112},[252,92339,55149],{"class":311},[252,92341,51577],{"class":262},[252,92343,61009],{"class":311},[252,92345,1429],{"class":262},[252,92347,92348,92350,92352,92354,92356],{"class":254,"line":8117},[252,92349,54835],{"class":311},[252,92351,51577],{"class":262},[252,92353,709],{"class":311},[252,92355,51632],{"class":258},[252,92357,1429],{"class":262},[252,92359,92360,92362,92364,92366],{"class":254,"line":8123},[252,92361,64110],{"class":311},[252,92363,51577],{"class":262},[252,92365,54877],{"class":311},[252,92367,1429],{"class":262},[252,92369,92370,92372,92374,92376],{"class":254,"line":8150},[252,92371,57426],{"class":311},[252,92373,51577],{"class":262},[252,92375,51732],{"class":311},[252,92377,1429],{"class":262},[252,92379,92380,92382,92384,92386],{"class":254,"line":8155},[252,92381,57556],{"class":311},[252,92383,51577],{"class":262},[252,92385,62210],{"class":311},[252,92387,1429],{"class":262},[252,92389,92390],{"class":254,"line":8161},[252,92391,2326],{"class":262},[252,92393,92394],{"class":254,"line":8173},[252,92395,2539],{"emptyLinePlaceholder":181},[252,92397,92398,92400,92402,92404],{"class":254,"line":8185},[252,92399,92234],{"class":2102},[252,92401,1537],{"class":51440},[252,92403,64164],{"class":2102},[252,92405,15712],{"class":262},[252,92407,92408,92410,92412,92415],{"class":254,"line":8197},[252,92409,57556],{"class":311},[252,92411,51577],{"class":262},[252,92413,92414],{"class":311},"#1286ff",[252,92416,1429],{"class":262},[252,92418,92419],{"class":254,"line":9856},[252,92420,2326],{"class":262},[252,92422,92423,92425,92427],{"class":254,"line":9881},[252,92424,52557],{"class":262},[252,92426,5266],{"class":51440},[252,92428,51447],{"class":262},[252,92430,92431,92433,92435],{"class":254,"line":9904},[252,92432,51925],{"class":262},[252,92434,51474],{"class":51440},[252,92436,51447],{"class":262},[252,92438,92439],{"class":254,"line":9928},[252,92440,2539],{"emptyLinePlaceholder":181},[252,92442,92443,92445,92447],{"class":254,"line":9933},[252,92444,1173],{"class":262},[252,92446,51940],{"class":51440},[252,92448,51447],{"class":262},[252,92450,92451,92453,92455,92457,92459,92462],{"class":254,"line":9938},[252,92452,52284],{"class":262},[252,92454,51751],{"class":51440},[252,92456,53626],{"class":2102},[252,92458,308],{"class":262},[252,92460,92461],{"class":367},"\"container\"",[252,92463,51447],{"class":262},[252,92465,92466,92468,92470,92472,92474,92477],{"class":254,"line":9943},[252,92467,51481],{"class":262},[252,92469,51751],{"class":51440},[252,92471,53626],{"class":2102},[252,92473,308],{"class":262},[252,92475,92476],{"class":367},"\"header\"",[252,92478,51447],{"class":262},[252,92480,92481,92483,92485,92487,92489,92492],{"class":254,"line":9952},[252,92482,55374],{"class":262},[252,92484,501],{"class":51440},[252,92486,61197],{"class":2102},[252,92488,308],{"class":262},[252,92490,92491],{"class":367},"\"http:\u002F\u002Fpip.itcast.cn\"",[252,92493,51447],{"class":262},[252,92495,92496,92498,92500,92502,92504,92507,92509,92511,92513],{"class":254,"line":9957},[252,92497,55442],{"class":262},[252,92499,1601],{"class":51440},[252,92501,55379],{"class":2102},[252,92503,308],{"class":262},[252,92505,92506],{"class":367},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[252,92508,55387],{"class":2102},[252,92510,308],{"class":262},[252,92512,7792],{"class":367},[252,92514,59267],{"class":262},[252,92516,92517,92519,92521],{"class":254,"line":9963},[252,92518,55547],{"class":262},[252,92520,501],{"class":51440},[252,92522,51447],{"class":262},[252,92524,92525,92527,92529],{"class":254,"line":9984},[252,92526,51916],{"class":262},[252,92528,51751],{"class":51440},[252,92530,51447],{"class":262},[252,92532,92533,92535,92537,92539,92541,92544],{"class":254,"line":9990},[252,92534,51481],{"class":262},[252,92536,51751],{"class":51440},[252,92538,53626],{"class":2102},[252,92540,308],{"class":262},[252,92542,92543],{"class":367},"\"video\"",[252,92545,51447],{"class":262},[252,92547,92548,92550,92552,92554,92556,92559,92562,92564,92566],{"class":254,"line":10004},[252,92549,55374],{"class":262},[252,92551,28323],{"class":51440},[252,92553,55379],{"class":2102},[252,92555,308],{"class":262},[252,92557,92558],{"class":367},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[252,92560,92561],{"class":2102}," controls",[252,92563,55454],{"class":262},[252,92565,28323],{"class":51440},[252,92567,51447],{"class":262},[252,92569,92570,92572,92574],{"class":254,"line":10010},[252,92571,51916],{"class":262},[252,92573,51751],{"class":51440},[252,92575,51447],{"class":262},[252,92577,92578,92580,92582,92584,92586,92589],{"class":254,"line":10037},[252,92579,51481],{"class":262},[252,92581,51751],{"class":51440},[252,92583,53626],{"class":2102},[252,92585,308],{"class":262},[252,92587,92588],{"class":367},"\"elevator\"",[252,92590,51447],{"class":262},[252,92592,92593,92595,92597,92599,92601,92603,92606,92608,92610,92613,92615],{"class":254,"line":10046},[252,92594,55374],{"class":262},[252,92596,501],{"class":51440},[252,92598,61197],{"class":2102},[252,92600,308],{"class":262},[252,92602,64376],{"class":367},[252,92604,92605],{"class":2102}," data-ref",[252,92607,308],{"class":262},[252,92609,92543],{"class":367},[252,92611,92612],{"class":262},">视频介绍\u003C\u002F",[252,92614,501],{"class":51440},[252,92616,51447],{"class":262},[252,92618,92619,92621,92623,92625,92627,92629,92631,92633,92636,92639,92641],{"class":254,"line":10052},[252,92620,55374],{"class":262},[252,92622,501],{"class":51440},[252,92624,61197],{"class":2102},[252,92626,308],{"class":262},[252,92628,64376],{"class":367},[252,92630,92605],{"class":2102},[252,92632,308],{"class":262},[252,92634,92635],{"class":367},"\"intro\"",[252,92637,92638],{"class":262},">课程简介\u003C\u002F",[252,92640,501],{"class":51440},[252,92642,51447],{"class":262},[252,92644,92645,92647,92649,92651,92653,92655,92657,92659,92662,92665,92667],{"class":254,"line":10060},[252,92646,55374],{"class":262},[252,92648,501],{"class":51440},[252,92650,61197],{"class":2102},[252,92652,308],{"class":262},[252,92654,64376],{"class":367},[252,92656,92605],{"class":2102},[252,92658,308],{"class":262},[252,92660,92661],{"class":367},"\"outline\"",[252,92663,92664],{"class":262},">评论列表\u003C\u002F",[252,92666,501],{"class":51440},[252,92668,51447],{"class":262},[252,92670,92671,92673,92675],{"class":254,"line":10065},[252,92672,51916],{"class":262},[252,92674,51751],{"class":51440},[252,92676,51447],{"class":262},[252,92678,92679,92681,92683],{"class":254,"line":16744},[252,92680,52557],{"class":262},[252,92682,51751],{"class":51440},[252,92684,51447],{"class":262},[252,92686,92687,92689,92691,92693,92695,92698,92700,92702],{"class":254,"line":16750},[252,92688,52284],{"class":262},[252,92690,51953],{"class":51440},[252,92692,55379],{"class":2102},[252,92694,308],{"class":262},[252,92696,92697],{"class":367},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[252,92699,55454],{"class":262},[252,92701,51953],{"class":51440},[252,92703,51447],{"class":262},[252,92705,92706,92708,92710],{"class":254,"line":16773},[252,92707,52284],{"class":262},[252,92709,51953],{"class":51440},[252,92711,51447],{"class":262},[252,92713,92714],{"class":254,"line":16779},[252,92715,92716],{"class":321},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[252,92718,92719,92721,92723,92725,92727,92729,92731,92734],{"class":254,"line":16802},[252,92720,11361],{"class":258},[252,92722,92193],{"class":311},[252,92724,13704],{"class":258},[252,92726,54536],{"class":262},[252,92728,54539],{"class":2102},[252,92730,263],{"class":262},[252,92732,92733],{"class":367},"'video'",[252,92735,269],{"class":262},[252,92737,92738],{"class":254,"line":16816},[252,92739,92740],{"class":321},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[252,92742,92743,92746,92748,92750,92752,92755,92757],{"class":254,"line":16836},[252,92744,92745],{"class":262},"    video.ontimeupdate ",[252,92747,308],{"class":258},[252,92749,88493],{"class":262},[252,92751,91311],{"class":2102},[252,92753,92754],{"class":262},"(() ",[252,92756,84860],{"class":258},[252,92758,15712],{"class":262},[252,92760,92761],{"class":254,"line":16842},[252,92762,92763],{"class":321},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[252,92765,92766],{"class":254,"line":16853},[252,92767,92768],{"class":321},"      \u002F\u002F 控制台输出当前的时间\n",[252,92770,92771,92774],{"class":254,"line":16876},[252,92772,92773],{"class":321},"      \u002F\u002F console.log(video.currentTime)",[252,92775,92776],{"class":321},"  \u002F\u002F获得当前的视频时间\n",[252,92778,92779],{"class":254,"line":16898},[252,92780,92781],{"class":321},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[252,92783,92784,92786,92788,92790,92793],{"class":254,"line":16903},[252,92785,74823],{"class":262},[252,92787,71794],{"class":2102},[252,92789,263],{"class":262},[252,92791,92792],{"class":367},"'currentTime'",[252,92794,92795],{"class":262},", video.currentTime)\n",[252,92797,92798,92800,92802],{"class":254,"line":16909},[252,92799,54675],{"class":262},[252,92801,6550],{"class":311},[252,92803,269],{"class":262},[252,92805,92806],{"class":254,"line":16923},[252,92807,92808],{"class":321},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[252,92810,92811,92814,92817,92819,92822,92824],{"class":254,"line":16936},[252,92812,92813],{"class":262},"    video.",[252,92815,92816],{"class":2102},"onloadeddata",[252,92818,13704],{"class":258},[252,92820,92821],{"class":262}," () ",[252,92823,84860],{"class":258},[252,92825,15712],{"class":262},[252,92827,92828],{"class":254,"line":16941},[252,92829,60152],{"class":321},[252,92831,92832],{"class":254,"line":16955},[252,92833,92834],{"class":321},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[252,92836,92837,92840,92842,92845,92847,92849,92851,92853,92855],{"class":254,"line":16960},[252,92838,92839],{"class":262},"      video.currentTime ",[252,92841,308],{"class":258},[252,92843,92844],{"class":262}," localStorage.",[252,92846,71825],{"class":2102},[252,92848,263],{"class":262},[252,92850,92792],{"class":367},[252,92852,13854],{"class":262},[252,92854,71497],{"class":258},[252,92856,47473],{"class":311},[252,92858,92859],{"class":254,"line":16966},[252,92860,2326],{"class":262},[252,92862,92863,92865,92867],{"class":254,"line":16971},[252,92864,52557],{"class":262},[252,92866,51953],{"class":51440},[252,92868,51447],{"class":262},[252,92870,92871,92873,92875],{"class":254,"line":16985},[252,92872,51925],{"class":262},[252,92874,51940],{"class":51440},[252,92876,51447],{"class":262},[252,92878,92879],{"class":254,"line":16990},[252,92880,2539],{"emptyLinePlaceholder":181},[252,92882,92883,92885,92887],{"class":254,"line":16995},[252,92884,51925],{"class":262},[252,92886,50775],{"class":51440},[252,92888,51447],{"class":262},[5266,92890,92891],{},"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":169,"searchDepth":170,"depth":170,"links":92893},[92894,92899,92903,92904,92905,92910,92915,92916,92917,92918,92925,92930,92931,92941,92945,92946,92950],{"id":76831,"depth":170,"text":76832,"children":92895},[92896,92897,92898],{"id":76835,"depth":1318,"text":76836},{"id":76860,"depth":1318,"text":76861},{"id":76872,"depth":1318,"text":76873},{"id":76884,"depth":170,"text":76885,"children":92900},[92901,92902],{"id":76888,"depth":1318,"text":76889},{"id":76903,"depth":1318,"text":76904},{"id":76955,"depth":170,"text":76956},{"id":76999,"depth":170,"text":77000},{"id":77016,"depth":170,"text":77017,"children":92906},[92907,92908,92909],{"id":77020,"depth":1318,"text":77021},{"id":77033,"depth":1318,"text":77034},{"id":77138,"depth":1318,"text":77139},{"id":77426,"depth":170,"text":77427,"children":92911},[92912,92913,92914],{"id":77430,"depth":1318,"text":77431},{"id":77873,"depth":1318,"text":77874},{"id":78284,"depth":1318,"text":78285},{"id":78347,"depth":170,"text":78348},{"id":78426,"depth":170,"text":78427},{"id":78519,"depth":170,"text":78520},{"id":80364,"depth":170,"text":80365,"children":92919},[92920,92921,92922,92923,92924],{"id":80368,"depth":1318,"text":80369},{"id":80380,"depth":1318,"text":80381},{"id":80599,"depth":1318,"text":80600},{"id":80617,"depth":1318,"text":80618},{"id":80677,"depth":1318,"text":80678},{"id":84944,"depth":170,"text":84945,"children":92926},[92927,92928,92929],{"id":84948,"depth":1318,"text":84949},{"id":84966,"depth":1318,"text":84967},{"id":84992,"depth":1318,"text":84993},{"id":85001,"depth":170,"text":85002},{"id":85023,"depth":170,"text":85024,"children":92932},[92933,92934,92935,92936,92937,92938,92939,92940],{"id":85027,"depth":1318,"text":85028},{"id":85288,"depth":1318,"text":85289},{"id":85474,"depth":1318,"text":85475},{"id":85841,"depth":1318,"text":85842},{"id":85957,"depth":1318,"text":85958},{"id":85993,"depth":1318,"text":85994},{"id":86040,"depth":1318,"text":86041},{"id":86074,"depth":1318,"text":86075},{"id":87437,"depth":170,"text":87438,"children":92942},[92943,92944],{"id":87441,"depth":1318,"text":87442},{"id":87478,"depth":1318,"text":87479},{"id":88833,"depth":170,"text":88834},{"id":89204,"depth":170,"text":89205,"children":92947},[92948,92949],{"id":89208,"depth":1318,"text":89209},{"id":89242,"depth":1318,"text":89243},{"id":89971,"depth":170,"text":89972,"children":92951},[92952,92953,92954,92955],{"id":89975,"depth":1318,"text":89976},{"id":90933,"depth":1318,"text":90934},{"id":91875,"depth":1318,"text":91876},{"id":91949,"depth":1318,"text":91950},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76820,"description":178},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92962,"title":92963,"body":92964,"description":92975,"extension":179,"meta":92976,"navigation":181,"path":92978,"seo":92979,"stem":92980,"__hash__":92981},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92965,"toc":92973},[92966],[19,92967,92968,92969],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[501,92970,92971],{"href":92971,"rel":92972},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24004],{"title":169,"searchDepth":170,"depth":170,"links":92974},[],"三件套第三套学习",{"category":92977},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92963,"description":92975},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92983,"title":92984,"body":92985,"description":178,"extension":179,"meta":93090,"navigation":181,"path":93091,"seo":93092,"stem":93093,"__hash__":93094},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92986,"toc":93085},[92987,92994,92997,93000,93003,93007,93016,93019,93022,93026,93035,93038,93042,93045,93065,93068,93082],[19,92988,92989],{},[501,92990,92993],{"href":92991,"rel":92992},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24004],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92995,92984],{"id":92996},"_1安装",[19,92998,92999],{},"numpy是科学计算基础库,底层是C语言",[19,93001,93002],{},"三种方式：",[14,93004,93006],{"id":93005},"_11-通过pip安装","1.1 通过pip安装",[244,93008,93010],{"className":30518,"code":93009,"language":30520,"meta":169,"style":169},"pip install numpy\n",[22,93011,93012],{"__ignoreMap":169},[252,93013,93014],{"class":254,"line":255},[252,93015,93009],{"class":262},[19,93017,93018],{},"首选方式，自动处理依赖项",[19,93020,93021],{},"在提示系统命令符中使用cmd",[14,93023,93025],{"id":93024},"_12-通过anaconda安装","1.2 通过Anaconda安装",[244,93027,93029],{"className":30518,"code":93028,"language":30520,"meta":169,"style":169},"conda install numpy\n",[22,93030,93031],{"__ignoreMap":169},[252,93032,93033],{"class":254,"line":255},[252,93034,93028],{"class":262},[19,93036,93037],{},"自动解决环境依赖",[14,93039,93041],{"id":93040},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93043,93044],{},"对于Debian\u002FUbuntu",[244,93046,93048],{"className":30518,"code":93047,"language":30520,"meta":169,"style":169},"sudo apt-get install python3-numpy\n",[22,93049,93050],{"__ignoreMap":169},[252,93051,93052,93055,93057,93060,93062],{"class":254,"line":255},[252,93053,93054],{"class":262},"sudo apt",[252,93056,795],{"class":258},[252,93058,93059],{"class":262},"get install python3",[252,93061,795],{"class":258},[252,93063,93064],{"class":262},"numpy\n",[19,93066,93067],{},"对于Fedora:",[244,93069,93071],{"className":30518,"code":93070,"language":30520,"meta":169,"style":169},"sudo dnf install python3-numpy\n",[22,93072,93073],{"__ignoreMap":169},[252,93074,93075,93078,93080],{"class":254,"line":255},[252,93076,93077],{"class":262},"sudo dnf install python3",[252,93079,795],{"class":258},[252,93081,93064],{"class":262},[5266,93083,93084],{},"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":169,"searchDepth":170,"depth":170,"links":93086},[93087,93088,93089],{"id":93005,"depth":170,"text":93006},{"id":93024,"depth":170,"text":93025},{"id":93040,"depth":170,"text":93041},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92984,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93096,"title":93097,"body":93098,"description":178,"extension":179,"meta":93211,"navigation":181,"path":93212,"seo":93213,"stem":93214,"__hash__":93215},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93099,"toc":93209},[93100,93103,93106,93109,93112,93115,93118,93121,93124,93127,93203,93206],[10,93101,93097],{"id":93102},"_10算数函数",[19,93104,93105],{},"加减乘除运算跟python基础语法没区别",[19,93107,93108],{},"除了python那种方法外还可以使用函数",[19,93110,93111],{},"加：np.add(a,b)",[19,93113,93114],{},"减：np.subtract(a,b)",[19,93116,93117],{},"乘：np.multiply(a,b)",[19,93119,93120],{},"除：np.divide(a,b) == a\u002Fb",[19,93122,93123],{},"取余：np.mod(a,b) == a%b",[19,93125,93126],{},"必须会的用法：",[244,93128,93130],{"className":30518,"code":93129,"language":30520,"meta":169,"style":169},"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",[22,93131,93132,93154,93175,93185,93198],{"__ignoreMap":169},[252,93133,93134,93136,93138,93141,93143,93146,93148,93150,93152],{"class":254,"line":255},[252,93135,501],{"class":262},[252,93137,308],{"class":258},[252,93139,93140],{"class":262},"np.arange(",[252,93142,683],{"class":311},[252,93144,93145],{"class":262},").reshape(",[252,93147,334],{"class":311},[252,93149,641],{"class":262},[252,93151,334],{"class":311},[252,93153,269],{"class":262},[252,93155,93156,93158,93160,93163,93165,93167,93169,93171,93173],{"class":254,"line":170},[252,93157,526],{"class":262},[252,93159,308],{"class":258},[252,93161,93162],{"class":262},"np.array([",[252,93164,709],{"class":311},[252,93166,641],{"class":262},[252,93168,709],{"class":311},[252,93170,641],{"class":262},[252,93172,709],{"class":311},[252,93174,4796],{"class":262},[252,93176,93177,93180,93182],{"class":254,"line":1318},[252,93178,93179],{"class":262},"result",[252,93181,308],{"class":258},[252,93183,93184],{"class":262},"np.empty_like(a)\n",[252,93186,93187,93190,93193,93195],{"class":254,"line":1333},[252,93188,93189],{"class":262},"np.add(a,b,",[252,93191,93192],{"class":5356},"out",[252,93194,308],{"class":258},[252,93196,93197],{"class":262},"result)\n",[252,93199,93200],{"class":254,"line":1339},[252,93201,93202],{"class":262},"result\n",[19,93204,93205],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5266,93207,93208],{},"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":169,"searchDepth":170,"depth":170,"links":93210},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93097,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93217,"title":93218,"body":93219,"description":178,"extension":179,"meta":93981,"navigation":181,"path":93982,"seo":93983,"stem":93984,"__hash__":93985},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93220,"toc":93968},[93221,93224,93227,93230,93234,93273,93277,93321,93381,93385,93388,93427,93430,93475,93479,93515,93519,93588,93592,93656,93660,93663,93666,93669,93672,93708,93712,93752,93756,93828,93831,93835,93898,93902,93965],[10,93222,93218],{"id":93223},"_11统计函数",[19,93225,93226],{},"sum max min mean",[19,93228,93229],{},"这些有axis参数，可以指定方向",[14,93231,93233],{"id":93232},"_111-sum求和函数","11.1 sum()求和函数",[244,93235,93237],{"className":30518,"code":93236,"language":30520,"meta":169,"style":169},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[22,93238,93239,93244,93265],{"__ignoreMap":169},[252,93240,93241],{"class":254,"line":255},[252,93242,93243],{"class":321},"#创建一维数组\n",[252,93245,93246,93248,93250,93253,93255,93257,93259,93261,93263],{"class":254,"line":170},[252,93247,501],{"class":262},[252,93249,308],{"class":258},[252,93251,93252],{"class":262},"np.random.randint(",[252,93254,480],{"class":311},[252,93256,641],{"class":262},[252,93258,574],{"class":311},[252,93260,641],{"class":262},[252,93262,963],{"class":311},[252,93264,269],{"class":262},[252,93266,93267,93270],{"class":254,"line":1318},[252,93268,93269],{"class":262},"np.sum(a)",[252,93271,93272],{"class":321},"#求和\n",[14,93274,93276],{"id":93275},"_112-max求最大值函数","11.2 max()求最大值函数",[244,93278,93280],{"className":30518,"code":93279,"language":30520,"meta":169,"style":169},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[22,93281,93282,93286,93306,93311,93316],{"__ignoreMap":169},[252,93283,93284],{"class":254,"line":255},[252,93285,93243],{"class":321},[252,93287,93288,93290,93292,93294,93296,93298,93300,93302,93304],{"class":254,"line":170},[252,93289,501],{"class":262},[252,93291,308],{"class":258},[252,93293,93252],{"class":262},[252,93295,480],{"class":311},[252,93297,641],{"class":262},[252,93299,574],{"class":311},[252,93301,641],{"class":262},[252,93303,963],{"class":311},[252,93305,269],{"class":262},[252,93307,93308],{"class":254,"line":1318},[252,93309,93310],{"class":262},"np.max(a)\n",[252,93312,93313],{"class":254,"line":1333},[252,93314,93315],{"class":321},"#最大索引(求最大元素的索引)arg\n",[252,93317,93318],{"class":254,"line":1339},[252,93319,93320],{"class":262},"np.argmax(a)\n",[244,93322,93324],{"className":30518,"code":93323,"language":30520,"meta":169,"style":169},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[22,93325,93326,93347,93367,93371],{"__ignoreMap":169},[252,93327,93328,93330,93332,93335,93337,93339,93341,93343,93345],{"class":254,"line":255},[252,93329,11059],{"class":262},[252,93331,308],{"class":258},[252,93333,93334],{"class":262}," np.array([",[252,93336,480],{"class":311},[252,93338,12575],{"class":262},[252,93340,582],{"class":311},[252,93342,12575],{"class":262},[252,93344,334],{"class":311},[252,93346,4796],{"class":262},[252,93348,93349,93351,93353,93355,93357,93359,93361,93363,93365],{"class":254,"line":170},[252,93350,11085],{"class":262},[252,93352,308],{"class":258},[252,93354,93334],{"class":262},[252,93356,334],{"class":311},[252,93358,12575],{"class":262},[252,93360,340],{"class":311},[252,93362,12575],{"class":262},[252,93364,556],{"class":311},[252,93366,4796],{"class":262},[252,93368,93369],{"class":254,"line":1318},[252,93370,2539],{"emptyLinePlaceholder":181},[252,93372,93373,93375,93378],{"class":254,"line":1333},[252,93374,30555],{"class":311},[252,93376,93377],{"class":262},"(np.maximum(a, b))   ",[252,93379,93380],{"class":321},"# [3 5 4]，每个位置上取较大值\n",[14,93382,93384],{"id":93383},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93386,93387],{},"①一维数组：",[244,93389,93391],{"className":30518,"code":93390,"language":30520,"meta":169,"style":169},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[22,93392,93393,93397,93417,93422],{"__ignoreMap":169},[252,93394,93395],{"class":254,"line":255},[252,93396,93243],{"class":321},[252,93398,93399,93401,93403,93405,93407,93409,93411,93413,93415],{"class":254,"line":170},[252,93400,501],{"class":262},[252,93402,308],{"class":258},[252,93404,93252],{"class":262},[252,93406,480],{"class":311},[252,93408,641],{"class":262},[252,93410,574],{"class":311},[252,93412,641],{"class":262},[252,93414,963],{"class":311},[252,93416,269],{"class":262},[252,93418,93419],{"class":254,"line":1318},[252,93420,93421],{"class":321},"#求平均值\n",[252,93423,93424],{"class":254,"line":1333},[252,93425,93426],{"class":262},"np.mean(a)\n",[19,93428,93429],{},"②二维数组",[244,93431,93433],{"className":30518,"code":93432,"language":30520,"meta":169,"style":169},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[22,93434,93435,93440,93465,93470],{"__ignoreMap":169},[252,93436,93437],{"class":254,"line":255},[252,93438,93439],{"class":321},"#二维数组\n",[252,93441,93442,93445,93447,93449,93451,93453,93455,93457,93459,93461,93463],{"class":254,"line":170},[252,93443,93444],{"class":262},"aa",[252,93446,308],{"class":258},[252,93448,93140],{"class":262},[252,93450,480],{"class":311},[252,93452,641],{"class":262},[252,93454,786],{"class":311},[252,93456,93145],{"class":262},[252,93458,334],{"class":311},[252,93460,641],{"class":262},[252,93462,556],{"class":311},[252,93464,269],{"class":262},[252,93466,93467],{"class":254,"line":1318},[252,93468,93469],{"class":321},"#对数组中的所有数求平均\n",[252,93471,93472],{"class":254,"line":1333},[252,93473,93474],{"class":262},"np.mean(aa)\n",[14,93476,93478],{"id":93477},"_114-median求中位数函数","11.4 median()求中位数函数",[244,93480,93482],{"className":30518,"code":93481,"language":30520,"meta":169,"style":169},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[22,93483,93484,93489,93505,93510],{"__ignoreMap":169},[252,93485,93486],{"class":254,"line":255},[252,93487,93488],{"class":321},"#求中位数\n",[252,93490,93491,93493,93495,93497,93499,93501,93503],{"class":254,"line":170},[252,93492,526],{"class":262},[252,93494,308],{"class":258},[252,93496,93140],{"class":262},[252,93498,480],{"class":311},[252,93500,641],{"class":262},[252,93502,709],{"class":311},[252,93504,269],{"class":262},[252,93506,93507],{"class":254,"line":1318},[252,93508,93509],{"class":262},"np.median(b)\n",[252,93511,93512],{"class":254,"line":1333},[252,93513,93514],{"class":321},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93516,93518],{"id":93517},"_115-power求幂运算函数","11.5 power()求幂运算函数",[244,93520,93522],{"className":30518,"code":93521,"language":30520,"meta":169,"style":169},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[22,93523,93524,93540,93545,93550,93559,93564,93573],{"__ignoreMap":169},[252,93525,93526,93528,93530,93532,93534,93536,93538],{"class":254,"line":255},[252,93527,526],{"class":262},[252,93529,308],{"class":258},[252,93531,93140],{"class":262},[252,93533,480],{"class":311},[252,93535,641],{"class":262},[252,93537,709],{"class":311},[252,93539,269],{"class":262},[252,93541,93542],{"class":254,"line":170},[252,93543,93544],{"class":321},"#幂运算\n",[252,93546,93547],{"class":254,"line":1318},[252,93548,93549],{"class":321},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[252,93551,93552,93555,93557],{"class":254,"line":1333},[252,93553,93554],{"class":262},"np.power(b,",[252,93556,340],{"class":311},[252,93558,269],{"class":262},[252,93560,93561],{"class":254,"line":1339},[252,93562,93563],{"class":321},"#或者以下代码，将数据存储起来\n",[252,93565,93566,93568,93570],{"class":254,"line":1353},[252,93567,1108],{"class":262},[252,93569,308],{"class":258},[252,93571,93572],{"class":262},"np.empty_like(b)\n",[252,93574,93575,93577,93579,93581,93583,93585],{"class":254,"line":1359},[252,93576,93554],{"class":262},[252,93578,340],{"class":311},[252,93580,641],{"class":262},[252,93582,93192],{"class":5356},[252,93584,308],{"class":258},[252,93586,93587],{"class":262},"y)\n",[14,93589,93591],{"id":93590},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[244,93593,93595],{"className":30518,"code":93594,"language":30520,"meta":169,"style":169},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[22,93596,93597,93613,93618,93623,93627,93645],{"__ignoreMap":169},[252,93598,93599,93601,93603,93605,93607,93609,93611],{"class":254,"line":255},[252,93600,526],{"class":262},[252,93602,308],{"class":258},[252,93604,93140],{"class":262},[252,93606,480],{"class":311},[252,93608,641],{"class":262},[252,93610,709],{"class":311},[252,93612,269],{"class":262},[252,93614,93615],{"class":254,"line":170},[252,93616,93617],{"class":321},"#开方\n",[252,93619,93620],{"class":254,"line":1318},[252,93621,93622],{"class":262},"np.sqrt(b)\n",[252,93624,93625],{"class":254,"line":1333},[252,93626,93563],{"class":321},[252,93628,93629,93631,93633,93636,93639,93641,93643],{"class":254,"line":1339},[252,93630,1108],{"class":262},[252,93632,308],{"class":258},[252,93634,93635],{"class":262},"np.empty_like(b,",[252,93637,93638],{"class":5356},"dtype",[252,93640,308],{"class":258},[252,93642,302],{"class":311},[252,93644,269],{"class":262},[252,93646,93647,93650,93652,93654],{"class":254,"line":1353},[252,93648,93649],{"class":262},"np.sqrt(b,",[252,93651,93192],{"class":5356},[252,93653,308],{"class":258},[252,93655,93587],{"class":262},[14,93657,93659],{"id":93658},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93661,93662],{},"对数组中的元素累计求和，可指定轴",[19,93664,93665],{},"#累计求和的意思是：",[19,93667,93668],{},"a = np.array([1, 2, 3, 4])",[19,93670,93671],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[244,93673,93675],{"className":30518,"code":93674,"language":30520,"meta":169,"style":169},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[22,93676,93677,93693,93698,93703],{"__ignoreMap":169},[252,93678,93679,93681,93683,93685,93687,93689,93691],{"class":254,"line":255},[252,93680,526],{"class":262},[252,93682,308],{"class":258},[252,93684,93140],{"class":262},[252,93686,480],{"class":311},[252,93688,641],{"class":262},[252,93690,709],{"class":311},[252,93692,269],{"class":262},[252,93694,93695],{"class":254,"line":170},[252,93696,93697],{"class":262},"np.cumsum(b)\n",[252,93699,93700],{"class":254,"line":1318},[252,93701,93702],{"class":321},"#结果：\n",[252,93704,93705],{"class":254,"line":1333},[252,93706,93707],{"class":321},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93709,93711],{"id":93710},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[244,93713,93715],{"className":30518,"code":93714,"language":30520,"meta":169,"style":169},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[22,93716,93717,93733,93738,93743,93747],{"__ignoreMap":169},[252,93718,93719,93721,93723,93725,93727,93729,93731],{"class":254,"line":255},[252,93720,526],{"class":262},[252,93722,308],{"class":258},[252,93724,93140],{"class":262},[252,93726,480],{"class":311},[252,93728,641],{"class":262},[252,93730,709],{"class":311},[252,93732,269],{"class":262},[252,93734,93735],{"class":254,"line":170},[252,93736,93737],{"class":321},"#对数组中的元素累计求积，可指定轴\n",[252,93739,93740],{"class":254,"line":1318},[252,93741,93742],{"class":262},"np.cumprod(b)\n",[252,93744,93745],{"class":254,"line":1333},[252,93746,93702],{"class":321},[252,93748,93749],{"class":254,"line":1339},[252,93750,93751],{"class":321},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93753,93755],{"id":93754},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[244,93757,93759],{"className":30518,"code":93758,"language":30520,"meta":169,"style":169},"#删除数组中的重复数据，并对数据进行排序\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",[22,93760,93761,93766,93814,93819,93823],{"__ignoreMap":169},[252,93762,93763],{"class":254,"line":255},[252,93764,93765],{"class":321},"#删除数组中的重复数据，并对数据进行排序\n",[252,93767,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802,93804,93806,93808,93810,93812],{"class":254,"line":170},[252,93769,501],{"class":262},[252,93771,308],{"class":258},[252,93773,93162],{"class":262},[252,93775,480],{"class":311},[252,93777,641],{"class":262},[252,93779,340],{"class":311},[252,93781,641],{"class":262},[252,93783,334],{"class":311},[252,93785,641],{"class":262},[252,93787,761],{"class":311},[252,93789,641],{"class":262},[252,93791,334],{"class":311},[252,93793,641],{"class":262},[252,93795,709],{"class":311},[252,93797,641],{"class":262},[252,93799,460],{"class":311},[252,93801,641],{"class":262},[252,93803,454],{"class":311},[252,93805,641],{"class":262},[252,93807,1038],{"class":311},[252,93809,641],{"class":262},[252,93811,556],{"class":311},[252,93813,4796],{"class":262},[252,93815,93816],{"class":254,"line":1318},[252,93817,93818],{"class":262},"np.unique(a)\n",[252,93820,93821],{"class":254,"line":1333},[252,93822,93702],{"class":321},[252,93824,93825],{"class":254,"line":1339},[252,93826,93827],{"class":321},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,93829,93830],{},"升序形式排序",[14,93832,93834],{"id":93833},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[244,93836,93838],{"className":30518,"code":93837,"language":30520,"meta":169,"style":169},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[22,93839,93840,93888,93893],{"__ignoreMap":169},[252,93841,93842,93844,93846,93848,93850,93852,93854,93856,93858,93860,93862,93864,93866,93868,93870,93872,93874,93876,93878,93880,93882,93884,93886],{"class":254,"line":255},[252,93843,501],{"class":262},[252,93845,308],{"class":258},[252,93847,93162],{"class":262},[252,93849,480],{"class":311},[252,93851,641],{"class":262},[252,93853,340],{"class":311},[252,93855,641],{"class":262},[252,93857,334],{"class":311},[252,93859,641],{"class":262},[252,93861,761],{"class":311},[252,93863,641],{"class":262},[252,93865,334],{"class":311},[252,93867,641],{"class":262},[252,93869,709],{"class":311},[252,93871,641],{"class":262},[252,93873,460],{"class":311},[252,93875,641],{"class":262},[252,93877,454],{"class":311},[252,93879,641],{"class":262},[252,93881,1038],{"class":311},[252,93883,641],{"class":262},[252,93885,556],{"class":311},[252,93887,4796],{"class":262},[252,93889,93890],{"class":254,"line":170},[252,93891,93892],{"class":321},"#返回数组中非零元素的索引\n",[252,93894,93895],{"class":254,"line":1318},[252,93896,93897],{"class":262},"np.nonzero(a)\n",[14,93899,93901],{"id":93900},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[244,93903,93905],{"className":30518,"code":93904,"language":30520,"meta":169,"style":169},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[22,93906,93907,93955,93960],{"__ignoreMap":169},[252,93908,93909,93911,93913,93915,93917,93919,93921,93923,93925,93927,93929,93931,93933,93935,93937,93939,93941,93943,93945,93947,93949,93951,93953],{"class":254,"line":255},[252,93910,501],{"class":262},[252,93912,308],{"class":258},[252,93914,93162],{"class":262},[252,93916,480],{"class":311},[252,93918,641],{"class":262},[252,93920,340],{"class":311},[252,93922,641],{"class":262},[252,93924,334],{"class":311},[252,93926,641],{"class":262},[252,93928,761],{"class":311},[252,93930,641],{"class":262},[252,93932,334],{"class":311},[252,93934,641],{"class":262},[252,93936,709],{"class":311},[252,93938,641],{"class":262},[252,93940,460],{"class":311},[252,93942,641],{"class":262},[252,93944,454],{"class":311},[252,93946,641],{"class":262},[252,93948,1038],{"class":311},[252,93950,641],{"class":262},[252,93952,556],{"class":311},[252,93954,4796],{"class":262},[252,93956,93957],{"class":254,"line":170},[252,93958,93959],{"class":321},"#计算一组数中最大值与最小值的差，可指定轴\n",[252,93961,93962],{"class":254,"line":1318},[252,93963,93964],{"class":262},"np.ptp(a)\n",[5266,93966,93967],{},"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":169,"searchDepth":170,"depth":170,"links":93969},[93970,93971,93972,93973,93974,93975,93976,93977,93978,93979,93980],{"id":93232,"depth":170,"text":93233},{"id":93275,"depth":170,"text":93276},{"id":93383,"depth":170,"text":93384},{"id":93477,"depth":170,"text":93478},{"id":93517,"depth":170,"text":93518},{"id":93590,"depth":170,"text":93591},{"id":93658,"depth":170,"text":93659},{"id":93710,"depth":170,"text":93711},{"id":93754,"depth":170,"text":93755},{"id":93833,"depth":170,"text":93834},{"id":93900,"depth":170,"text":93901},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93218,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93987,"title":93988,"body":93989,"description":178,"extension":179,"meta":94644,"navigation":181,"path":94645,"seo":94646,"stem":94647,"__hash__":94648},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93990,"toc":94632},[93991,93994,93998,94001,94217,94221,94224,94433,94437,94503,94508,94512,94515,94518,94556,94560,94563,94568,94572,94575,94578,94583,94587,94590,94594,94597,94600,94605,94609,94612,94615,94620,94624,94629],[10,93992,93988],{"id":93993},"_12其他常用函数",[14,93995,93997],{"id":93996},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,93999,94000],{},"将数组的数据按照行列复制扩展",[244,94002,94004],{"className":30518,"code":94003,"language":30520,"meta":169,"style":169},"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",[22,94005,94006,94022,94031,94035,94040,94045,94058,94062,94067,94072,94077,94081,94086,94110,94122,94126,94130,94135,94140,94145,94150,94154,94167,94171,94175,94180,94185,94190,94195,94200,94204,94208,94213],{"__ignoreMap":169},[252,94007,94008,94010,94012,94014,94016,94018,94020],{"class":254,"line":255},[252,94009,501],{"class":262},[252,94011,308],{"class":258},[252,94013,93140],{"class":262},[252,94015,480],{"class":311},[252,94017,641],{"class":262},[252,94019,582],{"class":311},[252,94021,269],{"class":262},[252,94023,94024,94027,94029],{"class":254,"line":170},[252,94025,94026],{"class":262},"np.tile(a,",[252,94028,340],{"class":311},[252,94030,269],{"class":262},[252,94032,94033],{"class":254,"line":1318},[252,94034,93702],{"class":321},[252,94036,94037],{"class":254,"line":1333},[252,94038,94039],{"class":321},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[252,94041,94042],{"class":254,"line":1339},[252,94043,94044],{"class":321},"#行复制两次，列复制三次\n",[252,94046,94047,94050,94052,94054,94056],{"class":254,"line":1353},[252,94048,94049],{"class":262},"np.tile(a,(",[252,94051,340],{"class":311},[252,94053,641],{"class":262},[252,94055,334],{"class":311},[252,94057,30637],{"class":262},[252,94059,94060],{"class":254,"line":1359},[252,94061,93702],{"class":321},[252,94063,94064],{"class":254,"line":1450},[252,94065,94066],{"class":367},"'''\n",[252,94068,94069],{"class":254,"line":1456},[252,94070,94071],{"class":367},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[252,94073,94074],{"class":254,"line":1468},[252,94075,94076],{"class":367},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[252,94078,94079],{"class":254,"line":1751},[252,94080,94066],{"class":367},[252,94082,94083],{"class":254,"line":1756},[252,94084,94085],{"class":321},"#创建二维数组\n",[252,94087,94088,94090,94092,94094,94096,94098,94100,94102,94104,94106,94108],{"class":254,"line":1762},[252,94089,93444],{"class":262},[252,94091,308],{"class":258},[252,94093,93140],{"class":262},[252,94095,480],{"class":311},[252,94097,641],{"class":262},[252,94099,786],{"class":311},[252,94101,93145],{"class":262},[252,94103,556],{"class":311},[252,94105,641],{"class":262},[252,94107,334],{"class":311},[252,94109,269],{"class":262},[252,94111,94112,94115,94117,94119],{"class":254,"line":1767},[252,94113,94114],{"class":262},"np.tile(aa,",[252,94116,340],{"class":311},[252,94118,692],{"class":262},[252,94120,94121],{"class":321},"#一个数的时候就是行\n",[252,94123,94124],{"class":254,"line":1781},[252,94125,93702],{"class":321},[252,94127,94128],{"class":254,"line":1786},[252,94129,94066],{"class":367},[252,94131,94132],{"class":254,"line":1792},[252,94133,94134],{"class":367},"array([[ 1,  2,  3,  1,  2,  3],\n",[252,94136,94137],{"class":254,"line":1813},[252,94138,94139],{"class":367},"       [ 4,  5,  6,  4,  5,  6],\n",[252,94141,94142],{"class":254,"line":1818},[252,94143,94144],{"class":367},"       [ 7,  8,  9,  7,  8,  9],\n",[252,94146,94147],{"class":254,"line":1832},[252,94148,94149],{"class":367},"       [10, 11, 12, 10, 11, 12]])\n",[252,94151,94152],{"class":254,"line":1837},[252,94153,94066],{"class":367},[252,94155,94156,94159,94161,94163,94165],{"class":254,"line":1866},[252,94157,94158],{"class":262},"np.tile(aa,(",[252,94160,340],{"class":311},[252,94162,641],{"class":262},[252,94164,334],{"class":311},[252,94166,30637],{"class":262},[252,94168,94169],{"class":254,"line":1871},[252,94170,93702],{"class":321},[252,94172,94173],{"class":254,"line":1888},[252,94174,94066],{"class":367},[252,94176,94177],{"class":254,"line":1893},[252,94178,94179],{"class":367},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[252,94181,94182],{"class":254,"line":1898},[252,94183,94184],{"class":367},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[252,94186,94187],{"class":254,"line":1903},[252,94188,94189],{"class":367},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[252,94191,94192],{"class":254,"line":1917},[252,94193,94194],{"class":367},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[252,94196,94197],{"class":254,"line":1922},[252,94198,94199],{"class":367},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[252,94201,94202],{"class":254,"line":2716},[252,94203,94184],{"class":367},[252,94205,94206],{"class":254,"line":2730},[252,94207,94189],{"class":367},[252,94209,94210],{"class":254,"line":2738},[252,94211,94212],{"class":367},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[252,94214,94215],{"class":254,"line":2743},[252,94216,94066],{"class":367},[14,94218,94220],{"id":94219},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94222,94223],{},"repeat()将数组中的每个元素重复若干次",[244,94225,94227],{"className":30518,"code":94226,"language":30520,"meta":169,"style":169},"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",[22,94228,94229,94245,94254,94258,94263,94287,94292,94301,94305,94310,94314,94319,94335,94339,94343,94348,94353,94358,94362,94367,94371,94376,94381,94385,94401,94405,94409,94414,94419,94424,94429],{"__ignoreMap":169},[252,94230,94231,94233,94235,94237,94239,94241,94243],{"class":254,"line":255},[252,94232,501],{"class":262},[252,94234,308],{"class":258},[252,94236,93140],{"class":262},[252,94238,480],{"class":311},[252,94240,641],{"class":262},[252,94242,582],{"class":311},[252,94244,269],{"class":262},[252,94246,94247,94250,94252],{"class":254,"line":170},[252,94248,94249],{"class":262},"np.repeat(a,",[252,94251,334],{"class":311},[252,94253,269],{"class":262},[252,94255,94256],{"class":254,"line":1318},[252,94257,93702],{"class":321},[252,94259,94260],{"class":254,"line":1333},[252,94261,94262],{"class":321},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[252,94264,94265,94267,94269,94271,94273,94275,94277,94279,94281,94283,94285],{"class":254,"line":1339},[252,94266,93444],{"class":262},[252,94268,308],{"class":258},[252,94270,93140],{"class":262},[252,94272,480],{"class":311},[252,94274,641],{"class":262},[252,94276,786],{"class":311},[252,94278,93145],{"class":262},[252,94280,556],{"class":311},[252,94282,641],{"class":262},[252,94284,334],{"class":311},[252,94286,269],{"class":262},[252,94288,94289],{"class":254,"line":1353},[252,94290,94291],{"class":321},"#这个重复之后二维变成一维\n",[252,94293,94294,94297,94299],{"class":254,"line":1359},[252,94295,94296],{"class":262},"np.repeat(aa,",[252,94298,340],{"class":311},[252,94300,269],{"class":262},[252,94302,94303],{"class":254,"line":1450},[252,94304,94066],{"class":367},[252,94306,94307],{"class":254,"line":1456},[252,94308,94309],{"class":367},"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",[252,94311,94312],{"class":254,"line":1468},[252,94313,94066],{"class":367},[252,94315,94316],{"class":254,"line":1751},[252,94317,94318],{"class":321},"#指定axis\n",[252,94320,94321,94323,94325,94327,94329,94331,94333],{"class":254,"line":1756},[252,94322,94296],{"class":262},[252,94324,340],{"class":311},[252,94326,641],{"class":262},[252,94328,47654],{"class":5356},[252,94330,308],{"class":258},[252,94332,454],{"class":311},[252,94334,269],{"class":262},[252,94336,94337],{"class":254,"line":1762},[252,94338,93702],{"class":321},[252,94340,94341],{"class":254,"line":1767},[252,94342,94066],{"class":367},[252,94344,94345],{"class":254,"line":1781},[252,94346,94347],{"class":367},"array([[ 1,  2,  3],\n",[252,94349,94350],{"class":254,"line":1786},[252,94351,94352],{"class":367},"       [ 1,  2,  3],\n",[252,94354,94355],{"class":254,"line":1792},[252,94356,94357],{"class":367},"       [ 4,  5,  6],\n",[252,94359,94360],{"class":254,"line":1813},[252,94361,94357],{"class":367},[252,94363,94364],{"class":254,"line":1818},[252,94365,94366],{"class":367},"       [ 7,  8,  9],\n",[252,94368,94369],{"class":254,"line":1832},[252,94370,94366],{"class":367},[252,94372,94373],{"class":254,"line":1837},[252,94374,94375],{"class":367},"       [10, 11, 12],\n",[252,94377,94378],{"class":254,"line":1866},[252,94379,94380],{"class":367},"       [10, 11, 12]])\n",[252,94382,94383],{"class":254,"line":1871},[252,94384,94066],{"class":367},[252,94386,94387,94389,94391,94393,94395,94397,94399],{"class":254,"line":1888},[252,94388,94296],{"class":262},[252,94390,340],{"class":311},[252,94392,641],{"class":262},[252,94394,47654],{"class":5356},[252,94396,308],{"class":258},[252,94398,480],{"class":311},[252,94400,269],{"class":262},[252,94402,94403],{"class":254,"line":1893},[252,94404,93702],{"class":321},[252,94406,94407],{"class":254,"line":1898},[252,94408,94066],{"class":367},[252,94410,94411],{"class":254,"line":1903},[252,94412,94413],{"class":367},"array([[ 1,  1,  2,  2,  3,  3],\n",[252,94415,94416],{"class":254,"line":1917},[252,94417,94418],{"class":367},"       [ 4,  4,  5,  5,  6,  6],\n",[252,94420,94421],{"class":254,"line":1922},[252,94422,94423],{"class":367},"       [ 7,  7,  8,  8,  9,  9],\n",[252,94425,94426],{"class":254,"line":2716},[252,94427,94428],{"class":367},"       [10, 10, 11, 11, 12, 12]])\n",[252,94430,94431],{"class":254,"line":2730},[252,94432,94066],{"class":367},[14,94434,94436],{"id":94435},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[244,94438,94440],{"className":30518,"code":94439,"language":30520,"meta":169,"style":169},"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",[22,94441,94442,94458,94463,94475,94479,94484,94494,94498],{"__ignoreMap":169},[252,94443,94444,94446,94448,94450,94452,94454,94456],{"class":254,"line":255},[252,94445,501],{"class":262},[252,94447,308],{"class":258},[252,94449,93140],{"class":262},[252,94451,480],{"class":311},[252,94453,641],{"class":262},[252,94455,582],{"class":311},[252,94457,269],{"class":262},[252,94459,94460],{"class":254,"line":170},[252,94461,94462],{"class":321},"#array([，2，3，4])\n",[252,94464,94465,94468,94470,94472],{"class":254,"line":1318},[252,94466,94467],{"class":262},"np.roll(a,",[252,94469,340],{"class":311},[252,94471,692],{"class":262},[252,94473,94474],{"class":321},"#传正数向后调多少位，传负数向前调多少位\n",[252,94476,94477],{"class":254,"line":1333},[252,94478,93702],{"class":321},[252,94480,94481],{"class":254,"line":1339},[252,94482,94483],{"class":321},"#array([3, 4, 1, 2])\n",[252,94485,94486,94488,94490,94492],{"class":254,"line":1353},[252,94487,94467],{"class":262},[252,94489,795],{"class":258},[252,94491,480],{"class":311},[252,94493,269],{"class":262},[252,94495,94496],{"class":254,"line":1359},[252,94497,93702],{"class":321},[252,94499,94500],{"class":254,"line":1450},[252,94501,94502],{"class":321},"#array([2, 3, 4, 1])\n",[19,94504,94505],{},[1601,94506],{"alt":169,"src":94507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94509,94511],{"id":94510},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94513,94514],{},"resize()重新调整数组的大小",[19,94516,94517],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[244,94519,94521],{"className":30518,"code":94520,"language":30520,"meta":169,"style":169},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[22,94522,94523,94528,94541],{"__ignoreMap":169},[252,94524,94525],{"class":254,"line":255},[252,94526,94527],{"class":321},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[252,94529,94530,94533,94535,94537,94539],{"class":254,"line":170},[252,94531,94532],{"class":262},"np.resize(aa,(",[252,94534,340],{"class":311},[252,94536,641],{"class":262},[252,94538,607],{"class":311},[252,94540,30637],{"class":262},[252,94542,94543,94545,94547,94549,94551,94553],{"class":254,"line":1318},[252,94544,94532],{"class":262},[252,94546,340],{"class":311},[252,94548,641],{"class":262},[252,94550,683],{"class":311},[252,94552,82909],{"class":262},[252,94554,94555],{"class":321},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94557,94559],{"id":94558},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94561,94562],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94564,94565],{},[1601,94566],{"alt":169,"src":94567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94569,94571],{"id":94570},"_126-保存加载文件","12.6 保存加载文件",[19,94573,94574],{},"savetxt():将数据保存到txt文件中",[19,94576,94577],{},"loadtxt():从文件加载数据",[19,94579,94580],{},[1601,94581],{"alt":169,"src":94582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94584,94586],{"id":94585},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94588,94589],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94591,94593],{"id":94592},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94595,94596],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94598,94599],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94601,94602],{},[1601,94603],{"alt":169,"src":94604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94606,94608],{"id":94607},"_129-where语句","12.9 where语句",[19,94610,94611],{},"np.where(条件,x,y)",[19,94613,94614],{},"如果条件为True,对应值为x,否则对应值为y",[19,94616,94617],{},[1601,94618],{"alt":169,"src":94619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94621,94623],{"id":94622},"_1210-dot矩阵","12.10 dot()矩阵",[19,94625,94626],{},[1601,94627],{"alt":169,"src":94628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5266,94630,94631],{},"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":169,"searchDepth":170,"depth":170,"links":94633},[94634,94635,94636,94637,94638,94639,94640,94641,94642,94643],{"id":93996,"depth":170,"text":93997},{"id":94219,"depth":170,"text":94220},{"id":94435,"depth":170,"text":94436},{"id":94510,"depth":170,"text":94511},{"id":94558,"depth":170,"text":94559},{"id":94570,"depth":170,"text":94571},{"id":94585,"depth":170,"text":94586},{"id":94592,"depth":170,"text":94593},{"id":94607,"depth":170,"text":94608},{"id":94622,"depth":170,"text":94623},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93988,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94650,"title":94651,"body":94652,"description":178,"extension":179,"meta":95005,"navigation":181,"path":95006,"seo":95007,"stem":95008,"__hash__":95009},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94653,"toc":95003},[94654,94657,94660,94663,94666,94669,94734,94736,95000],[10,94655,94651],{"id":94656},"_13数组排序",[19,94658,94659],{},"排序主要用到的方法是np.sort和np.argsort",[19,94661,94662],{},"其中np.sort()对数组直接排序",[19,94664,94665],{},"而np.argsort()是返回排序后的原始索引",[19,94667,94668],{},"①一维数组",[244,94670,94672],{"className":30518,"code":94671,"language":30520,"meta":169,"style":169},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[22,94673,94674,94678,94718,94726],{"__ignoreMap":169},[252,94675,94676],{"class":254,"line":255},[252,94677,93243],{"class":321},[252,94679,94680,94682,94684,94686,94688,94690,94692,94694,94696,94698,94700,94702,94704,94706,94708,94710,94712,94714,94716],{"class":254,"line":170},[252,94681,501],{"class":262},[252,94683,308],{"class":258},[252,94685,93162],{"class":262},[252,94687,334],{"class":311},[252,94689,641],{"class":262},[252,94691,761],{"class":311},[252,94693,641],{"class":262},[252,94695,658],{"class":311},[252,94697,641],{"class":262},[252,94699,1038],{"class":311},[252,94701,641],{"class":262},[252,94703,542],{"class":311},[252,94705,641],{"class":262},[252,94707,1156],{"class":311},[252,94709,641],{"class":262},[252,94711,607],{"class":311},[252,94713,641],{"class":262},[252,94715,709],{"class":311},[252,94717,4796],{"class":262},[252,94719,94720,94723],{"class":254,"line":1318},[252,94721,94722],{"class":262},"np.sort(a)",[252,94724,94725],{"class":321},"#升序排序\n",[252,94727,94728,94731],{"class":254,"line":1333},[252,94729,94730],{"class":262},"np.argsort(a)",[252,94732,94733],{"class":321},"#按照元素大小来索引排序\n",[19,94735,93429],{},[244,94737,94739],{"className":30518,"code":94738,"language":30520,"meta":169,"style":169},"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",[22,94740,94741,94753,94779,94784,94788,94793,94798,94803,94808,94812,94820,94824,94829,94834,94839,94844,94848,94853,94866,94870,94875,94880,94885,94890,94894,94899,94911,94915,94919,94923,94927,94931,94935,94940,94955,94960,94969,94974,94978,94982,94987,94991,94996],{"__ignoreMap":169},[252,94742,94743,94746,94748,94750],{"class":254,"line":255},[252,94744,94745],{"class":262},"np.random.seed(",[252,94747,454],{"class":311},[252,94749,692],{"class":262},[252,94751,94752],{"class":321},"#保证每次值一样\n",[252,94754,94755,94757,94759,94761,94763,94765,94767,94769,94771,94773,94775,94777],{"class":254,"line":170},[252,94756,93444],{"class":262},[252,94758,308],{"class":258},[252,94760,93252],{"class":262},[252,94762,574],{"class":311},[252,94764,641],{"class":262},[252,94766,31636],{"class":5356},[252,94768,308],{"class":258},[252,94770,263],{"class":262},[252,94772,556],{"class":311},[252,94774,641],{"class":262},[252,94776,607],{"class":311},[252,94778,30637],{"class":262},[252,94780,94781],{"class":254,"line":1318},[252,94782,94783],{"class":321},"#原数组：\n",[252,94785,94786],{"class":254,"line":1333},[252,94787,94066],{"class":367},[252,94789,94790],{"class":254,"line":1339},[252,94791,94792],{"class":367},"array([[44, 47, 64, 67, 67,  9],\n",[252,94794,94795],{"class":254,"line":1353},[252,94796,94797],{"class":367},"       [83, 21, 36, 87, 70, 88],\n",[252,94799,94800],{"class":254,"line":1359},[252,94801,94802],{"class":367},"       [88, 12, 58, 65, 39, 87],\n",[252,94804,94805],{"class":254,"line":1450},[252,94806,94807],{"class":367},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[252,94809,94810],{"class":254,"line":1456},[252,94811,94066],{"class":367},[252,94813,94814,94817],{"class":254,"line":1468},[252,94815,94816],{"class":262},"np.sort(aa)",[252,94818,94819],{"class":321},"#每行进行了排序\n",[252,94821,94822],{"class":254,"line":1751},[252,94823,94066],{"class":367},[252,94825,94826],{"class":254,"line":1756},[252,94827,94828],{"class":367},"array([[ 9, 44, 47, 64, 67, 67],\n",[252,94830,94831],{"class":254,"line":1762},[252,94832,94833],{"class":367},"       [21, 36, 70, 83, 87, 88],\n",[252,94835,94836],{"class":254,"line":1767},[252,94837,94838],{"class":367},"       [12, 39, 58, 65, 87, 88],\n",[252,94840,94841],{"class":254,"line":1781},[252,94842,94843],{"class":367},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[252,94845,94846],{"class":254,"line":1786},[252,94847,94066],{"class":367},[252,94849,94850],{"class":254,"line":1792},[252,94851,94852],{"class":321},"#axis=0时\n",[252,94854,94855,94858,94860,94862,94864],{"class":254,"line":1813},[252,94856,94857],{"class":262},"np.sort(aa,",[252,94859,47654],{"class":5356},[252,94861,308],{"class":258},[252,94863,454],{"class":311},[252,94865,269],{"class":262},[252,94867,94868],{"class":254,"line":1818},[252,94869,94066],{"class":367},[252,94871,94872],{"class":254,"line":1832},[252,94873,94874],{"class":367},"array([[44, 12, 36, 37, 25,  9],\n",[252,94876,94877],{"class":254,"line":1837},[252,94878,94879],{"class":367},"       [46, 21, 58, 65, 39, 77],\n",[252,94881,94882],{"class":254,"line":1866},[252,94883,94884],{"class":367},"       [83, 47, 64, 67, 67, 87],\n",[252,94886,94887],{"class":254,"line":1871},[252,94888,94889],{"class":367},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[252,94891,94892],{"class":254,"line":1888},[252,94893,94066],{"class":367},[252,94895,94896],{"class":254,"line":1893},[252,94897,94898],{"class":321},"#axis=1时,为默认值\n",[252,94900,94901,94903,94905,94907,94909],{"class":254,"line":1898},[252,94902,94857],{"class":262},[252,94904,47654],{"class":5356},[252,94906,308],{"class":258},[252,94908,480],{"class":311},[252,94910,269],{"class":262},[252,94912,94913],{"class":254,"line":1903},[252,94914,94066],{"class":367},[252,94916,94917],{"class":254,"line":1917},[252,94918,94828],{"class":367},[252,94920,94921],{"class":254,"line":1922},[252,94922,94833],{"class":367},[252,94924,94925],{"class":254,"line":2716},[252,94926,94838],{"class":367},[252,94928,94929],{"class":254,"line":2730},[252,94930,94843],{"class":367},[252,94932,94933],{"class":254,"line":2738},[252,94934,94066],{"class":367},[252,94936,94937],{"class":254,"line":2743},[252,94938,94939],{"class":321},"#按最后一列排序\n",[252,94941,94942,94944,94946,94949,94951,94953],{"class":254,"line":2749},[252,94943,526],{"class":262},[252,94945,308],{"class":258},[252,94947,94948],{"class":262},"aa[:,",[252,94950,795],{"class":258},[252,94952,480],{"class":311},[252,94954,33386],{"class":262},[252,94956,94957],{"class":254,"line":2755},[252,94958,94959],{"class":321},"#获取最后一列排好序的索引\n",[252,94961,94962,94964,94966],{"class":254,"line":2760},[252,94963,74198],{"class":262},[252,94965,308],{"class":258},[252,94967,94968],{"class":262},"np.argsort(b)\n",[252,94970,94971],{"class":254,"line":8088},[252,94972,94973],{"class":262},"aa[index]\n",[252,94975,94976],{"class":254,"line":8112},[252,94977,94066],{"class":367},[252,94979,94980],{"class":254,"line":8117},[252,94981,94792],{"class":367},[252,94983,94984],{"class":254,"line":8123},[252,94985,94986],{"class":367},"       [46, 88, 81, 37, 25, 77],\n",[252,94988,94989],{"class":254,"line":8150},[252,94990,94802],{"class":367},[252,94992,94993],{"class":254,"line":8155},[252,94994,94995],{"class":367},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[252,94997,94998],{"class":254,"line":8161},[252,94999,94066],{"class":367},[5266,95001,95002],{},"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":169,"searchDepth":170,"depth":170,"links":95004},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94651,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95011,"title":95012,"body":95013,"description":178,"extension":179,"meta":95043,"navigation":181,"path":95044,"seo":95045,"stem":95046,"__hash__":95047},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95014,"toc":95041},[95015,95018,95021,95024,95027,95030,95033,95036],[10,95016,95012],{"id":95017},"_14广播机制",[19,95019,95020],{},"广播的规则：",[19,95022,95023],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95025,95026],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95028,95029],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95031,95032],{},"3.如果没有维度形状为1，则会引发异常",[19,95034,95035],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95037,95038],{},[1601,95039],{"alt":169,"src":95040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":169,"searchDepth":170,"depth":170,"links":95042},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95012,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95049,"title":95050,"body":95051,"description":178,"extension":179,"meta":95149,"navigation":181,"path":95150,"seo":95151,"stem":95152,"__hash__":95153},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95052,"toc":95147},[95053,95056,95059,95144],[10,95054,95050],{"id":95055},"_15比较掩码",[19,95057,95058],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[244,95060,95062],{"className":30518,"code":95061,"language":30520,"meta":169,"style":169},"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",[22,95063,95064,95110,95121,95135,95139],{"__ignoreMap":169},[252,95065,95066,95068,95070,95073,95075,95077,95079,95081,95083,95085,95087,95089,95091,95093,95095,95097,95099,95101,95103,95105,95107],{"class":254,"line":255},[252,95067,501],{"class":262},[252,95069,308],{"class":258},[252,95071,95072],{"class":262},"np.array([[",[252,95074,480],{"class":311},[252,95076,641],{"class":262},[252,95078,340],{"class":311},[252,95080,641],{"class":262},[252,95082,334],{"class":311},[252,95084,48170],{"class":262},[252,95086,735],{"class":311},[252,95088,641],{"class":262},[252,95090,761],{"class":311},[252,95092,641],{"class":262},[252,95094,786],{"class":311},[252,95096,48170],{"class":262},[252,95098,988],{"class":311},[252,95100,641],{"class":262},[252,95102,1013],{"class":311},[252,95104,641],{"class":262},[252,95106,1038],{"class":311},[252,95108,95109],{"class":262},"]])\n",[252,95111,95112,95114,95116,95118],{"class":254,"line":170},[252,95113,501],{"class":262},[252,95115,1173],{"class":258},[252,95117,963],{"class":311},[252,95119,95120],{"class":321},"#结果是一个由True,False组成的数组\n",[252,95122,95123,95126,95128,95130,95132],{"class":254,"line":1318},[252,95124,95125],{"class":262},"a[a",[252,95127,1173],{"class":258},[252,95129,963],{"class":311},[252,95131,1203],{"class":262},[252,95133,95134],{"class":321},"#小于20的元素会存到这个数组中\n",[252,95136,95137],{"class":254,"line":1333},[252,95138,93702],{"class":321},[252,95140,95141],{"class":254,"line":1339},[252,95142,95143],{"class":321},"#array([ 1,  2,  3, 11, 12, 13])\n",[5266,95145,95146],{},"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":169,"searchDepth":170,"depth":170,"links":95148},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95050,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95155,"title":95156,"body":95157,"description":178,"extension":179,"meta":95249,"navigation":181,"path":95250,"seo":95251,"stem":95252,"__hash__":95253},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95158,"toc":95247},[95159,95162,95165,95168,95171,95174,95239,95244],[10,95160,95156],{"id":95161},"_16魔法命令time",[19,95163,95164],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95166,95167],{},"%:行模式",[19,95169,95170],{},"%%:单元格模式",[19,95172,95173],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[244,95175,95177],{"className":30518,"code":95176,"language":30520,"meta":169,"style":169},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[22,95178,95179,95184,95191,95196,95205,95218,95222,95230],{"__ignoreMap":169},[252,95180,95181],{"class":254,"line":255},[252,95182,95183],{"class":321},"#程序执行时间\n",[252,95185,95186,95188],{"class":254,"line":170},[252,95187,30532],{"class":258},[252,95189,95190],{"class":262}," time \n",[252,95192,95193],{"class":254,"line":1318},[252,95194,95195],{"class":321},"#获取时间\n",[252,95197,95198,95201,95203],{"class":254,"line":1333},[252,95199,95200],{"class":262},"start",[252,95202,308],{"class":258},[252,95204,32558],{"class":262},[252,95206,95207,95210,95213,95215],{"class":254,"line":1339},[252,95208,95209],{"class":262},"time.sleep(",[252,95211,95212],{"class":311},"0.4",[252,95214,692],{"class":262},[252,95216,95217],{"class":321},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[252,95219,95220],{"class":254,"line":1353},[252,95221,95195],{"class":321},[252,95223,95224,95226,95228],{"class":254,"line":1359},[252,95225,45941],{"class":262},[252,95227,308],{"class":258},[252,95229,32558],{"class":262},[252,95231,95232,95234,95236],{"class":254,"line":1450},[252,95233,45941],{"class":262},[252,95235,795],{"class":258},[252,95237,95238],{"class":262},"start\n",[19,95240,95241],{},[1601,95242],{"alt":169,"src":95243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5266,95245,95246],{},"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":169,"searchDepth":170,"depth":170,"links":95248},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95156,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95255,"title":95256,"body":95257,"description":178,"extension":179,"meta":95292,"navigation":181,"path":95293,"seo":95294,"stem":95295,"__hash__":95296},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95258,"toc":95290},[95259,95262,95265,95268,95271,95274,95277,95280,95285],[10,95260,95256],{"id":95261},"_17魔法命令timeit",[19,95263,95264],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95266,95267],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95269,95270],{},"单元格模式：",[19,95272,95273],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95275,95276],{},"初始化语句执行次数由轮数来决定",[19,95278,95279],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95281,95282],{},[1601,95283],{"alt":169,"src":95284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95286,95287],{},[1601,95288],{"alt":169,"src":95289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":169,"searchDepth":170,"depth":170,"links":95291},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95256,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95298,"title":95299,"body":95300,"description":178,"extension":179,"meta":95318,"navigation":181,"path":95319,"seo":95320,"stem":95321,"__hash__":95322},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95301,"toc":95316},[95302,95305,95308,95311],[10,95303,95299],{"id":95304},"_18魔法命令writefile和run",[19,95306,95307],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95309,95310],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95312,95313],{},[1601,95314],{"alt":169,"src":95315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":169,"searchDepth":170,"depth":170,"links":95317},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95299,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95324,"title":95325,"body":95326,"description":178,"extension":179,"meta":95379,"navigation":181,"path":95380,"seo":95381,"stem":95382,"__hash__":95383},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95327,"toc":95377},[95328,95331,95334,95336,95339,95342,95347,95350,95353,95356,95359,95362,95365,95368,95371,95374],[10,95329,95325],{"id":95330},"_19魔法命令memit",[19,95332,95333],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95335,24739],{},[19,95337,95338],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95340,95341],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95343,95344],{},[1601,95345],{"alt":169,"src":95346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95348,95349],{},"补充：",[19,95351,95352],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95354,95355],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95357,95358],{},"解决方法：",[19,95360,95361],{},"1.cmd",[19,95363,95364],{},"2.依次输入以下代码：",[19,95366,95367],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95369,95370],{},"pip install --upgrade ipython",[19,95372,95373],{},"#升级 memory_profiler 和 setuptools",[19,95375,95376],{},"pip install --upgrade memory_profiler setuptools",{"title":169,"searchDepth":170,"depth":170,"links":95378},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95325,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95385,"title":95386,"body":95387,"description":178,"extension":179,"meta":97033,"navigation":181,"path":97034,"seo":97035,"stem":97036,"__hash__":97037},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95388,"toc":97003},[95389,95392,95396,95400,95461,95464,95469,95473,95478,95483,95488,95493,95496,95501,95505,95509,95542,95545,95548,95551,95603,95606,95642,95645,95687,95691,95712,95714,95751,95753,95758,95760,95765,95769,95772,95800,95804,95808,95861,95865,95957,95961,95965,95968,95973,95977,96002,96007,96011,96014,96017,96020,96023,96026,96029,96032,96044,96048,96052,96055,96087,96090,96113,96116,96142,96145,96171,96174,96208,96211,96273,96277,96280,96284,96287,96313,96316,96319,96324,96327,96396,96398,96403,96464,96467,96478,96484,96489,96493,96496,96509,96513,96528,96530,96553,96555,96581,96584,96587,96590,96638,96640,96645,96649,96653,96680,96684,96711,96714,96719,96724,96814,96818,96876,96881,96884,96887,96929,96933,96989,96994,96997,97000],[10,95390,95386],{"id":95391},"_2创建数组",[14,95393,95395],{"id":95394},"_21-array函数创建数组","2.1 array()函数创建数组",[224,95397,95399],{"id":95398},"_221-函数语句","2.2.1 函数语句",[244,95401,95403],{"className":30518,"code":95402,"language":30520,"meta":169,"style":169},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[22,95404,95405],{"__ignoreMap":169},[252,95406,95407,95410,95413,95415,95417,95419,95421,95423,95426,95428,95431,95433,95436,95438,95440,95442,95445,95447,95450,95452,95455,95457,95459],{"class":254,"line":255},[252,95408,95409],{"class":262},"numpy.array(",[252,95411,95412],{"class":311},"object",[252,95414,12575],{"class":262},[252,95416,93638],{"class":5356},[252,95418,13704],{"class":258},[252,95420,39073],{"class":311},[252,95422,12575],{"class":262},[252,95424,95425],{"class":5356},"copy",[252,95427,13704],{"class":258},[252,95429,95430],{"class":311}," True",[252,95432,12575],{"class":262},[252,95434,95435],{"class":5356},"order",[252,95437,13704],{"class":258},[252,95439,39073],{"class":311},[252,95441,12575],{"class":262},[252,95443,95444],{"class":5356},"subok",[252,95446,13704],{"class":258},[252,95448,95449],{"class":311}," False",[252,95451,12575],{"class":262},[252,95453,95454],{"class":5356},"ndmin",[252,95456,13704],{"class":258},[252,95458,4232],{"class":311},[252,95460,269],{"class":262},[19,95462,95463],{},"参数：",[19,95465,95466],{},[1601,95467],{"alt":169,"src":95468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[224,95470,95472],{"id":95471},"_222-实例","2.2.2 实例",[19,95474,95475],{},[1601,95476],{"alt":169,"src":95477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95479,95480],{},[1601,95481],{"alt":169,"src":95482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95484,95485],{},[1601,95486],{"alt":169,"src":95487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95489,95490],{},[1601,95491],{"alt":169,"src":95492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95494,95495],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95497,95498],{},[1601,95499],{"alt":169,"src":95500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95502,95504],{"id":95503},"_22-随机数创建数组","2.2 随机数创建数组",[224,95506,95508],{"id":95507},"_221-random语句","2.2.1 random语句",[244,95510,95512],{"className":30518,"code":95511,"language":30520,"meta":169,"style":169},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[22,95513,95514,95519,95524,95532,95537],{"__ignoreMap":169},[252,95515,95516],{"class":254,"line":255},[252,95517,95518],{"class":321},"#random.random()\n",[252,95520,95521],{"class":254,"line":170},[252,95522,95523],{"class":321},"#确定随机种子,就是每次运行结果是相同的\n",[252,95525,95526,95528,95530],{"class":254,"line":1318},[252,95527,94745],{"class":262},[252,95529,454],{"class":311},[252,95531,269],{"class":262},[252,95533,95534],{"class":254,"line":1333},[252,95535,95536],{"class":262},"np.random.random()\n",[252,95538,95539],{"class":254,"line":1339},[252,95540,95541],{"class":321},"#生成一个随机的数目\n",[19,95543,95544],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95546,95547],{},"可以指定数组形状 size",[19,95549,95550],{},"①生成一维数组",[244,95552,95554],{"className":30518,"code":95553,"language":30520,"meta":169,"style":169},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[22,95555,95556,95561,95574,95579,95595],{"__ignoreMap":169},[252,95557,95558],{"class":254,"line":255},[252,95559,95560],{"class":321},"#random.random(size())\n",[252,95562,95563,95566,95568,95570,95572],{"class":254,"line":170},[252,95564,95565],{"class":262},"np.random.random(",[252,95567,31636],{"class":5356},[252,95569,308],{"class":258},[252,95571,582],{"class":311},[252,95573,269],{"class":262},[252,95575,95576],{"class":254,"line":1318},[252,95577,95578],{"class":321},"#生成一位的五个元素\n",[252,95580,95581,95583,95585,95587,95589,95591,95593],{"class":254,"line":1333},[252,95582,501],{"class":262},[252,95584,308],{"class":258},[252,95586,95565],{"class":262},[252,95588,31636],{"class":5356},[252,95590,308],{"class":258},[252,95592,556],{"class":311},[252,95594,269],{"class":262},[252,95596,95597,95600],{"class":254,"line":1339},[252,95598,95599],{"class":262},"a.shape ",[252,95601,95602],{"class":321},"#输出数组形状\n",[19,95604,95605],{},"②生成二维数组",[244,95607,95609],{"className":30518,"code":95608,"language":30520,"meta":169,"style":169},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[22,95610,95611,95615,95637],{"__ignoreMap":169},[252,95612,95613],{"class":254,"line":255},[252,95614,93439],{"class":321},[252,95616,95617,95619,95621,95623,95625,95627,95629,95631,95633,95635],{"class":254,"line":170},[252,95618,93444],{"class":262},[252,95620,308],{"class":258},[252,95622,95565],{"class":262},[252,95624,31636],{"class":5356},[252,95626,308],{"class":258},[252,95628,263],{"class":262},[252,95630,556],{"class":311},[252,95632,641],{"class":262},[252,95634,582],{"class":311},[252,95636,30637],{"class":262},[252,95638,95639],{"class":254,"line":1318},[252,95640,95641],{"class":321},"#生成四行五列的数组\n",[19,95643,95644],{},"③生成三维数组",[244,95646,95648],{"className":30518,"code":95647,"language":30520,"meta":169,"style":169},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[22,95649,95650,95655,95682],{"__ignoreMap":169},[252,95651,95652],{"class":254,"line":255},[252,95653,95654],{"class":321},"#三维数组\n",[252,95656,95657,95660,95662,95664,95666,95668,95670,95672,95674,95676,95678,95680],{"class":254,"line":170},[252,95658,95659],{"class":262},"aaa",[252,95661,308],{"class":258},[252,95663,95565],{"class":262},[252,95665,31636],{"class":5356},[252,95667,308],{"class":258},[252,95669,263],{"class":262},[252,95671,340],{"class":311},[252,95673,641],{"class":262},[252,95675,334],{"class":311},[252,95677,641],{"class":262},[252,95679,556],{"class":311},[252,95681,30637],{"class":262},[252,95683,95684],{"class":254,"line":1318},[252,95685,95686],{"class":262},"aaa.shape\n",[224,95688,95690],{"id":95689},"_222-randint语句","2.2.2 randint语句",[244,95692,95694],{"className":30518,"code":95693,"language":30520,"meta":169,"style":169},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[22,95695,95696,95701],{"__ignoreMap":169},[252,95697,95698],{"class":254,"line":255},[252,95699,95700],{"class":321},"#生成随机的整数 random.randint(low,high,size)\n",[252,95702,95703,95705,95707,95709],{"class":254,"line":170},[252,95704,93252],{"class":262},[252,95706,582],{"class":311},[252,95708,13854],{"class":262},[252,95710,95711],{"class":321},"#0~5中的随机一个数\n",[19,95713,95550],{},[244,95715,95717],{"className":30518,"code":95716,"language":30520,"meta":169,"style":169},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[22,95718,95719,95724,95746],{"__ignoreMap":169},[252,95720,95721],{"class":254,"line":255},[252,95722,95723],{"class":321},"#一维\n",[252,95725,95726,95728,95730,95732,95734,95736,95738,95740,95742,95744],{"class":254,"line":170},[252,95727,93252],{"class":262},[252,95729,480],{"class":311},[252,95731,641],{"class":262},[252,95733,735],{"class":311},[252,95735,641],{"class":262},[252,95737,31636],{"class":5356},[252,95739,308],{"class":258},[252,95741,263],{"class":262},[252,95743,709],{"class":311},[252,95745,30637],{"class":262},[252,95747,95748],{"class":254,"line":1318},[252,95749,95750],{"class":321},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95752,95605],{},[19,95754,95755],{},[1601,95756],{"alt":169,"src":95757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,95759,95644],{},[19,95761,95762],{},[1601,95763],{"alt":169,"src":95764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[224,95766,95768],{"id":95767},"_222-rand语句","2.2.2 rand语句",[19,95770,95771],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[244,95773,95775],{"className":30518,"code":95774,"language":30520,"meta":169,"style":169},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[22,95776,95777,95790,95795],{"__ignoreMap":169},[252,95778,95779,95782,95784,95786,95788],{"class":254,"line":255},[252,95780,95781],{"class":262},"np.random.rand(",[252,95783,574],{"class":311},[252,95785,641],{"class":262},[252,95787,709],{"class":311},[252,95789,269],{"class":262},[252,95791,95792],{"class":254,"line":170},[252,95793,95794],{"class":321},"#第一个参数100：行数，表示有100个样本\n",[252,95796,95797],{"class":254,"line":1318},[252,95798,95799],{"class":321},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95801,95803],{"id":95802},"_23-arange创建数组","2.3 arange()创建数组",[224,95805,95807],{"id":95806},"_231-函数语句","2.3.1 函数语句",[244,95809,95811],{"className":30518,"code":95810,"language":30520,"meta":169,"style":169},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[22,95812,95813,95827,95832,95837,95842,95847,95852,95857],{"__ignoreMap":169},[252,95814,95815,95818,95820,95822,95825],{"class":254,"line":255},[252,95816,95817],{"class":262},"numpy.arange([start,] stop[, step], ",[252,95819,93638],{"class":5356},[252,95821,308],{"class":258},[252,95823,95824],{"class":311},"None",[252,95826,269],{"class":262},[252,95828,95829],{"class":254,"line":170},[252,95830,95831],{"class":321},"#参数\n",[252,95833,95834],{"class":254,"line":1318},[252,95835,95836],{"class":367},"\"\"\"\n",[252,95838,95839],{"class":254,"line":1333},[252,95840,95841],{"class":367},"start:起始值，可选，默认从 0 开始。\n",[252,95843,95844],{"class":254,"line":1339},[252,95845,95846],{"class":367},"stop:结束值（不包含该值）。\n",[252,95848,95849],{"class":254,"line":1353},[252,95850,95851],{"class":367},"step:步长，可选，默认是 1。可以为浮点数。\n",[252,95853,95854],{"class":254,"line":1359},[252,95855,95856],{"class":367},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[252,95858,95859],{"class":254,"line":1450},[252,95860,95836],{"class":367},[224,95862,95864],{"id":95863},"_232-实例","2.3.2 实例",[244,95866,95868],{"className":30518,"code":95867,"language":30520,"meta":169,"style":169},"#创建一维数组\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",[22,95869,95870,95874,95898,95903,95908,95912,95935,95939,95943,95948,95953],{"__ignoreMap":169},[252,95871,95872],{"class":254,"line":255},[252,95873,93243],{"class":321},[252,95875,95876,95878,95880,95882,95884,95886,95888,95890,95892,95894,95896],{"class":254,"line":170},[252,95877,93140],{"class":262},[252,95879,480],{"class":311},[252,95881,641],{"class":262},[252,95883,988],{"class":311},[252,95885,641],{"class":262},[252,95887,480],{"class":311},[252,95889,641],{"class":262},[252,95891,93638],{"class":5356},[252,95893,308],{"class":258},[252,95895,266],{"class":311},[252,95897,269],{"class":262},[252,95899,95900],{"class":254,"line":1318},[252,95901,95902],{"class":321},"#输出结果：\n",[252,95904,95905],{"class":254,"line":1333},[252,95906,95907],{"class":321},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[252,95909,95910],{"class":254,"line":1339},[252,95911,94085],{"class":321},[252,95913,95914,95917,95919,95921,95923,95926,95928,95930,95932],{"class":254,"line":1353},[252,95915,95916],{"class":262},"np.array([np.arange(",[252,95918,480],{"class":311},[252,95920,641],{"class":262},[252,95922,556],{"class":311},[252,95924,95925],{"class":262},"),np.arange(",[252,95927,556],{"class":311},[252,95929,641],{"class":262},[252,95931,632],{"class":311},[252,95933,95934],{"class":262},")])\n",[252,95936,95937],{"class":254,"line":1359},[252,95938,93702],{"class":321},[252,95940,95941],{"class":254,"line":1450},[252,95942,95836],{"class":367},[252,95944,95945],{"class":254,"line":1456},[252,95946,95947],{"class":367},"array([[1, 2, 3],\n",[252,95949,95950],{"class":254,"line":1468},[252,95951,95952],{"class":367},"       [4, 5, 6]])\n",[252,95954,95955],{"class":254,"line":1751},[252,95956,95836],{"class":367},[14,95958,95960],{"id":95959},"_24-生态分布","2.4 生态分布",[224,95962,95964],{"id":95963},"_241-标准正态分布","2.4.1 标准正态分布",[19,95966,95967],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,95969,95970],{},[1601,95971],{"alt":169,"src":95972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[224,95974,95976],{"id":95975},"_242-常规正态分布","2.4.2 常规正态分布",[244,95978,95980],{"className":30518,"code":95979,"language":30520,"meta":169,"style":169},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[22,95981,95982,95987,95992,95997],{"__ignoreMap":169},[252,95983,95984],{"class":254,"line":255},[252,95985,95986],{"class":262},"random.normal(loc,scale,size)也可以生成正态分布\n",[252,95988,95989],{"class":254,"line":170},[252,95990,95991],{"class":321},"#loc:期望\n",[252,95993,95994],{"class":254,"line":1318},[252,95995,95996],{"class":321},"#scale:方差\n",[252,95998,95999],{"class":254,"line":1333},[252,96000,96001],{"class":321},"#size:用于确定是几维的数列\n",[19,96003,96004],{},[1601,96005],{"alt":169,"src":96006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96008,96010],{"id":96009},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96012,96013],{},"ndim:秩，维度个数",[19,96015,96016],{},"size:数组元素的个数",[19,96018,96019],{},"shape:数组的形状",[19,96021,96022],{},"dtype:数组元素的类型",[19,96024,96025],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96027,96028],{},"他们都是属性，通过数组.属性的形式来确定",[19,96030,96031],{},"如果需要输出多个可以通过以下方式：",[244,96033,96035],{"className":30518,"code":96034,"language":30520,"meta":169,"style":169},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[22,96036,96037],{"__ignoreMap":169},[252,96038,96039,96041],{"class":254,"line":255},[252,96040,30555],{"class":311},[252,96042,96043],{"class":262},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96045,96047],{"id":96046},"_26-其他方式创建数组","2.6 其他方式创建数组",[224,96049,96051],{"id":96050},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96053,96054],{},"①创建一维数组",[244,96056,96058],{"className":30518,"code":96057,"language":30520,"meta":169,"style":169},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[22,96059,96060,96069,96073,96078,96083],{"__ignoreMap":169},[252,96061,96062,96065,96067],{"class":254,"line":255},[252,96063,96064],{"class":262},"np.zeros(",[252,96066,709],{"class":311},[252,96068,269],{"class":262},[252,96070,96071],{"class":254,"line":170},[252,96072,95836],{"class":367},[252,96074,96075],{"class":254,"line":1318},[252,96076,96077],{"class":367},"输出结果：\n",[252,96079,96080],{"class":254,"line":1333},[252,96081,96082],{"class":367},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[252,96084,96085],{"class":254,"line":1339},[252,96086,95836],{"class":367},[19,96088,96089],{},"上方代码等价于：",[244,96091,96093],{"className":30518,"code":96092,"language":30520,"meta":169,"style":169},"np.zeros(shape=(10))#创建10个元素的0数组\n",[22,96094,96095],{"__ignoreMap":169},[252,96096,96097,96099,96102,96104,96106,96108,96110],{"class":254,"line":255},[252,96098,96064],{"class":262},[252,96100,96101],{"class":5356},"shape",[252,96103,308],{"class":258},[252,96105,263],{"class":262},[252,96107,709],{"class":311},[252,96109,82909],{"class":262},[252,96111,96112],{"class":321},"#创建10个元素的0数组\n",[19,96114,96115],{},"也可以指定类型",[244,96117,96119],{"className":30518,"code":96118,"language":30520,"meta":169,"style":169},"#指定类型\nnp.zeros(5,dtype=int)\n",[22,96120,96121,96126],{"__ignoreMap":169},[252,96122,96123],{"class":254,"line":255},[252,96124,96125],{"class":321},"#指定类型\n",[252,96127,96128,96130,96132,96134,96136,96138,96140],{"class":254,"line":170},[252,96129,96064],{"class":262},[252,96131,582],{"class":311},[252,96133,641],{"class":262},[252,96135,93638],{"class":5356},[252,96137,308],{"class":258},[252,96139,266],{"class":311},[252,96141,269],{"class":262},[19,96143,96144],{},"②创建二维数组",[244,96146,96148],{"className":30518,"code":96147,"language":30520,"meta":169,"style":169},"np.zeros((3,4),dtype=int)\n",[22,96149,96150],{"__ignoreMap":169},[252,96151,96152,96155,96157,96159,96161,96163,96165,96167,96169],{"class":254,"line":255},[252,96153,96154],{"class":262},"np.zeros((",[252,96156,334],{"class":311},[252,96158,641],{"class":262},[252,96160,556],{"class":311},[252,96162,42396],{"class":262},[252,96164,93638],{"class":5356},[252,96166,308],{"class":258},[252,96168,266],{"class":311},[252,96170,269],{"class":262},[19,96172,96173],{},"③创建三维数组",[244,96175,96177],{"className":30518,"code":96176,"language":30520,"meta":169,"style":169},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[22,96178,96179,96184],{"__ignoreMap":169},[252,96180,96181],{"class":254,"line":255},[252,96182,96183],{"class":321},"#创建三维数组\n",[252,96185,96186,96188,96190,96192,96194,96196,96198,96200,96202,96204,96206],{"class":254,"line":170},[252,96187,96154],{"class":262},[252,96189,334],{"class":311},[252,96191,641],{"class":262},[252,96193,556],{"class":311},[252,96195,641],{"class":262},[252,96197,582],{"class":311},[252,96199,42396],{"class":262},[252,96201,93638],{"class":5356},[252,96203,308],{"class":258},[252,96205,266],{"class":311},[252,96207,269],{"class":262},[19,96209,96210],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[244,96212,96214],{"className":30518,"code":96213,"language":30520,"meta":169,"style":169},"#使用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",[22,96215,96216,96221,96236,96241,96246,96268],{"__ignoreMap":169},[252,96217,96218],{"class":254,"line":255},[252,96219,96220],{"class":321},"#使用zeros_like将创建的一维数组变成全0的数组\n",[252,96222,96223,96225,96227,96229,96231,96233],{"class":254,"line":170},[252,96224,501],{"class":262},[252,96226,308],{"class":258},[252,96228,93140],{"class":262},[252,96230,556],{"class":311},[252,96232,692],{"class":262},[252,96234,96235],{"class":321},"#这个得到的结果：一维数组0，1，2，3\n",[252,96237,96238],{"class":254,"line":1318},[252,96239,96240],{"class":262},"np.zeros_like(a)\n",[252,96242,96243],{"class":254,"line":1333},[252,96244,96245],{"class":321},"#使用zeros_like将创建的二维数组变成全0的数组\n",[252,96247,96248,96250,96252,96254,96256,96258,96260,96262,96264,96266],{"class":254,"line":1339},[252,96249,93444],{"class":262},[252,96251,308],{"class":258},[252,96253,95565],{"class":262},[252,96255,31636],{"class":5356},[252,96257,308],{"class":258},[252,96259,263],{"class":262},[252,96261,556],{"class":311},[252,96263,641],{"class":262},[252,96265,582],{"class":311},[252,96267,30637],{"class":262},[252,96269,96270],{"class":254,"line":1353},[252,96271,96272],{"class":262},"np.zeros_like(aa)\n",[224,96274,96276],{"id":96275},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96278,96279],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[224,96281,96283],{"id":96282},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96285,96286],{},"①empty()用法",[244,96288,96290],{"className":30518,"code":96289,"language":30520,"meta":169,"style":169},"numpy.empty(shape,dtype=float,order='c')\n",[22,96291,96292],{"__ignoreMap":169},[252,96293,96294,96297,96299,96301,96303,96305,96307,96309,96311],{"class":254,"line":255},[252,96295,96296],{"class":262},"numpy.empty(shape,",[252,96298,93638],{"class":5356},[252,96300,308],{"class":258},[252,96302,302],{"class":311},[252,96304,641],{"class":262},[252,96306,95435],{"class":5356},[252,96308,308],{"class":258},[252,96310,76168],{"class":367},[252,96312,269],{"class":262},[19,96314,96315],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96317,96318],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96320,96321],{},[1601,96322],{"alt":169,"src":96323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96325,96326],{},"②empty()用法",[244,96328,96330],{"className":30518,"code":96329,"language":30520,"meta":169,"style":169},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[22,96331,96332,96353,96365,96386,96391],{"__ignoreMap":169},[252,96333,96334,96336,96338,96341,96343,96345,96347,96349,96351],{"class":254,"line":255},[252,96335,1108],{"class":262},[252,96337,308],{"class":258},[252,96339,96340],{"class":262},"np.empty(",[252,96342,709],{"class":311},[252,96344,641],{"class":262},[252,96346,93638],{"class":5356},[252,96348,308],{"class":258},[252,96350,266],{"class":311},[252,96352,269],{"class":262},[252,96354,96355,96357,96359,96361,96363],{"class":254,"line":170},[252,96356,1083],{"class":262},[252,96358,308],{"class":258},[252,96360,93140],{"class":262},[252,96362,582],{"class":311},[252,96364,269],{"class":262},[252,96366,96367,96370,96372,96375,96377,96379,96382,96384],{"class":254,"line":1318},[252,96368,96369],{"class":262},"np.add(",[252,96371,340],{"class":311},[252,96373,96374],{"class":262},",x,",[252,96376,93192],{"class":5356},[252,96378,308],{"class":258},[252,96380,96381],{"class":262},"y[:",[252,96383,582],{"class":311},[252,96385,4796],{"class":262},[252,96387,96388],{"class":254,"line":1333},[252,96389,96390],{"class":321},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[252,96392,96393],{"class":254,"line":1339},[252,96394,96395],{"class":262},"y\n",[19,96397,11654],{},[19,96399,96400],{},[1601,96401],{"alt":169,"src":96402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[244,96404,96406],{"className":30518,"code":96405,"language":30520,"meta":169,"style":169},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[22,96407,96408,96424,96444,96459],{"__ignoreMap":169},[252,96409,96410,96412,96414,96416,96418,96420,96422],{"class":254,"line":255},[252,96411,1083],{"class":262},[252,96413,308],{"class":258},[252,96415,93140],{"class":262},[252,96417,480],{"class":311},[252,96419,641],{"class":262},[252,96421,607],{"class":311},[252,96423,269],{"class":262},[252,96425,96426,96428,96430,96432,96434,96436,96438,96440,96442],{"class":254,"line":170},[252,96427,1108],{"class":262},[252,96429,308],{"class":258},[252,96431,96340],{"class":262},[252,96433,582],{"class":311},[252,96435,641],{"class":262},[252,96437,93638],{"class":5356},[252,96439,308],{"class":258},[252,96441,266],{"class":311},[252,96443,269],{"class":262},[252,96445,96446,96449,96451,96453,96455,96457],{"class":254,"line":1318},[252,96447,96448],{"class":262},"np.add(x,",[252,96450,340],{"class":311},[252,96452,641],{"class":262},[252,96454,93192],{"class":5356},[252,96456,308],{"class":258},[252,96458,93587],{"class":262},[252,96460,96461],{"class":254,"line":1333},[252,96462,96463],{"class":321},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96465,96466],{},"③empty_like()",[19,96468,96469],{},[412,96470,96471,96472,96477],{},"创建一个",[412,96473,96474],{},[412,96475,96476],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96479,96480,96483],{},[22,96481,96482],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96485,96486],{},[1601,96487],{"alt":169,"src":96488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[224,96490,96492],{"id":96491},"_264-用法","2.6.4 ？？用法",[19,96494,96495],{},"当想查看一个函数的参数时，可以通过？？来实现",[244,96497,96499],{"className":30518,"code":96498,"language":30520,"meta":169,"style":169},"np.full??\n",[22,96500,96501],{"__ignoreMap":169},[252,96502,96503,96506],{"class":254,"line":255},[252,96504,96505],{"class":262},"np.full",[252,96507,96508],{"class":77542},"??\n",[224,96510,96512],{"id":96511},"_265-full创建数组","2.6.5 full()创建数组",[244,96514,96516],{"className":30518,"code":96515,"language":30520,"meta":169,"style":169},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[22,96517,96518,96523],{"__ignoreMap":169},[252,96519,96520],{"class":254,"line":255},[252,96521,96522],{"class":262},"full(shape,fill_value)\n",[252,96524,96525],{"class":254,"line":170},[252,96526,96527],{"class":262},"创建全为某个指定值的数组\n",[19,96529,94668],{},[244,96531,96533],{"className":30518,"code":96532,"language":30520,"meta":169,"style":169},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[22,96534,96535,96540],{"__ignoreMap":169},[252,96536,96537],{"class":254,"line":255},[252,96538,96539],{"class":321},"#创建一个一维数组,以20进行填充\n",[252,96541,96542,96545,96547,96549,96551],{"class":254,"line":170},[252,96543,96544],{"class":262},"np.full(",[252,96546,709],{"class":311},[252,96548,641],{"class":262},[252,96550,963],{"class":311},[252,96552,269],{"class":262},[19,96554,93429],{},[244,96556,96558],{"className":30518,"code":96557,"language":30520,"meta":169,"style":169},"#创建二维数组\nnp.full((3,5),11)\n",[22,96559,96560,96564],{"__ignoreMap":169},[252,96561,96562],{"class":254,"line":255},[252,96563,94085],{"class":321},[252,96565,96566,96569,96571,96573,96575,96577,96579],{"class":254,"line":170},[252,96567,96568],{"class":262},"np.full((",[252,96570,334],{"class":311},[252,96572,641],{"class":262},[252,96574,582],{"class":311},[252,96576,42396],{"class":262},[252,96578,735],{"class":311},[252,96580,269],{"class":262},[19,96582,96583],{},"③full_like用法",[19,96585,96586],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96588,96589],{},"这里是指定填充而已",[244,96591,96593],{"className":30518,"code":96592,"language":30520,"meta":169,"style":169},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[22,96594,96595,96600,96624,96629],{"__ignoreMap":169},[252,96596,96597],{"class":254,"line":255},[252,96598,96599],{"class":321},"#创建一个指定形状数组\n",[252,96601,96602,96604,96606,96608,96610,96612,96614,96616,96618,96620,96622],{"class":254,"line":170},[252,96603,501],{"class":262},[252,96605,308],{"class":258},[252,96607,93140],{"class":262},[252,96609,480],{"class":311},[252,96611,641],{"class":262},[252,96613,588],{"class":311},[252,96615,93145],{"class":262},[252,96617,556],{"class":311},[252,96619,641],{"class":262},[252,96621,683],{"class":311},[252,96623,269],{"class":262},[252,96625,96626],{"class":254,"line":1318},[252,96627,96628],{"class":321},"#进行指定填充\n",[252,96630,96631,96634,96636],{"class":254,"line":1333},[252,96632,96633],{"class":262},"np.full_like(a,",[252,96635,709],{"class":311},[252,96637,269],{"class":262},[19,96639,11654],{},[19,96641,96642],{},[1601,96643],{"alt":169,"src":96644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[224,96646,96648],{"id":96647},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22137,96650,96652],{"id":96651},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[244,96654,96656],{"className":30518,"code":96655,"language":30520,"meta":169,"style":169},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22,96657,96658,96675],{"__ignoreMap":169},[252,96659,96660,96663,96665,96667,96669,96671,96673],{"class":254,"line":255},[252,96661,96662],{"class":262},"np.eye(",[252,96664,556],{"class":311},[252,96666,641],{"class":262},[252,96668,93638],{"class":5356},[252,96670,308],{"class":258},[252,96672,266],{"class":311},[252,96674,269],{"class":262},[252,96676,96677],{"class":254,"line":170},[252,96678,96679],{"class":321},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22137,96681,96683],{"id":96682},"_2662-法2identity","2.6.6.2 法2：identity()",[244,96685,96687],{"className":30518,"code":96686,"language":30520,"meta":169,"style":169},"#identity()\nnp.identity(5,dtype=int)\n",[22,96688,96689,96694],{"__ignoreMap":169},[252,96690,96691],{"class":254,"line":255},[252,96692,96693],{"class":321},"#identity()\n",[252,96695,96696,96699,96701,96703,96705,96707,96709],{"class":254,"line":170},[252,96697,96698],{"class":262},"np.identity(",[252,96700,582],{"class":311},[252,96702,641],{"class":262},[252,96704,93638],{"class":5356},[252,96706,308],{"class":258},[252,96708,266],{"class":311},[252,96710,269],{"class":262},[19,96712,96713],{},"两个函数是有区别的",[19,96715,96716],{},[1601,96717],{"alt":169,"src":96718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96720,96721],{},[1601,96722],{"alt":169,"src":96723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[244,96725,96727],{"className":30518,"code":96726,"language":30520,"meta":169,"style":169},"# 创建一个 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",[22,96728,96729,96734,96746,96751,96756,96761,96766,96770,96775,96795,96799,96804,96809],{"__ignoreMap":169},[252,96730,96731],{"class":254,"line":255},[252,96732,96733],{"class":321},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[252,96735,96736,96738,96740,96742,96744],{"class":254,"line":170},[252,96737,96662],{"class":262},[252,96739,334],{"class":311},[252,96741,12575],{"class":262},[252,96743,556],{"class":311},[252,96745,269],{"class":262},[252,96747,96748],{"class":254,"line":1318},[252,96749,96750],{"class":321},"# 输出:\n",[252,96752,96753],{"class":254,"line":1333},[252,96754,96755],{"class":321},"# [[1. 0. 0. 0.]\n",[252,96757,96758],{"class":254,"line":1339},[252,96759,96760],{"class":321},"#  [0. 1. 0. 0.]\n",[252,96762,96763],{"class":254,"line":1353},[252,96764,96765],{"class":321},"#  [0. 0. 1. 0.]]\n",[252,96767,96768],{"class":254,"line":1359},[252,96769,2539],{"emptyLinePlaceholder":181},[252,96771,96772],{"class":254,"line":1450},[252,96773,96774],{"class":321},"# 对角线向上偏移1\n",[252,96776,96777,96779,96781,96783,96785,96787,96789,96791,96793],{"class":254,"line":1456},[252,96778,96662],{"class":262},[252,96780,334],{"class":311},[252,96782,12575],{"class":262},[252,96784,556],{"class":311},[252,96786,12575],{"class":262},[252,96788,756],{"class":5356},[252,96790,308],{"class":258},[252,96792,480],{"class":311},[252,96794,269],{"class":262},[252,96796,96797],{"class":254,"line":1468},[252,96798,96750],{"class":321},[252,96800,96801],{"class":254,"line":1751},[252,96802,96803],{"class":321},"# [[0. 1. 0. 0.]\n",[252,96805,96806],{"class":254,"line":1756},[252,96807,96808],{"class":321},"#  [0. 0. 1. 0.]\n",[252,96810,96811],{"class":254,"line":1762},[252,96812,96813],{"class":321},"#  [0. 0. 0. 1.]]\n",[224,96815,96817],{"id":96816},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[244,96819,96821],{"className":30518,"code":96820,"language":30520,"meta":169,"style":169},"#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",[22,96822,96823,96828,96832,96837,96842,96847,96852,96857,96862,96867,96872],{"__ignoreMap":169},[252,96824,96825],{"class":254,"line":255},[252,96826,96827],{"class":321},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[252,96829,96830],{"class":254,"line":170},[252,96831,95836],{"class":367},[252,96833,96834],{"class":254,"line":1318},[252,96835,96836],{"class":367},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[252,96838,96839],{"class":254,"line":1333},[252,96840,96841],{"class":367},"参数介绍：\n",[252,96843,96844],{"class":254,"line":1339},[252,96845,96846],{"class":367},"start：序列的起始值\n",[252,96848,96849],{"class":254,"line":1353},[252,96850,96851],{"class":367},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[252,96853,96854],{"class":254,"line":1359},[252,96855,96856],{"class":367},"num：要生长的等步长的样本数量，默认为50\n",[252,96858,96859],{"class":254,"line":1450},[252,96860,96861],{"class":367},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[252,96863,96864],{"class":254,"line":1456},[252,96865,96866],{"class":367},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[252,96868,96869],{"class":254,"line":1468},[252,96870,96871],{"class":367},"dtype：ndarry的数据类型\n",[252,96873,96874],{"class":254,"line":1751},[252,96875,95836],{"class":367},[19,96877,96878],{},[1601,96879],{"alt":169,"src":96880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,96882,96883],{},"这里num=是可以省略的",[19,96885,96886],{},"也就是下方两行代码结果是一模一样的",[244,96888,96890],{"className":30518,"code":96889,"language":30520,"meta":169,"style":169},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[22,96891,96892,96909],{"__ignoreMap":169},[252,96893,96894,96897,96899,96901,96903,96905,96907],{"class":254,"line":255},[252,96895,96896],{"class":262},"np.linspace(",[252,96898,480],{"class":311},[252,96900,641],{"class":262},[252,96902,582],{"class":311},[252,96904,641],{"class":262},[252,96906,582],{"class":311},[252,96908,269],{"class":262},[252,96910,96911,96913,96915,96917,96919,96921,96923,96925,96927],{"class":254,"line":170},[252,96912,96896],{"class":262},[252,96914,480],{"class":311},[252,96916,641],{"class":262},[252,96918,582],{"class":311},[252,96920,641],{"class":262},[252,96922,1804],{"class":5356},[252,96924,308],{"class":258},[252,96926,582],{"class":311},[252,96928,269],{"class":262},[224,96930,96932],{"id":96931},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[244,96934,96936],{"className":30518,"code":96935,"language":30520,"meta":169,"style":169},"#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",[22,96937,96938,96943,96947,96952,96957,96962,96967,96971,96976,96981,96985],{"__ignoreMap":169},[252,96939,96940],{"class":254,"line":255},[252,96941,96942],{"class":321},"#logspace函数用于创建一个等比数列，格式如下：\n",[252,96944,96945],{"class":254,"line":170},[252,96946,95836],{"class":367},[252,96948,96949],{"class":254,"line":1318},[252,96950,96951],{"class":367},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[252,96953,96954],{"class":254,"line":1333},[252,96955,96956],{"class":367},"参数为：\n",[252,96958,96959],{"class":254,"line":1339},[252,96960,96961],{"class":367},"start:序列的起始位置为：base**start\n",[252,96963,96964],{"class":254,"line":1353},[252,96965,96966],{"class":367},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[252,96968,96969],{"class":254,"line":1359},[252,96970,96856],{"class":367},[252,96972,96973],{"class":254,"line":1450},[252,96974,96975],{"class":367},"endpoint：是否包含 stop 这个值，默认是 True\n",[252,96977,96978],{"class":254,"line":1456},[252,96979,96980],{"class":367},"base：对数的底数，默认是 10（常见对数）\n",[252,96982,96983],{"class":254,"line":1468},[252,96984,96871],{"class":367},[252,96986,96987],{"class":254,"line":1751},[252,96988,95836],{"class":367},[19,96990,96991],{},[1601,96992],{"alt":169,"src":96993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,96995,96996],{},"logspace()函数中的num参数也是可以不写num=的",[19,96998,96999],{},"endpoint是不可以省略的",[5266,97001,97002],{},"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":169,"searchDepth":170,"depth":170,"links":97004},[97005,97009,97014,97018,97022,97023],{"id":95394,"depth":170,"text":95395,"children":97006},[97007,97008],{"id":95398,"depth":1318,"text":95399},{"id":95471,"depth":1318,"text":95472},{"id":95503,"depth":170,"text":95504,"children":97010},[97011,97012,97013],{"id":95507,"depth":1318,"text":95508},{"id":95689,"depth":1318,"text":95690},{"id":95767,"depth":1318,"text":95768},{"id":95802,"depth":170,"text":95803,"children":97015},[97016,97017],{"id":95806,"depth":1318,"text":95807},{"id":95863,"depth":1318,"text":95864},{"id":95959,"depth":170,"text":95960,"children":97019},[97020,97021],{"id":95963,"depth":1318,"text":95964},{"id":95975,"depth":1318,"text":95976},{"id":96009,"depth":170,"text":96010},{"id":96046,"depth":170,"text":96047,"children":97024},[97025,97026,97027,97028,97029,97030,97031,97032],{"id":96050,"depth":1318,"text":96051},{"id":96275,"depth":1318,"text":96276},{"id":96282,"depth":1318,"text":96283},{"id":96491,"depth":1318,"text":96492},{"id":96511,"depth":1318,"text":96512},{"id":96647,"depth":1318,"text":96648},{"id":96816,"depth":1318,"text":96817},{"id":96931,"depth":1318,"text":96932},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95386,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97039,"title":97040,"body":97041,"description":178,"extension":179,"meta":97134,"navigation":181,"path":97135,"seo":97136,"stem":97137,"__hash__":97138},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97042,"toc":97132},[97043,97046,97049,97052,97055,97058,97061,97064,97067,97070,97073,97076,97078,97081,97084,97089,97092,97095,97129],[10,97044,97040],{"id":97045},"_20魔法命令mprun",[19,97047,97048],{},"逐行分析数据内存的使用情况",[19,97050,97051],{},"语法格式：",[19,97053,97054],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97056,97057],{},"分析结果列如下：",[19,97059,97060],{},"Line行号",[19,97062,97063],{},"Mem usage内存使用大小",[19,97065,97066],{},"increment内存增量",[19,97068,97069],{},"Line content代码内容",[19,97071,97072],{},"补充说明：",[19,97074,97075],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97077,95341],{},[19,97079,97080],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97082,97083],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97085,97086],{},[1601,97087],{"alt":169,"src":97088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97090,97091],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97093,97094],{},"这时候需要重新加载模块",[244,97096,97098],{"className":30518,"code":97097,"language":30520,"meta":169,"style":169},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[22,97099,97100,97105,97112,97117],{"__ignoreMap":169},[252,97101,97102],{"class":254,"line":255},[252,97103,97104],{"class":321},"#重新加载模块\n",[252,97106,97107,97109],{"class":254,"line":170},[252,97108,30532],{"class":258},[252,97110,97111],{"class":262}," importlib\n",[252,97113,97114],{"class":254,"line":1318},[252,97115,97116],{"class":262},"importlib.reload(mprun_test)\n",[252,97118,97119,97121,97124,97126],{"class":254,"line":1333},[252,97120,591],{"class":258},[252,97122,97123],{"class":262},"mprun ",[252,97125,795],{"class":258},[252,97127,97128],{"class":262},"f mprun_test.fun_test mprun_test.fun_test()\n",[5266,97130,97131],{},"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":169,"searchDepth":170,"depth":170,"links":97133},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97040,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97140,"title":97141,"body":97142,"description":178,"extension":179,"meta":97159,"navigation":181,"path":97160,"seo":97161,"stem":97162,"__hash__":97163},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97143,"toc":97157},[97144,97147,97152],[10,97145,97141],{"id":97146},"_3一维数组的索引和切片",[19,97148,97149],{},[1601,97150],{"alt":169,"src":97151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97153,97154],{},[1601,97155],{"alt":169,"src":97156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":169,"searchDepth":170,"depth":170,"links":97158},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97141,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97165,"title":97166,"body":97167,"description":178,"extension":179,"meta":97650,"navigation":181,"path":97651,"seo":97652,"stem":97653,"__hash__":97654},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97168,"toc":97648},[97169,97172,97175,97180,97213,97216,97254,97257,97291,97294,97399,97402,97439,97442,97543,97546,97597,97600,97642,97645],[10,97170,97166],{"id":97171},"_4二维数组的索引与切片",[19,97173,97174],{},"①获取指定单个元素",[19,97176,97177],{},[1601,97178],{"alt":169,"src":97179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[244,97181,97183],{"className":30518,"code":97182,"language":30520,"meta":169,"style":169},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[22,97184,97185,97190,97195,97200],{"__ignoreMap":169},[252,97186,97187],{"class":254,"line":255},[252,97188,97189],{"class":321},"#获取元素9\n",[252,97191,97192],{"class":254,"line":170},[252,97193,97194],{"class":321},"#先获取所在行，再获取所在列\n",[252,97196,97197],{"class":254,"line":1318},[252,97198,97199],{"class":321},"#数组[行索引号，列索引号]\n",[252,97201,97202,97205,97207,97209,97211],{"class":254,"line":1333},[252,97203,97204],{"class":262},"a[",[252,97206,480],{"class":311},[252,97208,641],{"class":262},[252,97210,340],{"class":311},[252,97212,33386],{"class":262},[19,97214,97215],{},"②获取整行元素",[244,97217,97219],{"className":30518,"code":97218,"language":30520,"meta":169,"style":169},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[22,97220,97221,97226,97231,97239,97244],{"__ignoreMap":169},[252,97222,97223],{"class":254,"line":255},[252,97224,97225],{"class":321},"#获取整行 数组[行索引号]\n",[252,97227,97228],{"class":254,"line":170},[252,97229,97230],{"class":321},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[252,97232,97233,97235,97237],{"class":254,"line":1318},[252,97234,97204],{"class":262},[252,97236,340],{"class":311},[252,97238,33386],{"class":262},[252,97240,97241],{"class":254,"line":1333},[252,97242,97243],{"class":321},"#也可以负索引获取一行\n",[252,97245,97246,97248,97250,97252],{"class":254,"line":1339},[252,97247,97204],{"class":262},[252,97249,795],{"class":258},[252,97251,480],{"class":311},[252,97253,33386],{"class":262},[19,97255,97256],{},"③获取整列元素",[244,97258,97260],{"className":30518,"code":97259,"language":30520,"meta":169,"style":169},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[22,97261,97262,97267,97276,97281],{"__ignoreMap":169},[252,97263,97264],{"class":254,"line":255},[252,97265,97266],{"class":321},"#获取整列 数组名[:,列索引]\n",[252,97268,97269,97272,97274],{"class":254,"line":170},[252,97270,97271],{"class":262},"a[:,",[252,97273,340],{"class":311},[252,97275,33386],{"class":262},[252,97277,97278],{"class":254,"line":1318},[252,97279,97280],{"class":321},"#也可以负索引获取一列\n",[252,97282,97283,97285,97287,97289],{"class":254,"line":1333},[252,97284,97271],{"class":262},[252,97286,795],{"class":258},[252,97288,480],{"class":311},[252,97290,33386],{"class":262},[19,97292,97293],{},"④部分行部分列的元素",[244,97295,97297],{"className":30518,"code":97296,"language":30520,"meta":169,"style":169},"#部分行部分列 数组名[行切片，列切片]\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",[22,97298,97299,97304,97314,97318,97322,97327,97332,97336,97348,97352,97356,97361,97366,97371,97376,97380,97385],{"__ignoreMap":169},[252,97300,97301],{"class":254,"line":255},[252,97302,97303],{"class":321},"#部分行部分列 数组名[行切片，列切片]\n",[252,97305,97306,97309,97311],{"class":254,"line":170},[252,97307,97308],{"class":262},"a[:",[252,97310,340],{"class":311},[252,97312,97313],{"class":262},",:]\n",[252,97315,97316],{"class":254,"line":1318},[252,97317,93702],{"class":321},[252,97319,97320],{"class":254,"line":1333},[252,97321,94066],{"class":367},[252,97323,97324],{"class":254,"line":1339},[252,97325,97326],{"class":367},"array([[ 1,  2,  3,  4,  5,  6],\n",[252,97328,97329],{"class":254,"line":1353},[252,97330,97331],{"class":367},"       [ 7,  8,  9, 10, 11, 12]])\n",[252,97333,97334],{"class":254,"line":1359},[252,97335,94066],{"class":367},[252,97337,97338,97340,97342,97344,97346],{"class":254,"line":1450},[252,97339,97271],{"class":262},[252,97341,480],{"class":311},[252,97343,1122],{"class":262},[252,97345,556],{"class":311},[252,97347,33386],{"class":262},[252,97349,97350],{"class":254,"line":1456},[252,97351,93702],{"class":321},[252,97353,97354],{"class":254,"line":1468},[252,97355,94066],{"class":367},[252,97357,97358],{"class":254,"line":1751},[252,97359,97360],{"class":367},"array([[ 2,  3,  4],\n",[252,97362,97363],{"class":254,"line":1756},[252,97364,97365],{"class":367},"       [ 8,  9, 10],\n",[252,97367,97368],{"class":254,"line":1762},[252,97369,97370],{"class":367},"       [14, 15, 16],\n",[252,97372,97373],{"class":254,"line":1767},[252,97374,97375],{"class":367},"       [20, 21, 22]])\n",[252,97377,97378],{"class":254,"line":1781},[252,97379,94066],{"class":367},[252,97381,97382],{"class":254,"line":1786},[252,97383,97384],{"class":321},"#对列行同时进行切片，使用了step参数\n",[252,97386,97387,97390,97392,97395,97397],{"class":254,"line":1792},[252,97388,97389],{"class":262},"a[::",[252,97391,340],{"class":311},[252,97393,97394],{"class":262},",::",[252,97396,340],{"class":311},[252,97398,33386],{"class":262},[19,97400,97401],{},"⑤同时获取两个元素",[244,97403,97405],{"className":30518,"code":97404,"language":30520,"meta":169,"style":169},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[22,97406,97407,97412,97417],{"__ignoreMap":169},[252,97408,97409],{"class":254,"line":255},[252,97410,97411],{"class":321},"#同时获取第三行第二列，第四行第一列\n",[252,97413,97414],{"class":254,"line":170},[252,97415,97416],{"class":321},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[252,97418,97419,97422,97424,97426,97428,97430,97432,97434,97436],{"class":254,"line":1318},[252,97420,97421],{"class":262},"a[(",[252,97423,340],{"class":311},[252,97425,641],{"class":262},[252,97427,334],{"class":311},[252,97429,42387],{"class":262},[252,97431,480],{"class":311},[252,97433,641],{"class":262},[252,97435,454],{"class":311},[252,97437,97438],{"class":262},")]\n",[19,97440,97441],{},"⑥切片，对行进行反向获取",[244,97443,97445],{"className":30518,"code":97444,"language":30520,"meta":169,"style":169},"#切片 对所有行进行反向获取\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",[22,97446,97447,97452,97462,97466,97470,97475,97480,97485,97490,97494,97499,97515,97519,97524,97529,97534,97539],{"__ignoreMap":169},[252,97448,97449],{"class":254,"line":255},[252,97450,97451],{"class":321},"#切片 对所有行进行反向获取\n",[252,97453,97454,97456,97458,97460],{"class":254,"line":170},[252,97455,97389],{"class":262},[252,97457,795],{"class":258},[252,97459,480],{"class":311},[252,97461,33386],{"class":262},[252,97463,97464],{"class":254,"line":1318},[252,97465,93702],{"class":321},[252,97467,97468],{"class":254,"line":1333},[252,97469,94066],{"class":367},[252,97471,97472],{"class":254,"line":1339},[252,97473,97474],{"class":367},"array([[19, 20, 21, 22, 23, 24],\n",[252,97476,97477],{"class":254,"line":1353},[252,97478,97479],{"class":367},"       [13, 14, 15, 16, 17, 18],\n",[252,97481,97482],{"class":254,"line":1359},[252,97483,97484],{"class":367},"       [ 7,  8,  9, 10, 11, 12],\n",[252,97486,97487],{"class":254,"line":1450},[252,97488,97489],{"class":367},"       [ 1,  2,  3,  4,  5,  6]])\n",[252,97491,97492],{"class":254,"line":1456},[252,97493,94066],{"class":367},[252,97495,97496],{"class":254,"line":1468},[252,97497,97498],{"class":321},"#对行列都进行反向切片获取\n",[252,97500,97501,97503,97505,97507,97509,97511,97513],{"class":254,"line":1751},[252,97502,97389],{"class":262},[252,97504,795],{"class":258},[252,97506,480],{"class":311},[252,97508,97394],{"class":262},[252,97510,795],{"class":258},[252,97512,480],{"class":311},[252,97514,33386],{"class":262},[252,97516,97517],{"class":254,"line":1756},[252,97518,94066],{"class":367},[252,97520,97521],{"class":254,"line":1762},[252,97522,97523],{"class":367},"array([[24, 23, 22, 21, 20, 19],\n",[252,97525,97526],{"class":254,"line":1767},[252,97527,97528],{"class":367},"       [18, 17, 16, 15, 14, 13],\n",[252,97530,97531],{"class":254,"line":1781},[252,97532,97533],{"class":367},"       [12, 11, 10,  9,  8,  7],\n",[252,97535,97536],{"class":254,"line":1786},[252,97537,97538],{"class":367},"       [ 6,  5,  4,  3,  2,  1]])\n",[252,97540,97541],{"class":254,"line":1792},[252,97542,94066],{"class":367},[19,97544,97545],{},"⑦修改元素",[244,97547,97549],{"className":30518,"code":97548,"language":30520,"meta":169,"style":169},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[22,97550,97551,97556,97574,97579],{"__ignoreMap":169},[252,97552,97553],{"class":254,"line":255},[252,97554,97555],{"class":321},"#获取前两行和前两列\n",[252,97557,97558,97561,97563,97565,97567,97570,97572],{"class":254,"line":170},[252,97559,97560],{"class":262},"sub_a",[252,97562,308],{"class":258},[252,97564,97308],{"class":262},[252,97566,340],{"class":311},[252,97568,97569],{"class":262},",:",[252,97571,340],{"class":311},[252,97573,33386],{"class":262},[252,97575,97576],{"class":254,"line":1318},[252,97577,97578],{"class":321},"#修改sub_a第一个元素的值\n",[252,97580,97581,97584,97586,97588,97590,97592,97594],{"class":254,"line":1333},[252,97582,97583],{"class":262},"sub_a[",[252,97585,454],{"class":311},[252,97587,641],{"class":262},[252,97589,454],{"class":311},[252,97591,1203],{"class":262},[252,97593,308],{"class":258},[252,97595,97596],{"class":311},"100\n",[19,97598,97599],{},"⑧数组复制copy()",[244,97601,97603],{"className":30518,"code":97602,"language":30520,"meta":169,"style":169},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[22,97604,97605,97610,97620,97625],{"__ignoreMap":169},[252,97606,97607],{"class":254,"line":255},[252,97608,97609],{"class":321},"#数组复制\n",[252,97611,97612,97615,97617],{"class":254,"line":170},[252,97613,97614],{"class":262},"copy_a",[252,97616,308],{"class":258},[252,97618,97619],{"class":262},"np.copy(sub_a)\n",[252,97621,97622],{"class":254,"line":1318},[252,97623,97624],{"class":321},"#修改copy_a后不影响原数组\n",[252,97626,97627,97630,97632,97634,97636,97638,97640],{"class":254,"line":1333},[252,97628,97629],{"class":262},"copy_a[",[252,97631,454],{"class":311},[252,97633,641],{"class":262},[252,97635,454],{"class":311},[252,97637,1203],{"class":262},[252,97639,308],{"class":258},[252,97641,97596],{"class":311},[19,97643,97644],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5266,97646,97647],{},"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":169,"searchDepth":170,"depth":170,"links":97649},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97166,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97656,"title":97657,"body":97658,"description":178,"extension":179,"meta":98150,"navigation":181,"path":98151,"seo":98152,"stem":98153,"__hash__":98154},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97659,"toc":98142},[97660,97663,97667,97670,97673,97726,97729,97754,97757,97776,97796,97799,97815,97819,97865,97869,97911,97915,97918,97921,97924,97927,97930,97992,98052,98056,98059,98116,98120,98125,98134,98139],[10,97661,97657],{"id":97662},"_5改变数组的维度",[14,97664,97666],{"id":97665},"_51-使用reshape","5.1 使用reshape()",[19,97668,97669],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97671,97672],{},"①一维数组转换为二维数组",[244,97674,97676],{"className":30518,"code":97675,"language":30520,"meta":169,"style":169},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[22,97677,97678,97694,97699,97704,97709],{"__ignoreMap":169},[252,97679,97680,97682,97684,97686,97688,97690,97692],{"class":254,"line":255},[252,97681,501],{"class":262},[252,97683,308],{"class":258},[252,97685,93140],{"class":262},[252,97687,480],{"class":311},[252,97689,641],{"class":262},[252,97691,786],{"class":311},[252,97693,269],{"class":262},[252,97695,97696],{"class":254,"line":170},[252,97697,97698],{"class":321},"#将一维数组进行转换\n",[252,97700,97701],{"class":254,"line":1318},[252,97702,97703],{"class":321},"#注意点：元素个数不可以变\n",[252,97705,97706],{"class":254,"line":1333},[252,97707,97708],{"class":321},"#转换维度要保持一致，不一致就异常！！！\n",[252,97710,97711,97713,97715,97718,97720,97722,97724],{"class":254,"line":1339},[252,97712,93444],{"class":262},[252,97714,308],{"class":258},[252,97716,97717],{"class":262},"a.reshape(",[252,97719,340],{"class":311},[252,97721,641],{"class":262},[252,97723,607],{"class":311},[252,97725,269],{"class":262},[19,97727,97728],{},"②一维数组转换为三维数组",[244,97730,97732],{"className":30518,"code":97731,"language":30520,"meta":169,"style":169},"aaa=a.reshape(2,3,2)\n",[22,97733,97734],{"__ignoreMap":169},[252,97735,97736,97738,97740,97742,97744,97746,97748,97750,97752],{"class":254,"line":255},[252,97737,95659],{"class":262},[252,97739,308],{"class":258},[252,97741,97717],{"class":262},[252,97743,340],{"class":311},[252,97745,641],{"class":262},[252,97747,334],{"class":311},[252,97749,641],{"class":262},[252,97751,340],{"class":311},[252,97753,269],{"class":262},[19,97755,97756],{},"③二维数组转化为一维数组",[244,97758,97760],{"className":30518,"code":97759,"language":30520,"meta":169,"style":169},"#知道元素个数：\naa.reshape(12)\n",[22,97761,97762,97767],{"__ignoreMap":169},[252,97763,97764],{"class":254,"line":255},[252,97765,97766],{"class":321},"#知道元素个数：\n",[252,97768,97769,97772,97774],{"class":254,"line":170},[252,97770,97771],{"class":262},"aa.reshape(",[252,97773,761],{"class":311},[252,97775,269],{"class":262},[244,97777,97779],{"className":30518,"code":97778,"language":30520,"meta":169,"style":169},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[22,97780,97781,97786],{"__ignoreMap":169},[252,97782,97783],{"class":254,"line":255},[252,97784,97785],{"class":321},"#不知道元素个数，参数传递-1\n",[252,97787,97788,97790,97792,97794],{"class":254,"line":170},[252,97789,97771],{"class":262},[252,97791,795],{"class":258},[252,97793,480],{"class":311},[252,97795,269],{"class":262},[19,97797,97798],{},"④三维数组转换为一维数组",[244,97800,97802],{"className":30518,"code":97801,"language":30520,"meta":169,"style":169},"aaa.reshape(-1)\n",[22,97803,97804],{"__ignoreMap":169},[252,97805,97806,97809,97811,97813],{"class":254,"line":255},[252,97807,97808],{"class":262},"aaa.reshape(",[252,97810,795],{"class":258},[252,97812,480],{"class":311},[252,97814,269],{"class":262},[14,97816,97818],{"id":97817},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[244,97820,97822],{"className":30518,"code":97821,"language":30520,"meta":169,"style":169},"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",[22,97823,97824,97851,97856,97860],{"__ignoreMap":169},[252,97825,97826,97828,97830,97832,97834,97836,97838,97840,97842,97844,97846,97848],{"class":254,"line":255},[252,97827,93444],{"class":262},[252,97829,308],{"class":258},[252,97831,93140],{"class":262},[252,97833,480],{"class":311},[252,97835,641],{"class":262},[252,97837,786],{"class":311},[252,97839,93145],{"class":262},[252,97841,340],{"class":311},[252,97843,641],{"class":262},[252,97845,607],{"class":311},[252,97847,692],{"class":262},[252,97849,97850],{"class":321},"#转换为2行6列的数组\n",[252,97852,97853],{"class":254,"line":170},[252,97854,97855],{"class":262},"aa.revel()\n",[252,97857,97858],{"class":254,"line":1318},[252,97859,93702],{"class":321},[252,97861,97862],{"class":254,"line":1333},[252,97863,97864],{"class":321},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,97866,97868],{"id":97867},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[244,97870,97872],{"className":30518,"code":97871,"language":30520,"meta":169,"style":169},"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",[22,97873,97874,97898,97903,97907],{"__ignoreMap":169},[252,97875,97876,97878,97880,97882,97884,97886,97888,97890,97892,97894,97896],{"class":254,"line":255},[252,97877,93444],{"class":262},[252,97879,308],{"class":258},[252,97881,93140],{"class":262},[252,97883,480],{"class":311},[252,97885,641],{"class":262},[252,97887,786],{"class":311},[252,97889,93145],{"class":262},[252,97891,340],{"class":311},[252,97893,641],{"class":262},[252,97895,607],{"class":311},[252,97897,269],{"class":262},[252,97899,97900],{"class":254,"line":170},[252,97901,97902],{"class":262},"aa.flatten()\n",[252,97904,97905],{"class":254,"line":1318},[252,97906,93702],{"class":321},[252,97908,97909],{"class":254,"line":1333},[252,97910,97864],{"class":321},[14,97912,97914],{"id":97913},"_54-使用resize","5.4 使用resize()",[19,97916,97917],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,97919,97920],{},"通过resize方法可以改变数组的维度",[19,97922,97923],{},"#resize修改数组维度",[19,97925,97926],{},"#以元组的形式指定形状",[19,97928,97929],{},"#改变的是原数组",[244,97931,97933],{"className":30518,"code":97932,"language":30520,"meta":169,"style":169},"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",[22,97934,97935,97951,97971,97984,97988],{"__ignoreMap":169},[252,97936,97937,97939,97941,97943,97945,97947,97949],{"class":254,"line":255},[252,97938,501],{"class":262},[252,97940,308],{"class":258},[252,97942,93140],{"class":262},[252,97944,480],{"class":311},[252,97946,641],{"class":262},[252,97948,786],{"class":311},[252,97950,269],{"class":262},[252,97952,97953,97956,97958,97960,97962,97964,97966,97968],{"class":254,"line":170},[252,97954,97955],{"class":262},"a.shape",[252,97957,308],{"class":258},[252,97959,263],{"class":262},[252,97961,340],{"class":311},[252,97963,641],{"class":262},[252,97965,607],{"class":311},[252,97967,692],{"class":262},[252,97969,97970],{"class":321},"#改变了原数组\n",[252,97972,97973,97975,97977,97980,97982],{"class":254,"line":1318},[252,97974,501],{"class":262},[252,97976,308],{"class":258},[252,97978,97979],{"class":262},"resize((",[252,97981,761],{"class":311},[252,97983,30637],{"class":262},[252,97985,97986],{"class":254,"line":1333},[252,97987,93702],{"class":321},[252,97989,97990],{"class":254,"line":1339},[252,97991,97864],{"class":321},[244,97993,97995],{"className":30518,"code":97994,"language":30520,"meta":169,"style":169},"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",[22,97996,97997,98010,98014,98018,98023,98028,98033,98038,98043,98048],{"__ignoreMap":169},[252,97998,97999,98002,98004,98006,98008],{"class":254,"line":255},[252,98000,98001],{"class":262},"a.resize((",[252,98003,607],{"class":311},[252,98005,641],{"class":262},[252,98007,340],{"class":311},[252,98009,30637],{"class":262},[252,98011,98012],{"class":254,"line":170},[252,98013,93702],{"class":321},[252,98015,98016],{"class":254,"line":1318},[252,98017,94066],{"class":367},[252,98019,98020],{"class":254,"line":1333},[252,98021,98022],{"class":367},"array([[ 1,  2],\n",[252,98024,98025],{"class":254,"line":1339},[252,98026,98027],{"class":367},"       [ 3,  4],\n",[252,98029,98030],{"class":254,"line":1353},[252,98031,98032],{"class":367},"       [ 5,  6],\n",[252,98034,98035],{"class":254,"line":1359},[252,98036,98037],{"class":367},"       [ 7,  8],\n",[252,98039,98040],{"class":254,"line":1450},[252,98041,98042],{"class":367},"       [ 9, 10],\n",[252,98044,98045],{"class":254,"line":1456},[252,98046,98047],{"class":367},"       [11, 12]])\n",[252,98049,98050],{"class":254,"line":1468},[252,98051,94066],{"class":367},[14,98053,98055],{"id":98054},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98057,98058],{},"改变了原数组",[244,98060,98062],{"className":30518,"code":98061,"language":30520,"meta":169,"style":169},"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",[22,98063,98064,98080,98096,98100,98104,98108,98112],{"__ignoreMap":169},[252,98065,98066,98068,98070,98072,98074,98076,98078],{"class":254,"line":255},[252,98067,501],{"class":262},[252,98069,308],{"class":258},[252,98071,93140],{"class":262},[252,98073,480],{"class":311},[252,98075,641],{"class":262},[252,98077,786],{"class":311},[252,98079,269],{"class":262},[252,98081,98082,98084,98086,98088,98090,98092,98094],{"class":254,"line":170},[252,98083,97955],{"class":262},[252,98085,308],{"class":258},[252,98087,263],{"class":262},[252,98089,340],{"class":311},[252,98091,641],{"class":262},[252,98093,607],{"class":311},[252,98095,269],{"class":262},[252,98097,98098],{"class":254,"line":1318},[252,98099,93702],{"class":321},[252,98101,98102],{"class":254,"line":1333},[252,98103,94066],{"class":367},[252,98105,98106],{"class":254,"line":1339},[252,98107,97326],{"class":367},[252,98109,98110],{"class":254,"line":1353},[252,98111,97331],{"class":367},[252,98113,98114],{"class":254,"line":1359},[252,98115,94066],{"class":367},[14,98117,98119],{"id":98118},"_56-重要比较","5.6 重要比较：",[19,98121,98122],{},[1601,98123],{"alt":169,"src":98124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98126,98127,98128,98130,98131,98133],{},"口诀：NumPy 函数要么用 ",[22,98129,96101],{},"，要么用 ",[22,98132,31636],{},"，创建结构用 shape，造数据用 size",[19,98135,98136],{},[1601,98137],{"alt":169,"src":98138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5266,98140,98141],{},"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":169,"searchDepth":170,"depth":170,"links":98143},[98144,98145,98146,98147,98148,98149],{"id":97665,"depth":170,"text":97666},{"id":97817,"depth":170,"text":97818},{"id":97867,"depth":170,"text":97868},{"id":97913,"depth":170,"text":97914},{"id":98054,"depth":170,"text":98055},{"id":98118,"depth":170,"text":98119},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97657,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98156,"title":98157,"body":98158,"description":178,"extension":179,"meta":99230,"navigation":181,"path":99231,"seo":99232,"stem":99233,"__hash__":99234},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98159,"toc":99224},[98160,98163,98167,98170,98173,98176,98241,98244,98284,98287,98369,98372,98377,98399,98401,98406,98411,98414,98417,98572,98575,98777,98781,98784,98787,98855,98857,98862,98865,98868,98948,98952,98955,98957,99030,99032,99037,99039,99119,99123,99126,99129,99132,99135,99138,99141,99221],[10,98161,98157],{"id":98162},"_6数组的拼接",[14,98164,98166],{"id":98165},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98168,98169],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98171,98172],{},"函数内部传两个数列构成的数列或者元组",[19,98174,98175],{},"①一维数组的拼接",[244,98177,98179],{"className":30518,"code":98178,"language":30520,"meta":169,"style":169},"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",[22,98180,98181,98201,98221,98226,98231,98236],{"__ignoreMap":169},[252,98182,98183,98185,98187,98189,98191,98193,98195,98197,98199],{"class":254,"line":255},[252,98184,501],{"class":262},[252,98186,308],{"class":258},[252,98188,93162],{"class":262},[252,98190,480],{"class":311},[252,98192,641],{"class":262},[252,98194,340],{"class":311},[252,98196,641],{"class":262},[252,98198,334],{"class":311},[252,98200,4796],{"class":262},[252,98202,98203,98205,98207,98209,98211,98213,98215,98217,98219],{"class":254,"line":170},[252,98204,526],{"class":262},[252,98206,308],{"class":258},[252,98208,93162],{"class":262},[252,98210,556],{"class":311},[252,98212,641],{"class":262},[252,98214,582],{"class":311},[252,98216,641],{"class":262},[252,98218,607],{"class":311},[252,98220,4796],{"class":262},[252,98222,98223],{"class":254,"line":1318},[252,98224,98225],{"class":321},"#调用concatenate进行数组拼接\n",[252,98227,98228],{"class":254,"line":1333},[252,98229,98230],{"class":262},"np.concatenate((a,b))\n",[252,98232,98233],{"class":254,"line":1339},[252,98234,98235],{"class":321},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[252,98237,98238],{"class":254,"line":1353},[252,98239,98240],{"class":321},"#np.concatenate([a,b])\n",[19,98242,98243],{},"②一维多个数组拼接",[244,98245,98247],{"className":30518,"code":98246,"language":30520,"meta":169,"style":169},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[22,98248,98249,98254,98274,98279],{"__ignoreMap":169},[252,98250,98251],{"class":254,"line":255},[252,98252,98253],{"class":321},"#也可以多个数组进行拼接\n",[252,98255,98256,98258,98260,98262,98264,98266,98268,98270,98272],{"class":254,"line":170},[252,98257,551],{"class":262},[252,98259,308],{"class":258},[252,98261,93162],{"class":262},[252,98263,709],{"class":311},[252,98265,641],{"class":262},[252,98267,735],{"class":311},[252,98269,641],{"class":262},[252,98271,786],{"class":311},[252,98273,4796],{"class":262},[252,98275,98276],{"class":254,"line":1318},[252,98277,98278],{"class":262},"c\n",[252,98280,98281],{"class":254,"line":1333},[252,98282,98283],{"class":262},"np.concatenate((a,b,c))\n",[19,98285,98286],{},"③二维数组拼接",[244,98288,98290],{"className":30518,"code":98289,"language":30520,"meta":169,"style":169},"#二维数组使用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",[22,98291,98292,98297,98321,98346,98351,98356],{"__ignoreMap":169},[252,98293,98294],{"class":254,"line":255},[252,98295,98296],{"class":321},"#二维数组使用concatenate进行拼接\n",[252,98298,98299,98301,98303,98305,98307,98309,98311,98313,98315,98317,98319],{"class":254,"line":170},[252,98300,93444],{"class":262},[252,98302,308],{"class":258},[252,98304,93140],{"class":262},[252,98306,480],{"class":311},[252,98308,641],{"class":262},[252,98310,786],{"class":311},[252,98312,93145],{"class":262},[252,98314,334],{"class":311},[252,98316,641],{"class":262},[252,98318,556],{"class":311},[252,98320,269],{"class":262},[252,98322,98323,98326,98328,98330,98332,98334,98336,98338,98340,98342,98344],{"class":254,"line":1318},[252,98324,98325],{"class":262},"bb",[252,98327,308],{"class":258},[252,98329,93140],{"class":262},[252,98331,600],{"class":311},[252,98333,641],{"class":262},[252,98335,905],{"class":311},[252,98337,93145],{"class":262},[252,98339,334],{"class":311},[252,98341,641],{"class":262},[252,98343,556],{"class":311},[252,98345,269],{"class":262},[252,98347,98348],{"class":254,"line":1333},[252,98349,98350],{"class":321},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[252,98352,98353],{"class":254,"line":1339},[252,98354,98355],{"class":321},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[252,98357,98358,98361,98363,98365,98367],{"class":254,"line":1353},[252,98359,98360],{"class":262},"np.concatenate((aa,bb),",[252,98362,47654],{"class":5356},[252,98364,308],{"class":258},[252,98366,454],{"class":311},[252,98368,269],{"class":262},[19,98370,98371],{},"结果：",[19,98373,98374],{},[1601,98375],{"alt":169,"src":98376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[244,98378,98380],{"className":30518,"code":98379,"language":30520,"meta":169,"style":169},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[22,98381,98382,98387],{"__ignoreMap":169},[252,98383,98384],{"class":254,"line":255},[252,98385,98386],{"class":321},"#指定axis为1进行拼接\n",[252,98388,98389,98391,98393,98395,98397],{"class":254,"line":170},[252,98390,98360],{"class":262},[252,98392,47654],{"class":5356},[252,98394,308],{"class":258},[252,98396,480],{"class":311},[252,98398,269],{"class":262},[19,98400,98371],{},[19,98402,98403],{},[1601,98404],{"alt":169,"src":98405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98407,98408],{},[412,98409,98410],{},"二维数组总结：0竖着方向，1横着方向",[19,98412,98413],{},"④三维数组拼接",[19,98415,98416],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[244,98418,98420],{"className":30518,"code":98419,"language":30520,"meta":169,"style":169},"#两个三行六列\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",[22,98421,98422,98427,98455,98485,98490,98507,98512,98517,98522,98539,98544,98549,98554,98567],{"__ignoreMap":169},[252,98423,98424],{"class":254,"line":255},[252,98425,98426],{"class":321},"#两个三行六列\n",[252,98428,98429,98431,98433,98435,98437,98439,98441,98443,98445,98447,98449,98451,98453],{"class":254,"line":170},[252,98430,95659],{"class":262},[252,98432,308],{"class":258},[252,98434,93140],{"class":262},[252,98436,480],{"class":311},[252,98438,641],{"class":262},[252,98440,588],{"class":311},[252,98442,93145],{"class":262},[252,98444,340],{"class":311},[252,98446,641],{"class":262},[252,98448,334],{"class":311},[252,98450,641],{"class":262},[252,98452,607],{"class":311},[252,98454,269],{"class":262},[252,98456,98457,98460,98462,98464,98466,98468,98471,98473,98475,98477,98479,98481,98483],{"class":254,"line":1318},[252,98458,98459],{"class":262},"bbb",[252,98461,308],{"class":258},[252,98463,93140],{"class":262},[252,98465,600],{"class":311},[252,98467,641],{"class":262},[252,98469,98470],{"class":311},"137",[252,98472,93145],{"class":262},[252,98474,340],{"class":311},[252,98476,641],{"class":262},[252,98478,334],{"class":311},[252,98480,641],{"class":262},[252,98482,607],{"class":311},[252,98484,269],{"class":262},[252,98486,98487],{"class":254,"line":1333},[252,98488,98489],{"class":321},"#axis=0\n",[252,98491,98492,98494,98496,98499,98501,98503,98505],{"class":254,"line":1339},[252,98493,958],{"class":262},[252,98495,308],{"class":258},[252,98497,98498],{"class":262},"np.concatenate((aaa,bbb),",[252,98500,47654],{"class":5356},[252,98502,308],{"class":258},[252,98504,454],{"class":311},[252,98506,269],{"class":262},[252,98508,98509],{"class":254,"line":1353},[252,98510,98511],{"class":262},"s.shape\n",[252,98513,98514],{"class":254,"line":1359},[252,98515,98516],{"class":321},"#输出：(4,3,6)\n",[252,98518,98519],{"class":254,"line":1450},[252,98520,98521],{"class":321},"#axis=1\n",[252,98523,98524,98527,98529,98531,98533,98535,98537],{"class":254,"line":1456},[252,98525,98526],{"class":262},"ss",[252,98528,308],{"class":258},[252,98530,98498],{"class":262},[252,98532,47654],{"class":5356},[252,98534,308],{"class":258},[252,98536,480],{"class":311},[252,98538,269],{"class":262},[252,98540,98541],{"class":254,"line":1468},[252,98542,98543],{"class":262},"ss.shape\n",[252,98545,98546],{"class":254,"line":1751},[252,98547,98548],{"class":321},"#输出：(2,6,6)\n",[252,98550,98551],{"class":254,"line":1756},[252,98552,98553],{"class":321},"#axis=2\n",[252,98555,98556,98558,98560,98562,98564],{"class":254,"line":1762},[252,98557,98498],{"class":262},[252,98559,47654],{"class":5356},[252,98561,308],{"class":258},[252,98563,340],{"class":311},[252,98565,98566],{"class":262},").shape\n",[252,98568,98569],{"class":254,"line":1767},[252,98570,98571],{"class":321},"#输出：（2，3，12）\n",[19,98573,98574],{},"⑤四维数组拼接",[244,98576,98578],{"className":30518,"code":98577,"language":30520,"meta":169,"style":169},"#两个三行六列\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",[22,98579,98580,98584,98612,98640,98665,98691,98695,98708,98713,98717,98729,98734,98738,98750,98755,98760,98772],{"__ignoreMap":169},[252,98581,98582],{"class":254,"line":255},[252,98583,98426],{"class":321},[252,98585,98586,98588,98590,98592,98594,98596,98598,98600,98602,98604,98606,98608,98610],{"class":254,"line":170},[252,98587,95659],{"class":262},[252,98589,308],{"class":258},[252,98591,93140],{"class":262},[252,98593,480],{"class":311},[252,98595,641],{"class":262},[252,98597,588],{"class":311},[252,98599,93145],{"class":262},[252,98601,340],{"class":311},[252,98603,641],{"class":262},[252,98605,334],{"class":311},[252,98607,641],{"class":262},[252,98609,607],{"class":311},[252,98611,269],{"class":262},[252,98613,98614,98616,98618,98620,98622,98624,98626,98628,98630,98632,98634,98636,98638],{"class":254,"line":1318},[252,98615,98459],{"class":262},[252,98617,308],{"class":258},[252,98619,93140],{"class":262},[252,98621,600],{"class":311},[252,98623,641],{"class":262},[252,98625,98470],{"class":311},[252,98627,93145],{"class":262},[252,98629,340],{"class":311},[252,98631,641],{"class":262},[252,98633,334],{"class":311},[252,98635,641],{"class":262},[252,98637,607],{"class":311},[252,98639,269],{"class":262},[252,98641,98642,98645,98647,98649,98651,98653,98655,98657,98659,98661,98663],{"class":254,"line":1333},[252,98643,98644],{"class":262},"aaaa",[252,98646,308],{"class":258},[252,98648,97808],{"class":262},[252,98650,340],{"class":311},[252,98652,641],{"class":262},[252,98654,334],{"class":311},[252,98656,641],{"class":262},[252,98658,334],{"class":311},[252,98660,641],{"class":262},[252,98662,340],{"class":311},[252,98664,269],{"class":262},[252,98666,98667,98670,98672,98675,98677,98679,98681,98683,98685,98687,98689],{"class":254,"line":1339},[252,98668,98669],{"class":262},"bbbb",[252,98671,308],{"class":258},[252,98673,98674],{"class":262},"bbb.reshape(",[252,98676,340],{"class":311},[252,98678,641],{"class":262},[252,98680,334],{"class":311},[252,98682,641],{"class":262},[252,98684,334],{"class":311},[252,98686,641],{"class":262},[252,98688,340],{"class":311},[252,98690,269],{"class":262},[252,98692,98693],{"class":254,"line":1353},[252,98694,98489],{"class":321},[252,98696,98697,98700,98702,98704,98706],{"class":254,"line":1359},[252,98698,98699],{"class":262},"np.concatenate((aaaa,bbbb),",[252,98701,47654],{"class":5356},[252,98703,308],{"class":258},[252,98705,454],{"class":311},[252,98707,98566],{"class":262},[252,98709,98710],{"class":254,"line":1450},[252,98711,98712],{"class":321},"#结果：（4，3，3，2）\n",[252,98714,98715],{"class":254,"line":1456},[252,98716,98521],{"class":321},[252,98718,98719,98721,98723,98725,98727],{"class":254,"line":1468},[252,98720,98699],{"class":262},[252,98722,47654],{"class":5356},[252,98724,308],{"class":258},[252,98726,480],{"class":311},[252,98728,98566],{"class":262},[252,98730,98731],{"class":254,"line":1751},[252,98732,98733],{"class":321},"#结果：（2，6，3，2）\n",[252,98735,98736],{"class":254,"line":1756},[252,98737,98553],{"class":321},[252,98739,98740,98742,98744,98746,98748],{"class":254,"line":1762},[252,98741,98699],{"class":262},[252,98743,47654],{"class":5356},[252,98745,308],{"class":258},[252,98747,340],{"class":311},[252,98749,98566],{"class":262},[252,98751,98752],{"class":254,"line":1767},[252,98753,98754],{"class":321},"#结果：（2，3，6，2）\n",[252,98756,98757],{"class":254,"line":1781},[252,98758,98759],{"class":321},"#axis=3\n",[252,98761,98762,98764,98766,98768,98770],{"class":254,"line":1786},[252,98763,98699],{"class":262},[252,98765,47654],{"class":5356},[252,98767,308],{"class":258},[252,98769,334],{"class":311},[252,98771,98566],{"class":262},[252,98773,98774],{"class":254,"line":1792},[252,98775,98776],{"class":321},"#结果：（2，3，3，4）\n",[14,98778,98780],{"id":98779},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,98782,98783],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,98785,98786],{},"①二维数组",[244,98788,98790],{"className":30518,"code":98789,"language":30520,"meta":169,"style":169},"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",[22,98791,98792,98816,98840,98845,98850],{"__ignoreMap":169},[252,98793,98794,98796,98798,98800,98802,98804,98806,98808,98810,98812,98814],{"class":254,"line":255},[252,98795,93444],{"class":262},[252,98797,308],{"class":258},[252,98799,93140],{"class":262},[252,98801,480],{"class":311},[252,98803,641],{"class":262},[252,98805,786],{"class":311},[252,98807,93145],{"class":262},[252,98809,334],{"class":311},[252,98811,641],{"class":262},[252,98813,556],{"class":311},[252,98815,269],{"class":262},[252,98817,98818,98820,98822,98824,98826,98828,98830,98832,98834,98836,98838],{"class":254,"line":170},[252,98819,98325],{"class":262},[252,98821,308],{"class":258},[252,98823,93140],{"class":262},[252,98825,600],{"class":311},[252,98827,641],{"class":262},[252,98829,905],{"class":311},[252,98831,93145],{"class":262},[252,98833,334],{"class":311},[252,98835,641],{"class":262},[252,98837,556],{"class":311},[252,98839,269],{"class":262},[252,98841,98842],{"class":254,"line":1318},[252,98843,98844],{"class":262},"np.hstack((aa,bb))\n",[252,98846,98847],{"class":254,"line":1333},[252,98848,98849],{"class":321},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[252,98851,98852],{"class":254,"line":1339},[252,98853,98854],{"class":321},"#np.hstack([aa,bb])\n",[19,98856,98371],{},[19,98858,98859],{},[1601,98860],{"alt":169,"src":98861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,98863,98864],{},"等效于concatenate()函数中axis=1时的情况",[19,98866,98867],{},"②三维数组",[244,98869,98871],{"className":30518,"code":98870,"language":30520,"meta":169,"style":169},"#两个三行六列\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",[22,98872,98873,98877,98905,98933,98938,98943],{"__ignoreMap":169},[252,98874,98875],{"class":254,"line":255},[252,98876,98426],{"class":321},[252,98878,98879,98881,98883,98885,98887,98889,98891,98893,98895,98897,98899,98901,98903],{"class":254,"line":170},[252,98880,95659],{"class":262},[252,98882,308],{"class":258},[252,98884,93140],{"class":262},[252,98886,480],{"class":311},[252,98888,641],{"class":262},[252,98890,588],{"class":311},[252,98892,93145],{"class":262},[252,98894,340],{"class":311},[252,98896,641],{"class":262},[252,98898,334],{"class":311},[252,98900,641],{"class":262},[252,98902,607],{"class":311},[252,98904,269],{"class":262},[252,98906,98907,98909,98911,98913,98915,98917,98919,98921,98923,98925,98927,98929,98931],{"class":254,"line":1318},[252,98908,98459],{"class":262},[252,98910,308],{"class":258},[252,98912,93140],{"class":262},[252,98914,600],{"class":311},[252,98916,641],{"class":262},[252,98918,98470],{"class":311},[252,98920,93145],{"class":262},[252,98922,340],{"class":311},[252,98924,641],{"class":262},[252,98926,334],{"class":311},[252,98928,641],{"class":262},[252,98930,607],{"class":311},[252,98932,269],{"class":262},[252,98934,98935],{"class":254,"line":1333},[252,98936,98937],{"class":321},"#使用hstack\n",[252,98939,98940],{"class":254,"line":1339},[252,98941,98942],{"class":262},"np.hstack((aaa,bbb)).shape\n",[252,98944,98945],{"class":254,"line":1353},[252,98946,98947],{"class":321},"#输出：（2，6，6）\n",[14,98949,98951],{"id":98950},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,98953,98954],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,98956,98786],{},[244,98958,98960],{"className":30518,"code":98959,"language":30520,"meta":169,"style":169},"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",[22,98961,98962,98986,99010,99015,99020,99025],{"__ignoreMap":169},[252,98963,98964,98966,98968,98970,98972,98974,98976,98978,98980,98982,98984],{"class":254,"line":255},[252,98965,93444],{"class":262},[252,98967,308],{"class":258},[252,98969,93140],{"class":262},[252,98971,480],{"class":311},[252,98973,641],{"class":262},[252,98975,786],{"class":311},[252,98977,93145],{"class":262},[252,98979,334],{"class":311},[252,98981,641],{"class":262},[252,98983,556],{"class":311},[252,98985,269],{"class":262},[252,98987,98988,98990,98992,98994,98996,98998,99000,99002,99004,99006,99008],{"class":254,"line":170},[252,98989,98325],{"class":262},[252,98991,308],{"class":258},[252,98993,93140],{"class":262},[252,98995,600],{"class":311},[252,98997,641],{"class":262},[252,98999,905],{"class":311},[252,99001,93145],{"class":262},[252,99003,334],{"class":311},[252,99005,641],{"class":262},[252,99007,556],{"class":311},[252,99009,269],{"class":262},[252,99011,99012],{"class":254,"line":1318},[252,99013,99014],{"class":321},"#vstack 垂直方向进行堆叠\n",[252,99016,99017],{"class":254,"line":1333},[252,99018,99019],{"class":262},"np.vstack((aa,bb))\n",[252,99021,99022],{"class":254,"line":1339},[252,99023,99024],{"class":321},"#与hstack传的参数类似，等价于：\n",[252,99026,99027],{"class":254,"line":1353},[252,99028,99029],{"class":262},"np.vstack([aa,bb])\n",[19,99031,98371],{},[19,99033,99034],{},[1601,99035],{"alt":169,"src":99036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99038,98867],{},[244,99040,99042],{"className":30518,"code":99041,"language":30520,"meta":169,"style":169},"#两个三行六列\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",[22,99043,99044,99048,99076,99104,99109,99114],{"__ignoreMap":169},[252,99045,99046],{"class":254,"line":255},[252,99047,98426],{"class":321},[252,99049,99050,99052,99054,99056,99058,99060,99062,99064,99066,99068,99070,99072,99074],{"class":254,"line":170},[252,99051,95659],{"class":262},[252,99053,308],{"class":258},[252,99055,93140],{"class":262},[252,99057,480],{"class":311},[252,99059,641],{"class":262},[252,99061,588],{"class":311},[252,99063,93145],{"class":262},[252,99065,340],{"class":311},[252,99067,641],{"class":262},[252,99069,334],{"class":311},[252,99071,641],{"class":262},[252,99073,607],{"class":311},[252,99075,269],{"class":262},[252,99077,99078,99080,99082,99084,99086,99088,99090,99092,99094,99096,99098,99100,99102],{"class":254,"line":1318},[252,99079,98459],{"class":262},[252,99081,308],{"class":258},[252,99083,93140],{"class":262},[252,99085,600],{"class":311},[252,99087,641],{"class":262},[252,99089,98470],{"class":311},[252,99091,93145],{"class":262},[252,99093,340],{"class":311},[252,99095,641],{"class":262},[252,99097,334],{"class":311},[252,99099,641],{"class":262},[252,99101,607],{"class":311},[252,99103,269],{"class":262},[252,99105,99106],{"class":254,"line":1333},[252,99107,99108],{"class":321},"#使用vstack\n",[252,99110,99111],{"class":254,"line":1339},[252,99112,99113],{"class":262},"np.vstack((aaa,bbb)).shape\n",[252,99115,99116],{"class":254,"line":1353},[252,99117,99118],{"class":321},"#输出：（4，3，6）\n",[14,99120,99122],{"id":99121},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99124,99125],{},"该方法是三维数组特有的方法",[19,99127,99128],{},"也就是说",[19,99130,99131],{},"一维数组拼接方法用：concatenate()",[19,99133,99134],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99136,99137],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99139,99140],{},"四维数组及多维数组只能用concatenate进行拼接",[244,99142,99144],{"className":30518,"code":99143,"language":30520,"meta":169,"style":169},"#两个三行六列\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",[22,99145,99146,99150,99178,99206,99211,99216],{"__ignoreMap":169},[252,99147,99148],{"class":254,"line":255},[252,99149,98426],{"class":321},[252,99151,99152,99154,99156,99158,99160,99162,99164,99166,99168,99170,99172,99174,99176],{"class":254,"line":170},[252,99153,95659],{"class":262},[252,99155,308],{"class":258},[252,99157,93140],{"class":262},[252,99159,480],{"class":311},[252,99161,641],{"class":262},[252,99163,588],{"class":311},[252,99165,93145],{"class":262},[252,99167,340],{"class":311},[252,99169,641],{"class":262},[252,99171,334],{"class":311},[252,99173,641],{"class":262},[252,99175,607],{"class":311},[252,99177,269],{"class":262},[252,99179,99180,99182,99184,99186,99188,99190,99192,99194,99196,99198,99200,99202,99204],{"class":254,"line":1318},[252,99181,98459],{"class":262},[252,99183,308],{"class":258},[252,99185,93140],{"class":262},[252,99187,600],{"class":311},[252,99189,641],{"class":262},[252,99191,98470],{"class":311},[252,99193,93145],{"class":262},[252,99195,340],{"class":311},[252,99197,641],{"class":262},[252,99199,334],{"class":311},[252,99201,641],{"class":262},[252,99203,607],{"class":311},[252,99205,269],{"class":262},[252,99207,99208],{"class":254,"line":1333},[252,99209,99210],{"class":321},"#使用dstack\n",[252,99212,99213],{"class":254,"line":1339},[252,99214,99215],{"class":262},"np.dstack((aaa,bbb)).shape\n",[252,99217,99218],{"class":254,"line":1353},[252,99219,99220],{"class":321},"#结果：（2，3，12）\n",[5266,99222,99223],{},"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":169,"searchDepth":170,"depth":170,"links":99225},[99226,99227,99228,99229],{"id":98165,"depth":170,"text":98166},{"id":98779,"depth":170,"text":98780},{"id":98950,"depth":170,"text":98951},{"id":99121,"depth":170,"text":99122},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98157,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99236,"title":99237,"body":99238,"description":178,"extension":179,"meta":99513,"navigation":181,"path":99514,"seo":99515,"stem":99516,"__hash__":99517},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99239,"toc":99511},[99240,99243,99246,99340,99343,99346,99349,99352,99355,99358,99361,99364,99508],[10,99241,99237],{"id":99242},"_7数组转置",[19,99244,99245],{},"使用transpose()函数",[244,99247,99249],{"className":30518,"code":99248,"language":30520,"meta":169,"style":169},"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",[22,99250,99251,99261,99285,99290,99295,99300,99305,99313,99317,99321,99326,99331,99336],{"__ignoreMap":169},[252,99252,99253,99255,99257,99259],{"class":254,"line":255},[252,99254,30532],{"class":258},[252,99256,31520],{"class":262},[252,99258,31523],{"class":258},[252,99260,31526],{"class":262},[252,99262,99263,99265,99267,99269,99271,99273,99275,99277,99279,99281,99283],{"class":254,"line":170},[252,99264,501],{"class":262},[252,99266,308],{"class":258},[252,99268,31857],{"class":262},[252,99270,480],{"class":311},[252,99272,641],{"class":262},[252,99274,786],{"class":311},[252,99276,93145],{"class":262},[252,99278,556],{"class":311},[252,99280,641],{"class":262},[252,99282,334],{"class":311},[252,99284,269],{"class":262},[252,99286,99287],{"class":254,"line":1318},[252,99288,99289],{"class":321},"#二维数组转置\n",[252,99291,99292],{"class":254,"line":1333},[252,99293,99294],{"class":321},"#调用transpose()函数\n",[252,99296,99297],{"class":254,"line":1339},[252,99298,99299],{"class":262},"a.transpose()\n",[252,99301,99302],{"class":254,"line":1353},[252,99303,99304],{"class":321},"#对于二维数组也可以采用.T来实现\n",[252,99306,99307,99310],{"class":254,"line":1359},[252,99308,99309],{"class":262},"a.T",[252,99311,99312],{"class":321},"#与上述代码一样\n",[252,99314,99315],{"class":254,"line":1450},[252,99316,93702],{"class":321},[252,99318,99319],{"class":254,"line":1456},[252,99320,94066],{"class":367},[252,99322,99323],{"class":254,"line":1468},[252,99324,99325],{"class":367},"array([[ 1,  4,  7, 10],\n",[252,99327,99328],{"class":254,"line":1751},[252,99329,99330],{"class":367},"       [ 2,  5,  8, 11],\n",[252,99332,99333],{"class":254,"line":1756},[252,99334,99335],{"class":367},"       [ 3,  6,  9, 12]])\n",[252,99337,99338],{"class":254,"line":1762},[252,99339,94066],{"class":367},[19,99341,99342],{},"也可以使用np.transpose()的形式",[19,99344,99345],{},"#多维数组进行转置 np.transpose()",[19,99347,99348],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99350,99351],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99353,99354],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99356,99357],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99359,99360],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99362,99363],{},"四维及以上的数组也是一样的道理",[244,99365,99367],{"className":30518,"code":99366,"language":30520,"meta":169,"style":169},"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",[22,99368,99369,99397,99402,99407,99412,99430,99435,99467,99472,99477,99482,99503],{"__ignoreMap":169},[252,99370,99371,99373,99375,99377,99379,99381,99383,99385,99387,99389,99391,99393,99395],{"class":254,"line":255},[252,99372,1083],{"class":262},[252,99374,308],{"class":258},[252,99376,93140],{"class":262},[252,99378,480],{"class":311},[252,99380,641],{"class":262},[252,99382,588],{"class":311},[252,99384,93145],{"class":262},[252,99386,334],{"class":311},[252,99388,641],{"class":262},[252,99390,607],{"class":311},[252,99392,641],{"class":262},[252,99394,340],{"class":311},[252,99396,269],{"class":262},[252,99398,99399],{"class":254,"line":170},[252,99400,99401],{"class":262},"x.shape\n",[252,99403,99404],{"class":254,"line":1318},[252,99405,99406],{"class":321},"#结果：（3,6,2）\n",[252,99408,99409],{"class":254,"line":1333},[252,99410,99411],{"class":321},"#使用np.transpose()进行转置 变为(2,6,3)\n",[252,99413,99414,99417,99419,99421,99423,99425,99427],{"class":254,"line":1339},[252,99415,99416],{"class":262},"np.transpose(x,(",[252,99418,340],{"class":311},[252,99420,641],{"class":262},[252,99422,480],{"class":311},[252,99424,641],{"class":262},[252,99426,454],{"class":311},[252,99428,99429],{"class":262},")).shape\n",[252,99431,99432],{"class":254,"line":1353},[252,99433,99434],{"class":321},"#结果：(2,6,3)\n",[252,99436,99437,99439,99441,99443,99445,99447,99449,99451,99453,99455,99457,99459,99461,99463,99465],{"class":254,"line":1359},[252,99438,98644],{"class":262},[252,99440,308],{"class":258},[252,99442,93140],{"class":262},[252,99444,480],{"class":311},[252,99446,641],{"class":262},[252,99448,588],{"class":311},[252,99450,93145],{"class":262},[252,99452,334],{"class":311},[252,99454,641],{"class":262},[252,99456,340],{"class":311},[252,99458,641],{"class":262},[252,99460,480],{"class":311},[252,99462,641],{"class":262},[252,99464,607],{"class":311},[252,99466,269],{"class":262},[252,99468,99469],{"class":254,"line":1450},[252,99470,99471],{"class":262},"aaaa.shape\n",[252,99473,99474],{"class":254,"line":1456},[252,99475,99476],{"class":321},"#结果：（3，2，1，6）\n",[252,99478,99479],{"class":254,"line":1468},[252,99480,99481],{"class":321},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[252,99483,99484,99487,99489,99491,99493,99495,99497,99499,99501],{"class":254,"line":1751},[252,99485,99486],{"class":262},"np.transpose(aaaa,(",[252,99488,480],{"class":311},[252,99490,641],{"class":262},[252,99492,340],{"class":311},[252,99494,641],{"class":262},[252,99496,454],{"class":311},[252,99498,641],{"class":262},[252,99500,334],{"class":311},[252,99502,99429],{"class":262},[252,99504,99505],{"class":254,"line":1756},[252,99506,99507],{"class":321},"#结果：(2,1,3,6)\n",[5266,99509,99510],{},"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":169,"searchDepth":170,"depth":170,"links":99512},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99237,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99519,"title":99520,"body":99521,"description":178,"extension":179,"meta":100255,"navigation":181,"path":100256,"seo":100257,"stem":100258,"__hash__":100259},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99522,"toc":100253},[99523,99526,99529,99532,99535,99538,99541,99544,99547,99656,99659,99662,100250],[10,99524,99520],{"id":99525},"_8数组分割",[19,99527,99528],{},"split分割",[19,99530,99531],{},"numpy.split(ary,indics_or_sections,axis)",[19,99533,99534],{},"解释：",[19,99536,99537],{},"ary:被分割的数组",[19,99539,99540],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99542,99543],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99545,99546],{},"①一维数组的分割",[244,99548,99550],{"className":30518,"code":99549,"language":30520,"meta":169,"style":169},"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",[22,99551,99552,99568,99573,99582,99586,99591,99599,99603,99608,99613,99626,99630,99635,99647,99651],{"__ignoreMap":169},[252,99553,99554,99556,99558,99560,99562,99564,99566],{"class":254,"line":255},[252,99555,501],{"class":262},[252,99557,308],{"class":258},[252,99559,93140],{"class":262},[252,99561,480],{"class":311},[252,99563,641],{"class":262},[252,99565,683],{"class":311},[252,99567,269],{"class":262},[252,99569,99570],{"class":254,"line":170},[252,99571,99572],{"class":321},"#如果传入整数，必须能够平分，否则会报错\n",[252,99574,99575,99578,99580],{"class":254,"line":1318},[252,99576,99577],{"class":262},"np.split(a,",[252,99579,340],{"class":311},[252,99581,269],{"class":262},[252,99583,99584],{"class":254,"line":1333},[252,99585,93702],{"class":321},[252,99587,99588],{"class":254,"line":1339},[252,99589,99590],{"class":321},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[252,99592,99593,99595,99597],{"class":254,"line":1353},[252,99594,99577],{"class":262},[252,99596,556],{"class":311},[252,99598,269],{"class":262},[252,99600,99601],{"class":254,"line":1359},[252,99602,93702],{"class":321},[252,99604,99605],{"class":254,"line":1450},[252,99606,99607],{"class":321},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[252,99609,99610],{"class":254,"line":1456},[252,99611,99612],{"class":321},"#传入数组\n",[252,99614,99615,99618,99620,99622,99624],{"class":254,"line":1468},[252,99616,99617],{"class":262},"np.split(a,[",[252,99619,334],{"class":311},[252,99621,641],{"class":262},[252,99623,582],{"class":311},[252,99625,4796],{"class":262},[252,99627,99628],{"class":254,"line":1751},[252,99629,93702],{"class":321},[252,99631,99632],{"class":254,"line":1756},[252,99633,99634],{"class":321},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[252,99636,99637,99639,99641,99643,99645],{"class":254,"line":1762},[252,99638,99617],{"class":262},[252,99640,582],{"class":311},[252,99642,641],{"class":262},[252,99644,632],{"class":311},[252,99646,4796],{"class":262},[252,99648,99649],{"class":254,"line":1767},[252,99650,93702],{"class":321},[252,99652,99653],{"class":254,"line":1781},[252,99654,99655],{"class":321},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99657,99658],{},"②二维数组的分割",[19,99660,99661],{},"使用split()",[244,99663,99665],{"className":30518,"code":99664,"language":30520,"meta":169,"style":169},"#二维数组分割\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",[22,99666,99667,99672,99696,99701,99710,99714,99718,99723,99728,99733,99738,99743,99748,99753,99757,99770,99774,99778,99782,99786,99790,99795,99800,99805,99809,99814,99830,99834,99838,99843,99848,99853,99858,99863,99868,99873,99878,99883,99888,99893,99898,99903,99908,99913,99918,99923,99928,99932,99936,99956,99960,99964,99969,99974,99979,99984,99989,99994,99999,100004,100009,100014,100019,100024,100029,100034,100039,100044,100049,100054,100058,100063,100072,100076,100080,100084,100088,100092,100096,100100,100104,100108,100117,100121,100125,100129,100133,100137,100141,100145,100149,100153,100157,100161,100165,100169,100173,100177,100181,100185,100189,100193,100197,100201,100214,100218,100222,100226,100230,100234,100238,100242,100246],{"__ignoreMap":169},[252,99668,99669],{"class":254,"line":255},[252,99670,99671],{"class":321},"#二维数组分割\n",[252,99673,99674,99676,99678,99680,99682,99684,99686,99688,99690,99692,99694],{"class":254,"line":170},[252,99675,93444],{"class":262},[252,99677,308],{"class":258},[252,99679,93140],{"class":262},[252,99681,480],{"class":311},[252,99683,641],{"class":262},[252,99685,588],{"class":311},[252,99687,93145],{"class":262},[252,99689,607],{"class":311},[252,99691,641],{"class":262},[252,99693,607],{"class":311},[252,99695,269],{"class":262},[252,99697,99698],{"class":254,"line":1318},[252,99699,99700],{"class":321},"#默认axis=0  传入整数平均分,按行来的\n",[252,99702,99703,99706,99708],{"class":254,"line":1333},[252,99704,99705],{"class":262},"np.split(aa,",[252,99707,334],{"class":311},[252,99709,269],{"class":262},[252,99711,99712],{"class":254,"line":1339},[252,99713,95902],{"class":321},[252,99715,99716],{"class":254,"line":1353},[252,99717,94066],{"class":367},[252,99719,99720],{"class":254,"line":1359},[252,99721,99722],{"class":367},"[array([[ 1,  2,  3,  4,  5,  6],\n",[252,99724,99725],{"class":254,"line":1450},[252,99726,99727],{"class":367},"        [ 7,  8,  9, 10, 11, 12]]),\n",[252,99729,99730],{"class":254,"line":1456},[252,99731,99732],{"class":367}," array([[13, 14, 15, 16, 17, 18],\n",[252,99734,99735],{"class":254,"line":1468},[252,99736,99737],{"class":367},"        [19, 20, 21, 22, 23, 24]]),\n",[252,99739,99740],{"class":254,"line":1751},[252,99741,99742],{"class":367}," array([[25, 26, 27, 28, 29, 30],\n",[252,99744,99745],{"class":254,"line":1756},[252,99746,99747],{"class":367},"        [31, 32, 33, 34, 35, 36]])]\n",[252,99749,99750],{"class":254,"line":1762},[252,99751,99752],{"class":367}," '''\n",[252,99754,99755],{"class":254,"line":1767},[252,99756,99612],{"class":321},[252,99758,99759,99762,99764,99766,99768],{"class":254,"line":1781},[252,99760,99761],{"class":262},"np.split(aa,[",[252,99763,340],{"class":311},[252,99765,641],{"class":262},[252,99767,582],{"class":311},[252,99769,4796],{"class":262},[252,99771,99772],{"class":254,"line":1786},[252,99773,95902],{"class":321},[252,99775,99776],{"class":254,"line":1792},[252,99777,94066],{"class":367},[252,99779,99780],{"class":254,"line":1813},[252,99781,99722],{"class":367},[252,99783,99784],{"class":254,"line":1818},[252,99785,99727],{"class":367},[252,99787,99788],{"class":254,"line":1832},[252,99789,99732],{"class":367},[252,99791,99792],{"class":254,"line":1837},[252,99793,99794],{"class":367},"        [19, 20, 21, 22, 23, 24],\n",[252,99796,99797],{"class":254,"line":1866},[252,99798,99799],{"class":367},"        [25, 26, 27, 28, 29, 30]]),\n",[252,99801,99802],{"class":254,"line":1871},[252,99803,99804],{"class":367}," array([[31, 32, 33, 34, 35, 36]])]\n",[252,99806,99807],{"class":254,"line":1888},[252,99808,94066],{"class":367},[252,99810,99811],{"class":254,"line":1893},[252,99812,99813],{"class":321},"#axis=1 按照列来分\n",[252,99815,99816,99818,99820,99822,99824,99826,99828],{"class":254,"line":1898},[252,99817,99705],{"class":262},[252,99819,334],{"class":311},[252,99821,641],{"class":262},[252,99823,47654],{"class":5356},[252,99825,308],{"class":258},[252,99827,480],{"class":311},[252,99829,269],{"class":262},[252,99831,99832],{"class":254,"line":1903},[252,99833,95902],{"class":321},[252,99835,99836],{"class":254,"line":1917},[252,99837,94066],{"class":367},[252,99839,99840],{"class":254,"line":1922},[252,99841,99842],{"class":367},"[array([[ 1,  2],\n",[252,99844,99845],{"class":254,"line":2716},[252,99846,99847],{"class":367},"        [ 7,  8],\n",[252,99849,99850],{"class":254,"line":2730},[252,99851,99852],{"class":367},"        [13, 14],\n",[252,99854,99855],{"class":254,"line":2738},[252,99856,99857],{"class":367},"        [19, 20],\n",[252,99859,99860],{"class":254,"line":2743},[252,99861,99862],{"class":367},"        [25, 26],\n",[252,99864,99865],{"class":254,"line":2749},[252,99866,99867],{"class":367},"        [31, 32]]),\n",[252,99869,99870],{"class":254,"line":2755},[252,99871,99872],{"class":367}," array([[ 3,  4],\n",[252,99874,99875],{"class":254,"line":2760},[252,99876,99877],{"class":367},"        [ 9, 10],\n",[252,99879,99880],{"class":254,"line":8088},[252,99881,99882],{"class":367},"        [15, 16],\n",[252,99884,99885],{"class":254,"line":8112},[252,99886,99887],{"class":367},"        [21, 22],\n",[252,99889,99890],{"class":254,"line":8117},[252,99891,99892],{"class":367},"        [27, 28],\n",[252,99894,99895],{"class":254,"line":8123},[252,99896,99897],{"class":367},"        [33, 34]]),\n",[252,99899,99900],{"class":254,"line":8150},[252,99901,99902],{"class":367}," array([[ 5,  6],\n",[252,99904,99905],{"class":254,"line":8155},[252,99906,99907],{"class":367},"        [11, 12],\n",[252,99909,99910],{"class":254,"line":8161},[252,99911,99912],{"class":367},"        [17, 18],\n",[252,99914,99915],{"class":254,"line":8173},[252,99916,99917],{"class":367},"        [23, 24],\n",[252,99919,99920],{"class":254,"line":8185},[252,99921,99922],{"class":367},"        [29, 30],\n",[252,99924,99925],{"class":254,"line":8197},[252,99926,99927],{"class":367},"        [35, 36]])]\n",[252,99929,99930],{"class":254,"line":9856},[252,99931,99752],{"class":367},[252,99933,99934],{"class":254,"line":9881},[252,99935,99612],{"class":321},[252,99937,99938,99940,99942,99944,99946,99948,99950,99952,99954],{"class":254,"line":9904},[252,99939,99761],{"class":262},[252,99941,480],{"class":311},[252,99943,641],{"class":262},[252,99945,340],{"class":311},[252,99947,41749],{"class":262},[252,99949,47654],{"class":5356},[252,99951,308],{"class":258},[252,99953,480],{"class":311},[252,99955,269],{"class":262},[252,99957,99958],{"class":254,"line":9928},[252,99959,93702],{"class":321},[252,99961,99962],{"class":254,"line":9933},[252,99963,94066],{"class":367},[252,99965,99966],{"class":254,"line":9938},[252,99967,99968],{"class":367},"[array([[ 1],\n",[252,99970,99971],{"class":254,"line":9943},[252,99972,99973],{"class":367},"        [ 7],\n",[252,99975,99976],{"class":254,"line":9952},[252,99977,99978],{"class":367},"        [13],\n",[252,99980,99981],{"class":254,"line":9957},[252,99982,99983],{"class":367},"        [19],\n",[252,99985,99986],{"class":254,"line":9963},[252,99987,99988],{"class":367},"        [25],\n",[252,99990,99991],{"class":254,"line":9984},[252,99992,99993],{"class":367},"        [31]]),\n",[252,99995,99996],{"class":254,"line":9990},[252,99997,99998],{"class":367}," array([[ 2],\n",[252,100000,100001],{"class":254,"line":10004},[252,100002,100003],{"class":367},"        [ 8],\n",[252,100005,100006],{"class":254,"line":10010},[252,100007,100008],{"class":367},"        [14],\n",[252,100010,100011],{"class":254,"line":10037},[252,100012,100013],{"class":367},"        [20],\n",[252,100015,100016],{"class":254,"line":10046},[252,100017,100018],{"class":367},"        [26],\n",[252,100020,100021],{"class":254,"line":10052},[252,100022,100023],{"class":367},"        [32]]),\n",[252,100025,100026],{"class":254,"line":10060},[252,100027,100028],{"class":367}," array([[ 3,  4,  5,  6],\n",[252,100030,100031],{"class":254,"line":10065},[252,100032,100033],{"class":367},"        [ 9, 10, 11, 12],\n",[252,100035,100036],{"class":254,"line":16744},[252,100037,100038],{"class":367},"        [15, 16, 17, 18],\n",[252,100040,100041],{"class":254,"line":16750},[252,100042,100043],{"class":367},"        [21, 22, 23, 24],\n",[252,100045,100046],{"class":254,"line":16773},[252,100047,100048],{"class":367},"        [27, 28, 29, 30],\n",[252,100050,100051],{"class":254,"line":16779},[252,100052,100053],{"class":367},"        [33, 34, 35, 36]])]\n",[252,100055,100056],{"class":254,"line":16802},[252,100057,94066],{"class":367},[252,100059,100060],{"class":254,"line":16816},[252,100061,100062],{"class":321},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[252,100064,100065,100068,100070],{"class":254,"line":16836},[252,100066,100067],{"class":262},"np.vsplit(aa,",[252,100069,334],{"class":311},[252,100071,269],{"class":262},[252,100073,100074],{"class":254,"line":16842},[252,100075,93702],{"class":321},[252,100077,100078],{"class":254,"line":16853},[252,100079,94066],{"class":367},[252,100081,100082],{"class":254,"line":16876},[252,100083,99722],{"class":367},[252,100085,100086],{"class":254,"line":16898},[252,100087,99727],{"class":367},[252,100089,100090],{"class":254,"line":16903},[252,100091,99732],{"class":367},[252,100093,100094],{"class":254,"line":16909},[252,100095,99737],{"class":367},[252,100097,100098],{"class":254,"line":16923},[252,100099,99742],{"class":367},[252,100101,100102],{"class":254,"line":16936},[252,100103,99747],{"class":367},[252,100105,100106],{"class":254,"line":16941},[252,100107,94066],{"class":367},[252,100109,100110,100113,100115],{"class":254,"line":16955},[252,100111,100112],{"class":262},"np.hsplit(aa,",[252,100114,334],{"class":311},[252,100116,269],{"class":262},[252,100118,100119],{"class":254,"line":16960},[252,100120,93702],{"class":321},[252,100122,100123],{"class":254,"line":16966},[252,100124,94066],{"class":367},[252,100126,100127],{"class":254,"line":16971},[252,100128,99842],{"class":367},[252,100130,100131],{"class":254,"line":16985},[252,100132,99847],{"class":367},[252,100134,100135],{"class":254,"line":16990},[252,100136,99852],{"class":367},[252,100138,100139],{"class":254,"line":16995},[252,100140,99857],{"class":367},[252,100142,100143],{"class":254,"line":17009},[252,100144,99862],{"class":367},[252,100146,100147],{"class":254,"line":17021},[252,100148,99867],{"class":367},[252,100150,100151],{"class":254,"line":17026},[252,100152,99872],{"class":367},[252,100154,100155],{"class":254,"line":17039},[252,100156,99877],{"class":367},[252,100158,100159],{"class":254,"line":17044},[252,100160,99882],{"class":367},[252,100162,100163],{"class":254,"line":17049},[252,100164,99887],{"class":367},[252,100166,100167],{"class":254,"line":17054},[252,100168,99892],{"class":367},[252,100170,100171],{"class":254,"line":17067},[252,100172,99897],{"class":367},[252,100174,100175],{"class":254,"line":17072},[252,100176,99902],{"class":367},[252,100178,100179],{"class":254,"line":32773},[252,100180,99907],{"class":367},[252,100182,100183],{"class":254,"line":32779},[252,100184,99912],{"class":367},[252,100186,100187],{"class":254,"line":32785},[252,100188,99917],{"class":367},[252,100190,100191],{"class":254,"line":32791},[252,100192,99922],{"class":367},[252,100194,100195],{"class":254,"line":32797},[252,100196,99927],{"class":367},[252,100198,100199],{"class":254,"line":32808},[252,100200,94066],{"class":367},[252,100202,100203,100206,100208,100210,100212],{"class":254,"line":32814},[252,100204,100205],{"class":262},"np.vsplit(aa,[",[252,100207,340],{"class":311},[252,100209,641],{"class":262},[252,100211,582],{"class":311},[252,100213,4796],{"class":262},[252,100215,100216],{"class":254,"line":32834},[252,100217,93702],{"class":321},[252,100219,100220],{"class":254,"line":32840},[252,100221,94066],{"class":367},[252,100223,100224],{"class":254,"line":32851},[252,100225,99722],{"class":367},[252,100227,100228],{"class":254,"line":32857},[252,100229,99727],{"class":367},[252,100231,100232],{"class":254,"line":32863},[252,100233,99732],{"class":367},[252,100235,100236],{"class":254,"line":32869},[252,100237,99794],{"class":367},[252,100239,100240],{"class":254,"line":32875},[252,100241,99799],{"class":367},[252,100243,100244],{"class":254,"line":32881},[252,100245,99804],{"class":367},[252,100247,100248],{"class":254,"line":32887},[252,100249,99752],{"class":367},[5266,100251,100252],{},"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":169,"searchDepth":170,"depth":170,"links":100254},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99520,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100261,"title":100262,"body":100263,"description":178,"extension":179,"meta":100757,"navigation":181,"path":100758,"seo":100759,"stem":100760,"__hash__":100761},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100264,"toc":100748},[100265,100268,100271,100296,100300,100359,100411,100415,100417,100453,100507,100509,100547,100618,100622,100627,100631,100634,100667,100670,100674,100677,100680,100683,100686,100691,100695,100698,100701,100704,100707,100712,100716,100721,100724,100745],[10,100266,100262],{"id":100267},"_9数学函数",[19,100269,100270],{},"补充回顾：python的列表推导式",[244,100272,100274],{"className":30518,"code":100273,"language":30520,"meta":169,"style":169},"[1\u002Fi for i in a]\n",[22,100275,100276],{"__ignoreMap":169},[252,100277,100278,100280,100282,100284,100287,100289,100291,100293],{"class":254,"line":255},[252,100279,1153],{"class":262},[252,100281,480],{"class":311},[252,100283,847],{"class":258},[252,100285,100286],{"class":262},"i ",[252,100288,3164],{"class":258},[252,100290,9578],{"class":262},[252,100292,26183],{"class":258},[252,100294,100295],{"class":262}," a]\n",[14,100297,100299],{"id":100298},"_91-求倒数","9.1 求倒数",[244,100301,100303],{"className":30518,"code":100302,"language":30520,"meta":169,"style":169},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[22,100304,100305,100310,100338,100350],{"__ignoreMap":169},[252,100306,100307],{"class":254,"line":255},[252,100308,100309],{"class":321},"#数组求倒数\n",[252,100311,100312,100314,100316,100318,100320,100322,100324,100326,100328,100330,100332,100334,100336],{"class":254,"line":170},[252,100313,501],{"class":262},[252,100315,308],{"class":258},[252,100317,1153],{"class":262},[252,100319,480],{"class":311},[252,100321,641],{"class":262},[252,100323,340],{"class":311},[252,100325,641],{"class":262},[252,100327,334],{"class":311},[252,100329,641],{"class":262},[252,100331,556],{"class":311},[252,100333,641],{"class":262},[252,100335,582],{"class":311},[252,100337,33386],{"class":262},[252,100339,100340,100342,100344,100347],{"class":254,"line":1318},[252,100341,526],{"class":262},[252,100343,308],{"class":258},[252,100345,100346],{"class":262},"np.array(a)",[252,100348,100349],{"class":321},"#将列表转换为数组\n",[252,100351,100352,100354,100356],{"class":254,"line":1333},[252,100353,480],{"class":311},[252,100355,847],{"class":258},[252,100357,100358],{"class":262},"b\n",[244,100360,100362],{"className":30518,"code":100361,"language":30520,"meta":169,"style":169},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[22,100363,100364,100392,100401,100406],{"__ignoreMap":169},[252,100365,100366,100368,100370,100372,100374,100376,100378,100380,100382,100384,100386,100388,100390],{"class":254,"line":255},[252,100367,501],{"class":262},[252,100369,308],{"class":258},[252,100371,1153],{"class":262},[252,100373,480],{"class":311},[252,100375,641],{"class":262},[252,100377,340],{"class":311},[252,100379,641],{"class":262},[252,100381,334],{"class":311},[252,100383,641],{"class":262},[252,100385,556],{"class":311},[252,100387,641],{"class":262},[252,100389,582],{"class":311},[252,100391,33386],{"class":262},[252,100393,100394,100396,100398],{"class":254,"line":170},[252,100395,526],{"class":262},[252,100397,308],{"class":258},[252,100399,100400],{"class":262},"np.array(a)\n",[252,100402,100403],{"class":254,"line":1318},[252,100404,100405],{"class":321},"#调用numpy中的函数reciprocal()\n",[252,100407,100408],{"class":254,"line":1333},[252,100409,100410],{"class":262},"np.reciprocal(b)\n",[14,100412,100414],{"id":100413},"_92-求平方","9.2 求平方",[19,100416,94668],{},[244,100418,100420],{"className":30518,"code":100419,"language":30520,"meta":169,"style":169},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[22,100421,100422,100427,100432,100448],{"__ignoreMap":169},[252,100423,100424],{"class":254,"line":255},[252,100425,100426],{"class":321},"#square()，求平方\n",[252,100428,100429],{"class":254,"line":170},[252,100430,100431],{"class":321},"#一维数组\n",[252,100433,100434,100436,100438,100440,100442,100444,100446],{"class":254,"line":1318},[252,100435,501],{"class":262},[252,100437,308],{"class":258},[252,100439,93140],{"class":262},[252,100441,480],{"class":311},[252,100443,641],{"class":262},[252,100445,709],{"class":311},[252,100447,269],{"class":262},[252,100449,100450],{"class":254,"line":1333},[252,100451,100452],{"class":262},"np.square(a)\n",[244,100454,100456],{"className":30518,"code":100455,"language":30520,"meta":169,"style":169},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[22,100457,100458,100463,100468,100489],{"__ignoreMap":169},[252,100459,100460],{"class":254,"line":255},[252,100461,100462],{"class":321},"#或者通过循环遍历的形式来计算\n",[252,100464,100465],{"class":254,"line":170},[252,100466,100467],{"class":321},"#这是一个列表\n",[252,100469,100470,100473,100475,100477,100479,100481,100483,100486],{"class":254,"line":1318},[252,100471,100472],{"class":262},"[i",[252,100474,718],{"class":258},[252,100476,100286],{"class":262},[252,100478,3164],{"class":258},[252,100480,9578],{"class":262},[252,100482,26183],{"class":258},[252,100484,100485],{"class":262}," a]",[252,100487,100488],{"class":321},"#这个求完之后在数列当中\n",[252,100490,100491,100494,100496,100498,100500,100502,100504],{"class":254,"line":1333},[252,100492,100493],{"class":262},"np.array([i",[252,100495,718],{"class":258},[252,100497,100286],{"class":262},[252,100499,3164],{"class":258},[252,100501,9578],{"class":262},[252,100503,26183],{"class":258},[252,100505,100506],{"class":262}," a])\n",[19,100508,93429],{},[244,100510,100512],{"className":30518,"code":100511,"language":30520,"meta":169,"style":169},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[22,100513,100514,100518,100542],{"__ignoreMap":169},[252,100515,100516],{"class":254,"line":255},[252,100517,93439],{"class":321},[252,100519,100520,100522,100524,100526,100528,100530,100532,100534,100536,100538,100540],{"class":254,"line":170},[252,100521,93444],{"class":262},[252,100523,308],{"class":258},[252,100525,93140],{"class":262},[252,100527,480],{"class":311},[252,100529,641],{"class":262},[252,100531,786],{"class":311},[252,100533,93145],{"class":262},[252,100535,556],{"class":311},[252,100537,641],{"class":262},[252,100539,334],{"class":311},[252,100541,269],{"class":262},[252,100543,100544],{"class":254,"line":1318},[252,100545,100546],{"class":262},"np.square(aa)\n",[244,100548,100550],{"className":30518,"code":100549,"language":30520,"meta":169,"style":169},"#传统的方式\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",[22,100551,100552,100557,100566,100582,100598,100613],{"__ignoreMap":169},[252,100553,100554],{"class":254,"line":255},[252,100555,100556],{"class":321},"#传统的方式\n",[252,100558,100559,100561,100563],{"class":254,"line":170},[252,100560,98325],{"class":262},[252,100562,308],{"class":258},[252,100564,100565],{"class":262},"np.empty_like(aa)\n",[252,100567,100568,100570,100572,100574,100576,100578,100580],{"class":254,"line":1318},[252,100569,3164],{"class":258},[252,100571,9578],{"class":262},[252,100573,26183],{"class":258},[252,100575,32583],{"class":311},[252,100577,263],{"class":262},[252,100579,556],{"class":311},[252,100581,30926],{"class":262},[252,100583,100584,100586,100588,100590,100592,100594,100596],{"class":254,"line":1333},[252,100585,3340],{"class":258},[252,100587,9640],{"class":262},[252,100589,26183],{"class":258},[252,100591,32583],{"class":311},[252,100593,263],{"class":262},[252,100595,334],{"class":311},[252,100597,30926],{"class":262},[252,100599,100600,100603,100605,100608,100610],{"class":254,"line":1339},[252,100601,100602],{"class":262},"        bb[i,j]",[252,100604,308],{"class":258},[252,100606,100607],{"class":262},"aa[i,j]",[252,100609,718],{"class":258},[252,100611,100612],{"class":262},"aa[i,j]\n",[252,100614,100615],{"class":254,"line":1353},[252,100616,100617],{"class":262},"bb\n",[14,100619,100621],{"id":100620},"_93-求各元素的符号","9.3 求各元素的符号",[19,100623,100624],{},[1601,100625],{"alt":169,"src":100626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100628,100630],{"id":100629},"_94-modf函数","9.4 modf函数",[19,100632,100633],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[244,100635,100637],{"className":30518,"code":100636,"language":30520,"meta":169,"style":169},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[22,100638,100639,100662],{"__ignoreMap":169},[252,100640,100641,100643,100645,100647,100649,100651,100653,100655,100657,100660],{"class":254,"line":255},[252,100642,501],{"class":262},[252,100644,308],{"class":258},[252,100646,93140],{"class":262},[252,100648,795],{"class":258},[252,100650,709],{"class":311},[252,100652,641],{"class":262},[252,100654,709],{"class":311},[252,100656,641],{"class":262},[252,100658,100659],{"class":311},"0.3",[252,100661,269],{"class":262},[252,100663,100664],{"class":254,"line":170},[252,100665,100666],{"class":262},"np.modf(a)\n",[19,100668,100669],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100671,100673],{"id":100672},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100675,100676],{},"np.cell()",[19,100678,100679],{},"np.floor()",[19,100681,100682],{},"np.rint()",[19,100684,100685],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100687,100688],{},[1601,100689],{"alt":169,"src":100690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100692,100694],{"id":100693},"_96-around函数","9.6 around()函数",[19,100696,100697],{},"around()函数也可以实现对数的小数位数进行操作",[19,100699,100700],{},"其中的参数：",[19,100702,100703],{},"1.要传的数组",[19,100705,100706],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100708,100709],{},[1601,100710],{"alt":169,"src":100711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100713,100715],{"id":100714},"_97-三角函数","9.7 三角函数",[19,100717,100718],{},[1601,100719],{"alt":169,"src":100720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100722,100723],{},"引入图像模块非常重要",[244,100725,100727],{"className":30518,"code":100726,"language":30520,"meta":169,"style":169},"from matplotlib import pyplot as plt\n",[22,100728,100729],{"__ignoreMap":169},[252,100730,100731,100733,100736,100738,100741,100743],{"class":254,"line":255},[252,100732,30877],{"class":258},[252,100734,100735],{"class":262}," matplotlib ",[252,100737,30532],{"class":258},[252,100739,100740],{"class":262}," pyplot ",[252,100742,31523],{"class":258},[252,100744,31577],{"class":262},[5266,100746,100747],{},"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":169,"searchDepth":170,"depth":170,"links":100749},[100750,100751,100752,100753,100754,100755,100756],{"id":100298,"depth":170,"text":100299},{"id":100413,"depth":170,"text":100414},{"id":100620,"depth":170,"text":100621},{"id":100629,"depth":170,"text":100630},{"id":100672,"depth":170,"text":100673},{"id":100693,"depth":170,"text":100694},{"id":100714,"depth":170,"text":100715},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100262,"description":178},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100763,"title":100764,"body":100765,"description":178,"extension":179,"meta":100769,"navigation":181,"path":100770,"seo":100771,"stem":100772,"__hash__":100773},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100766,"toc":100767},[],{"title":169,"searchDepth":170,"depth":170,"links":100768},[],{"category":50560},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100764,"description":178},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100775,"title":100776,"body":100777,"description":169,"extension":179,"meta":102784,"navigation":181,"path":102785,"seo":102786,"stem":102787,"__hash__":102788},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100778,"toc":102760},[100779,100782,100786,100789,100792,100798,100801,100824,100827,100861,100864,100905,100909,100912,101005,101008,101052,101055,101072,101075,101089,101092,101095,101140,101143,101179,101183,101186,101192,101197,101217,101221,101224,101290,101293,101311,101315,101318,101347,101357,101363,101367,101370,101376,101387,101391,101394,101424,101427,101707,101710,101713,101724,101727,101730,101752,101759,101762,101780,101783,101786,101800,101808,101811,101837,101843,101846,101849,101859,101871,101891,101900,101920,101930,101954,101967,101981,101986,102027,102044,102069,102081,102101,102107,102152,102171,102188,102201,102217,102224,102236,102245,102280,102301,102326,102339,102363,102378,102403,102406,102427,102436,102439,102450,102454,102457,102463,102475,102482,102486,102489,102501,102504,102518,102521,102531,102541,102544,102584,102587,102591,102597,102600,102614,102618,102621,102654,102658,102661,102684,102692,102695,102701,102707,102710,102713,102741,102745,102748,102754,102757],[10,100780,100776],{"id":100781},"_1环境安装与第一个-mujoco-程序",[14,100783,100785],{"id":100784},"_1目标说明","1.目标说明",[19,100787,100788],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,100790,100791],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[244,100793,100796],{"className":100794,"code":100795,"language":5327,"meta":169},[5325],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[22,100797,100795],{"__ignoreMap":169},[19,100799,100800],{},"需要掌握:",[207,100802,100803,100806,100809,100814,100819],{},[210,100804,100805],{},"Fedora 44 下 MuJoCo 的系统依赖",[210,100807,100808],{},"Python 虚拟环境创建",[210,100810,100811],{},[22,100812,100813],{},"mujoco.MjModel",[210,100815,100816],{},[22,100817,100818],{},"mujoco.MjData",[210,100820,100821],{},[22,100822,100823],{},"mujoco.mj_step(model, data)",[19,100825,100826],{},"MuJoCo 中最重要的两个对象:",[400,100828,100829,100839],{},[403,100830,100831],{},[406,100832,100833,100836],{},[409,100834,100835],{"align":23875},"对象",[409,100837,100838],{"align":23875},"含义",[447,100840,100841,100851],{},[406,100842,100843,100848],{},[452,100844,100845],{"align":23875},[22,100846,100847],{},"MjModel",[452,100849,100850],{"align":23875},"模型结构，来自 XML，基本不随时间变化",[406,100852,100853,100858],{},[452,100854,100855],{"align":23875},[22,100856,100857],{},"MjData",[452,100859,100860],{"align":23875},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,100862,100863],{},"可以先用一个类比理解：",[400,100865,100866,100876],{},[403,100867,100868],{},[406,100869,100870,100873],{},[409,100871,100872],{"align":23875},"类比",[409,100874,100875],{"align":23875},"MuJoCo 对象",[447,100877,100878,100887,100896],{},[406,100879,100880,100883],{},[452,100881,100882],{"align":23875},"游戏地图和角色配置",[452,100884,100885],{"align":23875},[22,100886,100847],{},[406,100888,100889,100892],{},[452,100890,100891],{"align":23875},"游戏运行到当前帧的状态",[452,100893,100894],{"align":23875},[22,100895,100857],{},[406,100897,100898,100901],{},[452,100899,100900],{"align":23875},"前进一帧",[452,100902,100903],{"align":23875},[22,100904,100823],{},[14,100906,100908],{"id":100907},"_2环境与依赖安装","2.环境与依赖安装",[19,100910,100911],{},"Fedora 44 系统依赖:",[244,100913,100915],{"className":23961,"code":100914,"language":23963,"meta":169,"style":169},"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",[22,100916,100917,100929,100942,100955,100965,100975,100994],{"__ignoreMap":169},[252,100918,100919,100921,100923,100925,100927],{"class":254,"line":255},[252,100920,24716],{"class":2102},[252,100922,26455],{"class":367},[252,100924,23973],{"class":367},[252,100926,26540],{"class":311},[252,100928,24818],{"class":311},[252,100930,100931,100934,100937,100940],{"class":254,"line":170},[252,100932,100933],{"class":367},"  python3",[252,100935,100936],{"class":367}," python3-pip",[252,100938,100939],{"class":367}," python3-virtualenv",[252,100941,24818],{"class":311},[252,100943,100944,100947,100950,100953],{"class":254,"line":1318},[252,100945,100946],{"class":367},"  mesa-libGL",[252,100948,100949],{"class":367}," mesa-libGLU",[252,100951,100952],{"class":367}," mesa-dri-drivers",[252,100954,24818],{"class":311},[252,100956,100957,100960,100963],{"class":254,"line":1333},[252,100958,100959],{"class":367},"  libglvnd-glx",[252,100961,100962],{"class":367}," libglvnd-opengl",[252,100964,24818],{"class":311},[252,100966,100967,100970,100973],{"class":254,"line":1339},[252,100968,100969],{"class":367},"  glfw",[252,100971,100972],{"class":367}," glfw-devel",[252,100974,24818],{"class":311},[252,100976,100977,100980,100983,100986,100989,100992],{"class":254,"line":1353},[252,100978,100979],{"class":367},"  libX11",[252,100981,100982],{"class":367}," libXcursor",[252,100984,100985],{"class":367}," libXi",[252,100987,100988],{"class":367}," libXinerama",[252,100990,100991],{"class":367}," libXrandr",[252,100993,24818],{"class":311},[252,100995,100996,100999,101002],{"class":254,"line":1359},[252,100997,100998],{"class":367},"  gcc",[252,101000,101001],{"class":367}," gcc-c++",[252,101003,101004],{"class":367}," make\n",[19,101006,101007],{},"创建 Python 环境:",[244,101009,101011],{"className":23961,"code":101010,"language":23963,"meta":169,"style":169},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[22,101012,101013,101027,101035],{"__ignoreMap":169},[252,101014,101015,101018,101021,101024],{"class":254,"line":255},[252,101016,101017],{"class":2102},"python3",[252,101019,101020],{"class":311}," -m",[252,101022,101023],{"class":367}," venv",[252,101025,101026],{"class":367}," .venv\n",[252,101028,101029,101032],{"class":254,"line":170},[252,101030,101031],{"class":311},"source",[252,101033,101034],{"class":367}," .venv\u002Fbin\u002Factivate\n",[252,101036,101037,101039,101041,101044,101046,101049],{"class":254,"line":1318},[252,101038,30520],{"class":2102},[252,101040,101020],{"class":311},[252,101042,101043],{"class":367}," pip",[252,101045,23973],{"class":367},[252,101047,101048],{"class":311}," --upgrade",[252,101050,101051],{"class":367}," pip\n",[19,101053,101054],{},"pip 安装:",[244,101056,101058],{"className":23961,"code":101057,"language":23963,"meta":169,"style":169},"pip install \"mujoco>=2.3\" numpy\n",[22,101059,101060],{"__ignoreMap":169},[252,101061,101062,101064,101066,101069],{"class":254,"line":255},[252,101063,23970],{"class":2102},[252,101065,23973],{"class":367},[252,101067,101068],{"class":367}," \"mujoco>=2.3\"",[252,101070,101071],{"class":367}," numpy\n",[19,101073,101074],{},"安装完成后，先做最小检查：",[244,101076,101078],{"className":23961,"code":101077,"language":23963,"meta":169,"style":169},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[22,101079,101080],{"__ignoreMap":169},[252,101081,101082,101084,101086],{"class":254,"line":255},[252,101083,30520],{"class":2102},[252,101085,30498],{"class":311},[252,101087,101088],{"class":367}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101090,101091],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101093,101094],{},"conda 安装:",[244,101096,101098],{"className":23961,"code":101097,"language":23963,"meta":169,"style":169},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[22,101099,101100,101120,101130],{"__ignoreMap":169},[252,101101,101102,101104,101106,101108,101111,101114,101117],{"class":254,"line":255},[252,101103,30470],{"class":2102},[252,101105,29316],{"class":367},[252,101107,25255],{"class":311},[252,101109,101110],{"class":367}," mujoco-study",[252,101112,101113],{"class":367}," python=",[252,101115,101116],{"class":311},"3.10",[252,101118,101119],{"class":311}," -y\n",[252,101121,101122,101124,101127],{"class":254,"line":170},[252,101123,30470],{"class":2102},[252,101125,101126],{"class":367}," activate",[252,101128,101129],{"class":367}," mujoco-study\n",[252,101131,101132,101134,101136,101138],{"class":254,"line":1318},[252,101133,23970],{"class":2102},[252,101135,23973],{"class":367},[252,101137,101068],{"class":367},[252,101139,101071],{"class":367},[19,101141,101142],{},"版本冲突说明:",[207,101144,101145,101151,101160,101169],{},[210,101146,101147,101148,28525],{},"不要安装 ",[22,101149,101150],{},"mujoco-py",[210,101152,101153,101154,132,101156,101159],{},"如果旧项目里同时安装了 ",[22,101155,101150],{},[22,101157,101158],{},"mujoco","，建议新建干净虚拟环境。",[210,101161,101162,101165,101166,28525],{},[22,101163,101164],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[22,101167,101168],{},"~\u002F.mujoco\u002Fmujoco210",[210,101170,101171,101172,84,101175,101178],{},"离屏渲染可能涉及 OpenGL 后端，",[22,101173,101174],{},"MUJOCO_GL=egl",[22,101176,101177],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101180,101182],{"id":101181},"_3核心概念解释","3.核心概念解释",[19,101184,101185],{},"MuJoCo 的基本执行流程:",[244,101187,101190],{"className":101188,"code":101189,"language":5327,"meta":169},[5325],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[22,101191,101189],{"__ignoreMap":169},[19,101193,101194,101196],{},[22,101195,100847],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101198,101199,101201,101202,475,101205,475,101208,475,101211,475,101214,28525],{},[22,101200,100857],{}," 存放仿真运行时状态，例如 ",[22,101203,101204],{},"data.time",[22,101206,101207],{},"data.qpos",[22,101209,101210],{},"data.qvel",[22,101212,101213],{},"data.ctrl",[22,101215,101216],{},"data.xpos",[224,101218,101220],{"id":101219},"xml-是什么","XML 是什么",[19,101222,101223],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[244,101225,101227],{"className":53207,"code":101226,"language":53209,"meta":169,"style":169},"\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",[22,101228,101229,101251,101282],{"__ignoreMap":169},[252,101230,101231,101233,101235,101237,101239,101241,101244,101246,101249],{"class":254,"line":255},[252,101232,1173],{"class":262},[252,101234,51940],{"class":51440},[252,101236,15060],{"class":2102},[252,101238,308],{"class":262},[252,101240,53631],{"class":367},[252,101242,101243],{"class":2102}," pos",[252,101245,308],{"class":262},[252,101247,101248],{"class":367},"\"0 0 1\"",[252,101250,51447],{"class":262},[252,101252,101253,101255,101258,101260,101262,101265,101267,101269,101271,101274,101276,101279],{"class":254,"line":170},[252,101254,52284],{"class":262},[252,101256,101257],{"class":51440},"geom",[252,101259,15060],{"class":2102},[252,101261,308],{"class":262},[252,101263,101264],{"class":367},"\"box_geom\"",[252,101266,53964],{"class":2102},[252,101268,308],{"class":262},[252,101270,53631],{"class":367},[252,101272,101273],{"class":2102}," size",[252,101275,308],{"class":262},[252,101277,101278],{"class":367},"\"0.1 0.1 0.1\"",[252,101280,101281],{"class":262},"\u002F>\n",[252,101283,101284,101286,101288],{"class":254,"line":1318},[252,101285,51925],{"class":262},[252,101287,51940],{"class":51440},[252,101289,51447],{"class":262},[19,101291,101292],{},"这段意思是：",[207,101294,101295,101301,101308],{},[210,101296,101297,101298,101300],{},"创建一个叫 ",[22,101299,53854],{}," 的刚体。",[210,101302,101303,101304,101307],{},"它初始放在 ",[22,101305,101306],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[210,101309,101310],{},"它里面有一个盒子形状的几何体。",[224,101312,101314],{"id":101313},"timestep-是什么","timestep 是什么",[19,101316,101317],{},"XML 里的：",[244,101319,101321],{"className":53207,"code":101320,"language":53209,"meta":169,"style":169},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[22,101322,101323],{"__ignoreMap":169},[252,101324,101325,101327,101329,101332,101334,101337,101340,101342,101345],{"class":254,"line":255},[252,101326,1173],{"class":262},[252,101328,69306],{"class":51440},[252,101330,101331],{"class":2102}," timestep",[252,101333,308],{"class":262},[252,101335,101336],{"class":367},"\"0.01\"",[252,101338,101339],{"class":2102}," gravity",[252,101341,308],{"class":262},[252,101343,101344],{"class":367},"\"0 0 -9.81\"",[252,101346,101281],{"class":262},[19,101348,101349,101350,101353,101354,101356],{},"表示每调用一次 ",[22,101351,101352],{},"mj_step","，仿真时间前进 ",[22,101355,39126],{}," 秒。循环 100 次，大约就是 1 秒：",[244,101358,101361],{"className":101359,"code":101360,"language":5327,"meta":169},[5325],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[22,101362,101360],{"__ignoreMap":169},[224,101364,101366],{"id":101365},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101368,101369],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[244,101371,101374],{"className":101372,"code":101373,"language":5327,"meta":169},[5325],"x y z qw qx qy qz\n",[22,101375,101373],{"__ignoreMap":169},[19,101377,101378,101379,101382,101383,101386],{},"表示一个自由刚体的位置和姿态。其中 ",[22,101380,101381],{},"x y z"," 是位置，",[22,101384,101385],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101388,101390],{"id":101389},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101392,101393],{},"新建文件:",[244,101395,101397],{"className":23961,"code":101396,"language":23963,"meta":169,"style":169},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[22,101398,101399,101409,101416],{"__ignoreMap":169},[252,101400,101401,101404,101406],{"class":254,"line":255},[252,101402,101403],{"class":2102},"mkdir",[252,101405,29356],{"class":311},[252,101407,101408],{"class":367}," mujoco_tutorial\n",[252,101410,101411,101414],{"class":254,"line":170},[252,101412,101413],{"class":311},"cd",[252,101415,101408],{"class":367},[252,101417,101418,101421],{"class":254,"line":1318},[252,101419,101420],{"class":2102},"touch",[252,101422,101423],{"class":367}," ch1_first_sim.py\n",[19,101425,101426],{},"写入:",[244,101428,101430],{"className":30518,"code":101429,"language":30520,"meta":169,"style":169},"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",[22,101431,101432,101439,101443,101447,101457,101462,101467,101471,101476,101481,101485,101490,101495,101500,101505,101510,101515,101519,101523,101527,101540,101554,101564,101568,101580,101592,101604,101616,101628,101632,101649,101654,101658,101669,101680,101684,101688,101702],{"__ignoreMap":169},[252,101433,101434,101436],{"class":254,"line":255},[252,101435,30532],{"class":258},[252,101437,101438],{"class":262}," mujoco\n",[252,101440,101441],{"class":254,"line":170},[252,101442,2539],{"emptyLinePlaceholder":181},[252,101444,101445],{"class":254,"line":1318},[252,101446,2539],{"emptyLinePlaceholder":181},[252,101448,101449,101452,101454],{"class":254,"line":1333},[252,101450,101451],{"class":311},"XML",[252,101453,13704],{"class":258},[252,101455,101456],{"class":367}," \"\"\"\n",[252,101458,101459],{"class":254,"line":1339},[252,101460,101461],{"class":367},"\u003Cmujoco model=\"first_sim\">\n",[252,101463,101464],{"class":254,"line":1353},[252,101465,101466],{"class":367},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[252,101468,101469],{"class":254,"line":1359},[252,101470,2539],{"emptyLinePlaceholder":181},[252,101472,101473],{"class":254,"line":1450},[252,101474,101475],{"class":367},"  \u003Cworldbody>\n",[252,101477,101478],{"class":254,"line":1456},[252,101479,101480],{"class":367},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[252,101482,101483],{"class":254,"line":1468},[252,101484,2539],{"emptyLinePlaceholder":181},[252,101486,101487],{"class":254,"line":1751},[252,101488,101489],{"class":367},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[252,101491,101492],{"class":254,"line":1756},[252,101493,101494],{"class":367},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[252,101496,101497],{"class":254,"line":1762},[252,101498,101499],{"class":367},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[252,101501,101502],{"class":254,"line":1767},[252,101503,101504],{"class":367},"    \u003C\u002Fbody>\n",[252,101506,101507],{"class":254,"line":1781},[252,101508,101509],{"class":367},"  \u003C\u002Fworldbody>\n",[252,101511,101512],{"class":254,"line":1786},[252,101513,101514],{"class":367},"\u003C\u002Fmujoco>\n",[252,101516,101517],{"class":254,"line":1792},[252,101518,95836],{"class":367},[252,101520,101521],{"class":254,"line":1813},[252,101522,2539],{"emptyLinePlaceholder":181},[252,101524,101525],{"class":254,"line":1818},[252,101526,2539],{"emptyLinePlaceholder":181},[252,101528,101529,101531,101533,101536,101538],{"class":254,"line":1832},[252,101530,32087],{"class":258},[252,101532,2112],{"class":2102},[252,101534,101535],{"class":262},"() -> ",[252,101537,95824],{"class":311},[252,101539,3878],{"class":262},[252,101541,101542,101545,101547,101550,101552],{"class":254,"line":1837},[252,101543,101544],{"class":262},"    model ",[252,101546,308],{"class":258},[252,101548,101549],{"class":262}," mujoco.MjModel.from_xml_string(",[252,101551,101451],{"class":311},[252,101553,269],{"class":262},[252,101555,101556,101559,101561],{"class":254,"line":1866},[252,101557,101558],{"class":262},"    data ",[252,101560,308],{"class":258},[252,101562,101563],{"class":262}," mujoco.MjData(model)\n",[252,101565,101566],{"class":254,"line":1871},[252,101567,2539],{"emptyLinePlaceholder":181},[252,101569,101570,101572,101574,101577],{"class":254,"line":1888},[252,101571,31439],{"class":311},[252,101573,263],{"class":262},[252,101575,101576],{"class":367},"\"nq:\"",[252,101578,101579],{"class":262},", model.nq)\n",[252,101581,101582,101584,101586,101589],{"class":254,"line":1893},[252,101583,31439],{"class":311},[252,101585,263],{"class":262},[252,101587,101588],{"class":367},"\"nv:\"",[252,101590,101591],{"class":262},", model.nv)\n",[252,101593,101594,101596,101598,101601],{"class":254,"line":1898},[252,101595,31439],{"class":311},[252,101597,263],{"class":262},[252,101599,101600],{"class":367},"\"nu:\"",[252,101602,101603],{"class":262},", model.nu)\n",[252,101605,101606,101608,101610,101613],{"class":254,"line":1903},[252,101607,31439],{"class":311},[252,101609,263],{"class":262},[252,101611,101612],{"class":367},"\"initial time:\"",[252,101614,101615],{"class":262},", data.time)\n",[252,101617,101618,101620,101622,101625],{"class":254,"line":1917},[252,101619,31439],{"class":311},[252,101621,263],{"class":262},[252,101623,101624],{"class":367},"\"initial qpos:\"",[252,101626,101627],{"class":262},", data.qpos.copy())\n",[252,101629,101630],{"class":254,"line":1922},[252,101631,2539],{"emptyLinePlaceholder":181},[252,101633,101634,101636,101639,101641,101643,101645,101647],{"class":254,"line":2716},[252,101635,3340],{"class":258},[252,101637,101638],{"class":262}," _ ",[252,101640,26183],{"class":258},[252,101642,32583],{"class":311},[252,101644,263],{"class":262},[252,101646,574],{"class":311},[252,101648,30926],{"class":262},[252,101650,101651],{"class":254,"line":2730},[252,101652,101653],{"class":262},"        mujoco.mj_step(model, data)\n",[252,101655,101656],{"class":254,"line":2738},[252,101657,2539],{"emptyLinePlaceholder":181},[252,101659,101660,101662,101664,101667],{"class":254,"line":2743},[252,101661,31439],{"class":311},[252,101663,263],{"class":262},[252,101665,101666],{"class":367},"\"final time:\"",[252,101668,101615],{"class":262},[252,101670,101671,101673,101675,101678],{"class":254,"line":2749},[252,101672,31439],{"class":311},[252,101674,263],{"class":262},[252,101676,101677],{"class":367},"\"final qpos:\"",[252,101679,101627],{"class":262},[252,101681,101682],{"class":254,"line":2755},[252,101683,2539],{"emptyLinePlaceholder":181},[252,101685,101686],{"class":254,"line":2760},[252,101687,2539],{"emptyLinePlaceholder":181},[252,101689,101690,101692,101694,101697,101700],{"class":254,"line":8088},[252,101691,1670],{"class":258},[252,101693,31360],{"class":311},[252,101695,101696],{"class":258}," ==",[252,101698,101699],{"class":367}," \"__main__\"",[252,101701,3878],{"class":262},[252,101703,101704],{"class":254,"line":8112},[252,101705,101706],{"class":262},"    main()\n",[224,101708,101709],{"id":101709},"代码逐段解释",[19,101711,101712],{},"导入库：",[244,101714,101716],{"className":30518,"code":101715,"language":30520,"meta":169,"style":169},"import mujoco\n",[22,101717,101718],{"__ignoreMap":169},[252,101719,101720,101722],{"class":254,"line":255},[252,101721,30532],{"class":258},[252,101723,101438],{"class":262},[19,101725,101726],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101728,101729],{},"定义 XML：",[244,101731,101733],{"className":30518,"code":101732,"language":30520,"meta":169,"style":169},"XML = \"\"\"\n...\n\"\"\"\n",[22,101734,101735,101743,101748],{"__ignoreMap":169},[252,101736,101737,101739,101741],{"class":254,"line":255},[252,101738,101451],{"class":311},[252,101740,13704],{"class":258},[252,101742,101456],{"class":367},[252,101744,101745],{"class":254,"line":170},[252,101746,101747],{"class":367},"...\n",[252,101749,101750],{"class":254,"line":1318},[252,101751,95836],{"class":367},[19,101753,101754,101755,101758],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[22,101756,101757],{},"freejoint"," 的方块。",[19,101760,101761],{},"编译模型：",[244,101763,101765],{"className":30518,"code":101764,"language":30520,"meta":169,"style":169},"model = mujoco.MjModel.from_xml_string(XML)\n",[22,101766,101767],{"__ignoreMap":169},[252,101768,101769,101772,101774,101776,101778],{"class":254,"line":255},[252,101770,101771],{"class":262},"model ",[252,101773,308],{"class":258},[252,101775,101549],{"class":262},[252,101777,101451],{"class":311},[252,101779,269],{"class":262},[19,101781,101782],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,101784,101785],{},"创建数据：",[244,101787,101789],{"className":30518,"code":101788,"language":30520,"meta":169,"style":169},"data = mujoco.MjData(model)\n",[22,101790,101791],{"__ignoreMap":169},[252,101792,101793,101796,101798],{"class":254,"line":255},[252,101794,101795],{"class":262},"data ",[252,101797,308],{"class":258},[252,101799,101563],{"class":262},[19,101801,101802,101804,101805,101807],{},[22,101803,33541],{}," 会保存仿真当前状态。刚创建时，时间是 ",[22,101806,454],{},"，方块还在初始位置。",[19,101809,101810],{},"推进仿真：",[244,101812,101814],{"className":30518,"code":101813,"language":30520,"meta":169,"style":169},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[22,101815,101816,101832],{"__ignoreMap":169},[252,101817,101818,101820,101822,101824,101826,101828,101830],{"class":254,"line":255},[252,101819,3164],{"class":258},[252,101821,101638],{"class":262},[252,101823,26183],{"class":258},[252,101825,32583],{"class":311},[252,101827,263],{"class":262},[252,101829,574],{"class":311},[252,101831,30926],{"class":262},[252,101833,101834],{"class":254,"line":170},[252,101835,101836],{"class":262},"    mujoco.mj_step(model, data)\n",[19,101838,101839,101840,101842],{},"每次 ",[22,101841,101352],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[224,101844,101845],{"id":101845},"代码逐行细讲",[19,101847,101848],{},"下面把完整代码按新手视角拆开讲。",[244,101850,101851],{"className":30518,"code":101715,"language":30520,"meta":169,"style":169},[22,101852,101853],{"__ignoreMap":169},[252,101854,101855,101857],{"class":254,"line":255},[252,101856,30532],{"class":258},[252,101858,101438],{"class":262},[19,101860,101861,101863,101864,475,101866,475,101868,28525],{},[22,101862,30532],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[22,101865,100813],{},[22,101867,100818],{},[22,101869,101870],{},"mujoco.mj_step",[244,101872,101873],{"className":30518,"code":101732,"language":30520,"meta":169,"style":169},[22,101874,101875,101883,101887],{"__ignoreMap":169},[252,101876,101877,101879,101881],{"class":254,"line":255},[252,101878,101451],{"class":311},[252,101880,13704],{"class":258},[252,101882,101456],{"class":367},[252,101884,101885],{"class":254,"line":170},[252,101886,101747],{"class":367},[252,101888,101889],{"class":254,"line":1318},[252,101890,95836],{"class":367},[19,101892,101893,101895,101896,101899],{},[22,101894,101451],{}," 是一个变量名。右边的三引号 ",[22,101897,101898],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[244,101901,101902],{"className":53207,"code":101461,"language":53209,"meta":169,"style":169},[22,101903,101904],{"__ignoreMap":169},[252,101905,101906,101908,101910,101913,101915,101918],{"class":254,"line":255},[252,101907,1173],{"class":262},[252,101909,101158],{"class":51440},[252,101911,101912],{"class":2102}," model",[252,101914,308],{"class":262},[252,101916,101917],{"class":367},"\"first_sim\"",[252,101919,51447],{"class":262},[19,101921,101922,101923,101926,101927,28525],{},"这是 XML 的根标签。",[22,101924,101925],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[22,101928,101929],{},"first_sim",[244,101931,101932],{"className":53207,"code":101320,"language":53209,"meta":169,"style":169},[22,101933,101934],{"__ignoreMap":169},[252,101935,101936,101938,101940,101942,101944,101946,101948,101950,101952],{"class":254,"line":255},[252,101937,1173],{"class":262},[252,101939,69306],{"class":51440},[252,101941,101331],{"class":2102},[252,101943,308],{"class":262},[252,101945,101336],{"class":367},[252,101947,101339],{"class":2102},[252,101949,308],{"class":262},[252,101951,101344],{"class":367},[252,101953,101281],{"class":262},[19,101955,101956,101958,101959,101962,101963,101966],{},[22,101957,69306],{}," 用来设置仿真参数。",[22,101960,101961],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[22,101964,101965],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[244,101968,101970],{"className":53207,"code":101969,"language":53209,"meta":169,"style":169},"\u003Cworldbody>\n",[22,101971,101972],{"__ignoreMap":169},[252,101973,101974,101976,101979],{"class":254,"line":255},[252,101975,1173],{"class":262},[252,101977,101978],{"class":51440},"worldbody",[252,101980,51447],{"class":262},[19,101982,101983,101985],{},[22,101984,101978],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[244,101987,101989],{"className":53207,"code":101988,"language":53209,"meta":169,"style":169},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[22,101990,101991],{"__ignoreMap":169},[252,101992,101993,101995,101997,101999,102001,102004,102006,102008,102011,102013,102015,102018,102020,102022,102025],{"class":254,"line":255},[252,101994,1173],{"class":262},[252,101996,101257],{"class":51440},[252,101998,15060],{"class":2102},[252,102000,308],{"class":262},[252,102002,102003],{"class":367},"\"floor\"",[252,102005,53964],{"class":2102},[252,102007,308],{"class":262},[252,102009,102010],{"class":367},"\"plane\"",[252,102012,101273],{"class":2102},[252,102014,308],{"class":262},[252,102016,102017],{"class":367},"\"2 2 0.1\"",[252,102019,78906],{"class":2102},[252,102021,308],{"class":262},[252,102023,102024],{"class":367},"\"0.8 0.8 0.8 1\"",[252,102026,101281],{"class":262},[19,102028,102029,102030,102032,102033,102036,102037,102040,102041,102043],{},"这行创建地面。",[22,102031,101257],{}," 是几何体。",[22,102034,102035],{},"name=\"floor\""," 是名字。",[22,102038,102039],{},"type=\"plane\""," 表示平面。",[22,102042,55250],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[244,102045,102047],{"className":53207,"code":102046,"language":53209,"meta":169,"style":169},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[22,102048,102049],{"__ignoreMap":169},[252,102050,102051,102053,102055,102057,102059,102061,102063,102065,102067],{"class":254,"line":255},[252,102052,1173],{"class":262},[252,102054,51940],{"class":51440},[252,102056,15060],{"class":2102},[252,102058,308],{"class":262},[252,102060,53631],{"class":367},[252,102062,101243],{"class":2102},[252,102064,308],{"class":262},[252,102066,101248],{"class":367},[252,102068,51447],{"class":262},[19,102070,102071,102072,28525,102074,102077,102078,102080],{},"这行创建一个刚体，名字叫 ",[22,102073,53854],{},[22,102075,102076],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[22,102079,101306],{},"，也就是离地面 1 米高。",[244,102082,102084],{"className":53207,"code":102083,"language":53209,"meta":169,"style":169},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[22,102085,102086],{"__ignoreMap":169},[252,102087,102088,102090,102092,102094,102096,102099],{"class":254,"line":255},[252,102089,1173],{"class":262},[252,102091,101757],{"class":51440},[252,102093,15060],{"class":2102},[252,102095,308],{"class":262},[252,102097,102098],{"class":367},"\"box_free\"",[252,102100,101281],{"class":262},[19,102102,102103,102104,102106],{},"这行很重要。",[22,102105,101757],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[244,102108,102110],{"className":53207,"code":102109,"language":53209,"meta":169,"style":169},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[22,102111,102112],{"__ignoreMap":169},[252,102113,102114,102116,102118,102120,102122,102124,102126,102128,102130,102132,102134,102136,102139,102141,102143,102145,102147,102150],{"class":254,"line":255},[252,102115,1173],{"class":262},[252,102117,101257],{"class":51440},[252,102119,15060],{"class":2102},[252,102121,308],{"class":262},[252,102123,101264],{"class":367},[252,102125,53964],{"class":2102},[252,102127,308],{"class":262},[252,102129,53631],{"class":367},[252,102131,101273],{"class":2102},[252,102133,308],{"class":262},[252,102135,101278],{"class":367},[252,102137,102138],{"class":2102}," mass",[252,102140,308],{"class":262},[252,102142,3817],{"class":367},[252,102144,78906],{"class":2102},[252,102146,308],{"class":262},[252,102148,102149],{"class":367},"\"1 0 0 1\"",[252,102151,101281],{"class":262},[19,102153,102154,102155,102158,102159,102162,102163,102166,102167,102170],{},"这行给 box body 添加一个盒子形状。",[22,102156,102157],{},"type=\"box\""," 表示形状是盒子。",[22,102160,102161],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[22,102164,102165],{},"mass=\"1\""," 表示质量是 1。",[22,102168,102169],{},"rgba=\"1 0 0 1\""," 表示红色。",[244,102172,102174],{"className":30518,"code":102173,"language":30520,"meta":169,"style":169},"def main() -> None:\n",[22,102175,102176],{"__ignoreMap":169},[252,102177,102178,102180,102182,102184,102186],{"class":254,"line":255},[252,102179,32087],{"class":258},[252,102181,2112],{"class":2102},[252,102183,101535],{"class":262},[252,102185,95824],{"class":311},[252,102187,3878],{"class":262},[19,102189,102190,102192,102193,102196,102197,102200],{},[22,102191,32087],{}," 用来定义函数。这里定义了一个叫 ",[22,102194,102195],{},"main"," 的函数。",[22,102198,102199],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[244,102202,102203],{"className":30518,"code":101764,"language":30520,"meta":169,"style":169},[22,102204,102205],{"__ignoreMap":169},[252,102206,102207,102209,102211,102213,102215],{"class":254,"line":255},[252,102208,101771],{"class":262},[252,102210,308],{"class":258},[252,102212,101549],{"class":262},[252,102214,101451],{"class":311},[252,102216,269],{"class":262},[19,102218,102219,102220,102223],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[22,102221,102222],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[244,102225,102226],{"className":30518,"code":101788,"language":30520,"meta":169,"style":169},[22,102227,102228],{"__ignoreMap":169},[252,102229,102230,102232,102234],{"class":254,"line":255},[252,102231,101795],{"class":262},[252,102233,308],{"class":258},[252,102235,101563],{"class":262},[19,102237,102238,102239,102241,102242,102244],{},"这行创建仿真数据。",[22,102240,33541],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[22,102243,33541],{}," 都会变化。",[244,102246,102248],{"className":30518,"code":102247,"language":30520,"meta":169,"style":169},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[22,102249,102250,102260,102270],{"__ignoreMap":169},[252,102251,102252,102254,102256,102258],{"class":254,"line":255},[252,102253,30555],{"class":311},[252,102255,263],{"class":262},[252,102257,101576],{"class":367},[252,102259,101579],{"class":262},[252,102261,102262,102264,102266,102268],{"class":254,"line":170},[252,102263,30555],{"class":311},[252,102265,263],{"class":262},[252,102267,101588],{"class":367},[252,102269,101591],{"class":262},[252,102271,102272,102274,102276,102278],{"class":254,"line":1318},[252,102273,30555],{"class":311},[252,102275,263],{"class":262},[252,102277,101600],{"class":367},[252,102279,101603],{"class":262},[19,102281,102282,102284,102285,102288,102289,102292,102293,102296,102297,102300],{},[22,102283,30555],{}," 用来输出信息。",[22,102286,102287],{},"model.nq"," 是位置变量数量，",[22,102290,102291],{},"model.nv"," 是速度变量数量，",[22,102294,102295],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[22,102298,102299],{},"nu"," 是 0。",[244,102302,102304],{"className":30518,"code":102303,"language":30520,"meta":169,"style":169},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[22,102305,102306,102316],{"__ignoreMap":169},[252,102307,102308,102310,102312,102314],{"class":254,"line":255},[252,102309,30555],{"class":311},[252,102311,263],{"class":262},[252,102313,101612],{"class":367},[252,102315,101615],{"class":262},[252,102317,102318,102320,102322,102324],{"class":254,"line":170},[252,102319,30555],{"class":311},[252,102321,263],{"class":262},[252,102323,101624],{"class":367},[252,102325,101627],{"class":262},[19,102327,102328,102329,102331,102332,102334,102335,102338],{},"这里打印初始时间和初始位置。",[22,102330,101204],{}," 一开始是 0。",[22,102333,101207],{}," 是位置数组。",[22,102336,102337],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[244,102340,102341],{"className":30518,"code":101813,"language":30520,"meta":169,"style":169},[22,102342,102343,102359],{"__ignoreMap":169},[252,102344,102345,102347,102349,102351,102353,102355,102357],{"class":254,"line":255},[252,102346,3164],{"class":258},[252,102348,101638],{"class":262},[252,102350,26183],{"class":258},[252,102352,32583],{"class":311},[252,102354,263],{"class":262},[252,102356,574],{"class":311},[252,102358,30926],{"class":262},[252,102360,102361],{"class":254,"line":170},[252,102362,101836],{"class":262},[19,102364,102365,102367,102368,102371,102372,102374,102375,102377],{},[22,102366,3164],{}," 是循环。",[22,102369,102370],{},"range(100)"," 表示循环 100 次。",[22,102373,1255],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[22,102376,101352],{},"，仿真就前进一步。",[244,102379,102381],{"className":30518,"code":102380,"language":30520,"meta":169,"style":169},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[22,102382,102383,102393],{"__ignoreMap":169},[252,102384,102385,102387,102389,102391],{"class":254,"line":255},[252,102386,30555],{"class":311},[252,102388,263],{"class":262},[252,102390,101666],{"class":367},[252,102392,101615],{"class":262},[252,102394,102395,102397,102399,102401],{"class":254,"line":170},[252,102396,30555],{"class":311},[252,102398,263],{"class":262},[252,102400,101677],{"class":367},[252,102402,101627],{"class":262},[19,102404,102405],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[244,102407,102409],{"className":30518,"code":102408,"language":30520,"meta":169,"style":169},"if __name__ == \"__main__\":\n    main()\n",[22,102410,102411,102423],{"__ignoreMap":169},[252,102412,102413,102415,102417,102419,102421],{"class":254,"line":255},[252,102414,1670],{"class":258},[252,102416,31360],{"class":311},[252,102418,101696],{"class":258},[252,102420,101699],{"class":367},[252,102422,3878],{"class":262},[252,102424,102425],{"class":254,"line":170},[252,102426,101706],{"class":262},[19,102428,102429,102430,102433,102434,28525],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[22,102431,102432],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[22,102435,102432],{},[19,102437,102438],{},"运行:",[244,102440,102442],{"className":23961,"code":102441,"language":23963,"meta":169,"style":169},"python ch1_first_sim.py\n",[22,102443,102444],{"__ignoreMap":169},[252,102445,102446,102448],{"class":254,"line":255},[252,102447,30520],{"class":2102},[252,102449,101423],{"class":367},[14,102451,102453],{"id":102452},"_5运行结果说明","5.运行结果说明",[19,102455,102456],{},"你应该看到类似输出:",[244,102458,102461],{"className":102459,"code":102460,"language":5327,"meta":169},[5325],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[22,102462,102460],{"__ignoreMap":169},[19,102464,102465,102467,102468,102471,102472,28525],{},[22,102466,101757],{}," 有 7 个位置变量: ",[22,102469,102470],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[22,102473,102474],{},"vx vy vz wx wy wz",[19,102476,102477,102478,102481],{},"你还会看到 ",[22,102479,102480],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102483,102485],{"id":102484},"_6验证步骤","6.验证步骤",[19,102487,102488],{},"确认版本:",[244,102490,102491],{"className":23961,"code":101077,"language":23963,"meta":169,"style":169},[22,102492,102493],{"__ignoreMap":169},[252,102494,102495,102497,102499],{"class":254,"line":255},[252,102496,30520],{"class":2102},[252,102498,30498],{"class":311},[252,102500,101088],{"class":367},[19,102502,102503],{},"确认导入的是官方 bindings:",[244,102505,102507],{"className":23961,"code":102506,"language":23963,"meta":169,"style":169},"python -c \"import mujoco; print(mujoco)\"\n",[22,102508,102509],{"__ignoreMap":169},[252,102510,102511,102513,102515],{"class":254,"line":255},[252,102512,30520],{"class":2102},[252,102514,30498],{"class":311},[252,102516,102517],{"class":367}," \"import mujoco; print(mujoco)\"\n",[19,102519,102520],{},"运行程序:",[244,102522,102523],{"className":23961,"code":102441,"language":23963,"meta":169,"style":169},[22,102524,102525],{"__ignoreMap":169},[252,102526,102527,102529],{"class":254,"line":255},[252,102528,30520],{"class":2102},[252,102530,101423],{"class":367},[19,102532,102533,102534,102537,102538,28525],{},"检查 ",[22,102535,102536],{},"final time"," 是否约等于 ",[22,102539,102540],{},"1.0",[19,102542,102543],{},"再做几个小实验：",[207,102545,102546,102556,102564,102577],{},[210,102547,102548,102549,102551,102552,102555],{},"把 ",[22,102550,102076],{}," 改成 ",[22,102553,102554],{},"pos=\"0 0 2\"","，观察初始高度变化。",[210,102557,102548,102558,102551,102560,102563],{},[22,102559,101965],{},[22,102561,102562],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[210,102565,102548,102566,102551,102568,102571,102572,102574,102575,28525],{},[22,102567,101961],{},[22,102569,102570],{},"timestep=\"0.005\"","，观察 100 步后的 ",[22,102573,102536],{}," 是否变成约 ",[22,102576,35469],{},[210,102578,102579,102580,102583],{},"删除 ",[22,102581,102582],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102585,102586],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102588,102590],{"id":102589},"_7常见错误与解决方案","7.常见错误与解决方案",[224,102592,102594],{"id":102593},"modulenotfounderror-no-module-named-mujoco",[22,102595,102596],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102598,102599],{},"解决:",[244,102601,102603],{"className":23961,"code":102602,"language":23963,"meta":169,"style":169},"pip install \"mujoco>=2.3\"\n",[22,102604,102605],{"__ignoreMap":169},[252,102606,102607,102609,102611],{"class":254,"line":255},[252,102608,23970],{"class":2102},[252,102610,23973],{"class":367},[252,102612,102613],{"class":367}," \"mujoco>=2.3\"\n",[224,102615,102617],{"id":102616},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102619,102620],{},"先安装系统依赖:",[244,102622,102624],{"className":23961,"code":102623,"language":23963,"meta":169,"style":169},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[22,102625,102626],{"__ignoreMap":169},[252,102627,102628,102630,102632,102634,102636,102639,102641,102644,102646,102649,102651],{"class":254,"line":255},[252,102629,24716],{"class":2102},[252,102631,26455],{"class":367},[252,102633,23973],{"class":367},[252,102635,26540],{"class":311},[252,102637,102638],{"class":367}," mesa-libGL",[252,102640,100952],{"class":367},[252,102642,102643],{"class":367}," glfw",[252,102645,100972],{"class":367},[252,102647,102648],{"class":367}," libX11",[252,102650,100985],{"class":367},[252,102652,102653],{"class":367}," libXrandr\n",[224,102655,102657],{"id":102656},"xml-解析失败","XML 解析失败",[19,102659,102660],{},"检查:",[207,102662,102663,102666,102669,102675],{},[210,102664,102665],{},"标签是否闭合",[210,102667,102668],{},"属性是否带引号",[210,102670,102671,102672],{},"根节点是否是 ",[22,102673,102674],{},"\u003Cmujoco>",[210,102676,102677,102679,102680,102683],{},[22,102678,51940],{}," 是否放在 ",[22,102681,102682],{},"\u003Cworldbody>"," 内部",[224,102685,102687,102689,102690],{"id":102686},"final-time-不是严格等于-10",[22,102688,102536],{}," 不是严格等于 ",[22,102691,102540],{},[19,102693,102694],{},"这通常不是错误。浮点数计算可能得到：",[244,102696,102699],{"className":102697,"code":102698,"language":5327,"meta":169},[5325],"1.0000000000000007\n",[22,102700,102698],{"__ignoreMap":169},[19,102702,102703,102704,102706],{},"只要接近 ",[22,102705,102540],{}," 就正常。",[224,102708,102709],{"id":102709},"方块没有掉下来",[19,102711,102712],{},"检查：",[207,102714,102715,102721,102727,102732],{},[210,102716,102717,102718],{},"方块 body 里是否有 ",[22,102719,102720],{},"\u003Cfreejoint\u002F>",[210,102722,102723,102724],{},"重力是否是 ",[22,102725,102726],{},"0 0 -9.81",[210,102728,102729,102730],{},"是否真的调用了 ",[22,102731,100823],{},[210,102733,102734,102735,102737,102738],{},"你看的是否是 ",[22,102736,102480],{},"，不是 ",[22,102739,102740],{},"initial qpos",[14,102742,102744],{"id":102743},"_8本章小结","8.本章小结",[19,102746,102747],{},"本章你已经完成了 MuJoCo 的最小闭环：",[244,102749,102752],{"className":102750,"code":102751,"language":5327,"meta":169},[5325],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[22,102753,102751],{"__ignoreMap":169},[19,102755,102756],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5266,102758,102759],{},"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":169,"searchDepth":170,"depth":170,"links":102761},[102762,102763,102764,102769,102773,102774,102775,102783],{"id":100784,"depth":170,"text":100785},{"id":100907,"depth":170,"text":100908},{"id":101181,"depth":170,"text":101182,"children":102765},[102766,102767,102768],{"id":101219,"depth":1318,"text":101220},{"id":101313,"depth":1318,"text":101314},{"id":101365,"depth":1318,"text":101366},{"id":101389,"depth":170,"text":101390,"children":102770},[102771,102772],{"id":101709,"depth":1318,"text":101709},{"id":101845,"depth":1318,"text":101845},{"id":102452,"depth":170,"text":102453},{"id":102484,"depth":170,"text":102485},{"id":102589,"depth":170,"text":102590,"children":102776},[102777,102778,102779,102780,102782],{"id":102593,"depth":1318,"text":102596},{"id":102616,"depth":1318,"text":102617},{"id":102656,"depth":1318,"text":102657},{"id":102686,"depth":1318,"text":102781},"final time 不是严格等于 1.0",{"id":102709,"depth":1318,"text":102709},{"id":102743,"depth":170,"text":102744},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100776,"description":169},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102790,"title":102791,"body":102792,"description":169,"extension":179,"meta":104447,"navigation":181,"path":104448,"seo":104449,"stem":104450,"__hash__":104451},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102793,"toc":104423},[102794,102797,102799,102802,102805,102822,102916,102919,102925,102927,102929,102953,102956,102970,102973,103014,103016,103029,103031,103034,103082,103094,103097,103100,103106,103119,103186,103189,103208,103211,103214,103220,103222,103231,103234,103238,103247,103329,103338,103342,103348,103362,103372,103374,103704,103707,103719,103721,103732,103734,103737,103755,103758,103761,103779,103790,103793,103808,103818,103820,103841,103858,103878,103884,103924,103940,103956,103962,103965,103989,104005,104010,104040,104057,104082,104085,104100,104109,104124,104133,104148,104155,104157,104167,104180,104187,104190,104229,104236,104238,104290,104292,104298,104301,104308,104315,104318,104320,104338,104341,104344,104378,104390,104392,104395,104417,104420],[10,102795,102791],{"id":102796},"_2xml-与-mjcf-物理建模基础",[14,102798,100785],{"id":100784},[19,102800,102801],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,102803,102804],{},"本章结束后，你应该能看懂一个简单模型里：",[207,102806,102807,102810,102813,102816,102819],{},[210,102808,102809],{},"地面在哪里。",[210,102811,102812],{},"物体初始位置在哪里。",[210,102814,102815],{},"几何体是什么形状。",[210,102817,102818],{},"哪些 body 可以自由运动。",[210,102820,102821],{},"如何用名字在 Python 里找到 XML 中的对象。",[400,102823,102824,102833],{},[403,102825,102826],{},[406,102827,102828,102830],{},[409,102829,127],{"align":23875},[409,102831,102832],{"align":23875},"作用",[447,102834,102835,102844,102854,102863,102873,102883,102896,102906],{},[406,102836,102837,102841],{},[452,102838,102839],{"align":23875},[22,102840,102674],{},[452,102842,102843],{"align":23875},"根节点",[406,102845,102846,102851],{},[452,102847,102848],{"align":23875},[22,102849,102850],{},"\u003Coption>",[452,102852,102853],{"align":23875},"仿真参数",[406,102855,102856,102860],{},[452,102857,102858],{"align":23875},[22,102859,102682],{},[452,102861,102862],{"align":23875},"世界中的物体",[406,102864,102865,102870],{},[452,102866,102867],{"align":23875},[22,102868,102869],{},"\u003Cbody>",[452,102871,102872],{"align":23875},"刚体",[406,102874,102875,102880],{},[452,102876,102877],{"align":23875},[22,102878,102879],{},"\u003Cgeom>",[452,102881,102882],{"align":23875},"几何体、碰撞体、可视体",[406,102884,102885,102893],{},[452,102886,102887,25118,102890],{"align":23875},[22,102888,102889],{},"\u003Cjoint>",[22,102891,102892],{},"\u003Cfreejoint>",[452,102894,102895],{"align":23875},"关节",[406,102897,102898,102903],{},[452,102899,102900],{"align":23875},[22,102901,102902],{},"\u003Csite>",[452,102904,102905],{"align":23875},"标记点",[406,102907,102908,102913],{},[452,102909,102910],{"align":23875},[22,102911,102912],{},"\u003Cactuator>",[452,102914,102915],{"align":23875},"控制器",[19,102917,102918],{},"初学时可以先记住：",[244,102920,102923],{"className":102921,"code":102922,"language":5327,"meta":169},[5325],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[22,102924,102922],{"__ignoreMap":169},[14,102926,100908],{"id":100907},[19,102928,100911],{},[244,102930,102932],{"className":23961,"code":102931,"language":23963,"meta":169,"style":169},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[22,102933,102934],{"__ignoreMap":169},[252,102935,102936,102938,102940,102942,102944,102946,102948,102950],{"class":254,"line":255},[252,102937,24716],{"class":2102},[252,102939,26455],{"class":367},[252,102941,23973],{"class":367},[252,102943,26540],{"class":311},[252,102945,102638],{"class":367},[252,102947,100952],{"class":367},[252,102949,102643],{"class":367},[252,102951,102952],{"class":367}," glfw-devel\n",[19,102954,102955],{},"pip:",[244,102957,102958],{"className":23961,"code":101057,"language":23963,"meta":169,"style":169},[22,102959,102960],{"__ignoreMap":169},[252,102961,102962,102964,102966,102968],{"class":254,"line":255},[252,102963,23970],{"class":2102},[252,102965,23973],{"class":367},[252,102967,101068],{"class":367},[252,102969,101071],{"class":367},[19,102971,102972],{},"conda:",[244,102974,102976],{"className":23961,"code":102975,"language":23963,"meta":169,"style":169},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[22,102977,102978,102995,103004],{"__ignoreMap":169},[252,102979,102980,102982,102984,102986,102989,102991,102993],{"class":254,"line":255},[252,102981,30470],{"class":2102},[252,102983,29316],{"class":367},[252,102985,25255],{"class":311},[252,102987,102988],{"class":367}," mujoco-xml",[252,102990,101113],{"class":367},[252,102992,101116],{"class":311},[252,102994,101119],{"class":311},[252,102996,102997,102999,103001],{"class":254,"line":170},[252,102998,30470],{"class":2102},[252,103000,101126],{"class":367},[252,103002,103003],{"class":367}," mujoco-xml\n",[252,103005,103006,103008,103010,103012],{"class":254,"line":1318},[252,103007,23970],{"class":2102},[252,103009,23973],{"class":367},[252,103011,101068],{"class":367},[252,103013,101071],{"class":367},[19,103015,101142],{},[207,103017,103018,103021,103026],{},[210,103019,103020],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[210,103022,103023,103024,28525],{},"本章使用基础标签，适用于 ",[22,103025,101164],{},[210,103027,103028],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103030,101182],{"id":101181},[19,103032,103033],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[244,103035,103037],{"className":53207,"code":103036,"language":53209,"meta":169,"style":169},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[22,103038,103039,103053,103061,103066,103074],{"__ignoreMap":169},[252,103040,103041,103043,103045,103047,103049,103051],{"class":254,"line":255},[252,103042,1173],{"class":262},[252,103044,101158],{"class":51440},[252,103046,101912],{"class":2102},[252,103048,308],{"class":262},[252,103050,62819],{"class":367},[252,103052,51447],{"class":262},[252,103054,103055,103057,103059],{"class":254,"line":170},[252,103056,52284],{"class":262},[252,103058,101978],{"class":51440},[252,103060,51447],{"class":262},[252,103062,103063],{"class":254,"line":1318},[252,103064,103065],{"class":262},"    ...\n",[252,103067,103068,103070,103072],{"class":254,"line":1333},[252,103069,52557],{"class":262},[252,103071,101978],{"class":51440},[252,103073,51447],{"class":262},[252,103075,103076,103078,103080],{"class":254,"line":1339},[252,103077,51925],{"class":262},[252,103079,101158],{"class":51440},[252,103081,51447],{"class":262},[19,103083,103084,103086,103087,103089,103090,103093],{},[22,103085,51940],{}," 表示刚体。",[22,103088,101257],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[22,103091,103092],{},"joint"," 表示刚体相对父刚体如何运动。",[224,103095,103096],{"id":103096},"层级结构非常重要",[19,103098,103099],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[244,103101,103104],{"className":103102,"code":103103,"language":5327,"meta":169},[5325],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[22,103105,103103],{"__ignoreMap":169},[19,103107,103108,132,103111,103114,103115,103118],{},[22,103109,103110],{},"red_box_geom",[22,103112,103113],{},"box_center"," 都属于 ",[22,103116,103117],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[244,103120,103122],{"className":53207,"code":103121,"language":53209,"meta":169,"style":169},"\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",[22,103123,103124,103144,103158,103178],{"__ignoreMap":169},[252,103125,103126,103128,103130,103132,103134,103136,103138,103140,103142],{"class":254,"line":255},[252,103127,1173],{"class":262},[252,103129,51940],{"class":51440},[252,103131,15060],{"class":2102},[252,103133,308],{"class":262},[252,103135,53631],{"class":367},[252,103137,101243],{"class":2102},[252,103139,308],{"class":262},[252,103141,101248],{"class":367},[252,103143,51447],{"class":262},[252,103145,103146,103148,103150,103152,103154,103156],{"class":254,"line":170},[252,103147,52284],{"class":262},[252,103149,101757],{"class":51440},[252,103151,15060],{"class":2102},[252,103153,308],{"class":262},[252,103155,102098],{"class":367},[252,103157,101281],{"class":262},[252,103159,103160,103162,103164,103166,103168,103170,103172,103174,103176],{"class":254,"line":1318},[252,103161,52284],{"class":262},[252,103163,101257],{"class":51440},[252,103165,53964],{"class":2102},[252,103167,308],{"class":262},[252,103169,53631],{"class":367},[252,103171,101273],{"class":2102},[252,103173,308],{"class":262},[252,103175,101278],{"class":367},[252,103177,101281],{"class":262},[252,103179,103180,103182,103184],{"class":254,"line":1333},[252,103181,51925],{"class":262},[252,103183,51940],{"class":51440},[252,103185,51447],{"class":262},[19,103187,103188],{},"含义:",[207,103190,103191,103197,103202,103205],{},[210,103192,103193,103194,103196],{},"创建名为 ",[22,103195,53854],{}," 的刚体",[210,103198,103199,103200],{},"初始位置在世界坐标 ",[22,103201,101306],{},[210,103203,103204],{},"它有一个自由关节",[210,103206,103207],{},"它有一个盒子几何体",[224,103209,103210],{"id":103210},"坐标怎么理解",[19,103212,103213],{},"MuJoCo 默认使用三维坐标：",[244,103215,103218],{"className":103216,"code":103217,"language":5327,"meta":169},[5325],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[22,103219,103217],{"__ignoreMap":169},[19,103221,14773],{},[244,103223,103225],{"className":53207,"code":103224,"language":53209,"meta":169,"style":169},"pos=\"0 0 1\"\n",[22,103226,103227],{"__ignoreMap":169},[252,103228,103229],{"class":254,"line":255},[252,103230,103224],{"class":262},[19,103232,103233],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[224,103235,103237],{"id":103236},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103239,103240,103241,82669,103244,103246],{},"不同 ",[22,103242,103243],{},"type",[22,103245,31636],{}," 含义不同：",[400,103248,103249,103264],{},[403,103250,103251],{},[406,103252,103253,103257,103262],{},[409,103254,103255],{"align":23875},[22,103256,103243],{},[409,103258,103259,103261],{"align":23875},[22,103260,31636],{}," 示例",[409,103263,100838],{"align":23875},[447,103265,103266,103280,103295,103314],{},[406,103267,103268,103272,103277],{},[452,103269,103270],{"align":23875},[22,103271,53854],{},[452,103273,103274],{"align":23875},[22,103275,103276],{},"size=\"0.1 0.2 0.3\"",[452,103278,103279],{"align":23875},"x\u002Fy\u002Fz 半边长，不是完整长度",[406,103281,103282,103287,103292],{},[452,103283,103284],{"align":23875},[22,103285,103286],{},"sphere",[452,103288,103289],{"align":23875},[22,103290,103291],{},"size=\"0.1\"",[452,103293,103294],{"align":23875},"球半径",[406,103296,103297,103302,103307],{},[452,103298,103299],{"align":23875},[22,103300,103301],{},"capsule",[452,103303,103304],{"align":23875},[22,103305,103306],{},"size=\"0.03\"",[452,103308,103309,103310,103313],{"align":23875},"胶囊半径，长度常用 ",[22,103311,103312],{},"fromto"," 指定",[406,103315,103316,103321,103326],{},[452,103317,103318],{"align":23875},[22,103319,103320],{},"plane",[452,103322,103323],{"align":23875},[22,103324,103325],{},"size=\"3 3 0.1\"",[452,103327,103328],{"align":23875},"可视平面大小，通常当地面",[19,103330,103331,103332,103334,103335,103337],{},"最容易踩坑的是 box：",[22,103333,102161],{}," 表示边长大约是 ",[22,103336,32177],{},"，因为 MuJoCo 用的是半边长。",[224,103339,103341],{"id":103340},"site-是什么","site 是什么",[19,103343,103344,103347],{},[22,103345,103346],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[207,103349,103350,103353,103356,103359],{},[210,103351,103352],{},"标记机械臂末端。",[210,103354,103355],{},"标记目标位置。",[210,103357,103358],{},"放传感器或相机参考点。",[210,103360,103361],{},"在 Python 中读取某个关键点的世界坐标。",[19,103363,103364,103365,132,103368,103371],{},"在后面的 Reacher 任务中，",[22,103366,103367],{},"tip",[22,103369,103370],{},"target"," 就会用 site 表示。",[14,103373,101390],{"id":101389},[244,103375,103377],{"className":30518,"code":103376,"language":30520,"meta":169,"style":169},"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",[22,103378,103379,103385,103395,103399,103403,103411,103416,103420,103424,103428,103433,103437,103442,103447,103452,103457,103461,103465,103469,103473,103477,103481,103493,103505,103513,103517,103532,103547,103551,103564,103579,103592,103605,103609,103625,103629,103633,103644,103656,103668,103680,103684,103688,103700],{"__ignoreMap":169},[252,103380,103381,103383],{"class":254,"line":255},[252,103382,30532],{"class":258},[252,103384,101438],{"class":262},[252,103386,103387,103389,103391,103393],{"class":254,"line":170},[252,103388,30532],{"class":258},[252,103390,31520],{"class":262},[252,103392,31523],{"class":258},[252,103394,31526],{"class":262},[252,103396,103397],{"class":254,"line":1318},[252,103398,2539],{"emptyLinePlaceholder":181},[252,103400,103401],{"class":254,"line":1333},[252,103402,2539],{"emptyLinePlaceholder":181},[252,103404,103405,103407,103409],{"class":254,"line":1339},[252,103406,101451],{"class":311},[252,103408,13704],{"class":258},[252,103410,101456],{"class":367},[252,103412,103413],{"class":254,"line":1353},[252,103414,103415],{"class":367},"\u003Cmujoco model=\"xml_basic\">\n",[252,103417,103418],{"class":254,"line":1359},[252,103419,101466],{"class":367},[252,103421,103422],{"class":254,"line":1450},[252,103423,2539],{"emptyLinePlaceholder":181},[252,103425,103426],{"class":254,"line":1456},[252,103427,101475],{"class":367},[252,103429,103430],{"class":254,"line":1468},[252,103431,103432],{"class":367},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[252,103434,103435],{"class":254,"line":1751},[252,103436,2539],{"emptyLinePlaceholder":181},[252,103438,103439],{"class":254,"line":1756},[252,103440,103441],{"class":367},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[252,103443,103444],{"class":254,"line":1762},[252,103445,103446],{"class":367},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[252,103448,103449],{"class":254,"line":1767},[252,103450,103451],{"class":367},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[252,103453,103454],{"class":254,"line":1781},[252,103455,103456],{"class":367},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[252,103458,103459],{"class":254,"line":1786},[252,103460,101504],{"class":367},[252,103462,103463],{"class":254,"line":1792},[252,103464,101509],{"class":367},[252,103466,103467],{"class":254,"line":1813},[252,103468,101514],{"class":367},[252,103470,103471],{"class":254,"line":1818},[252,103472,95836],{"class":367},[252,103474,103475],{"class":254,"line":1832},[252,103476,2539],{"emptyLinePlaceholder":181},[252,103478,103479],{"class":254,"line":1837},[252,103480,2539],{"emptyLinePlaceholder":181},[252,103482,103483,103485,103487,103489,103491],{"class":254,"line":1866},[252,103484,32087],{"class":258},[252,103486,2112],{"class":2102},[252,103488,101535],{"class":262},[252,103490,95824],{"class":311},[252,103492,3878],{"class":262},[252,103494,103495,103497,103499,103501,103503],{"class":254,"line":1871},[252,103496,101544],{"class":262},[252,103498,308],{"class":258},[252,103500,101549],{"class":262},[252,103502,101451],{"class":311},[252,103504,269],{"class":262},[252,103506,103507,103509,103511],{"class":254,"line":1888},[252,103508,101558],{"class":262},[252,103510,308],{"class":258},[252,103512,101563],{"class":262},[252,103514,103515],{"class":254,"line":1893},[252,103516,2539],{"emptyLinePlaceholder":181},[252,103518,103519,103522,103524,103527,103530],{"class":254,"line":1898},[252,103520,103521],{"class":262},"    box_body_id ",[252,103523,308],{"class":258},[252,103525,103526],{"class":262}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[252,103528,103529],{"class":367},"\"red_box\"",[252,103531,269],{"class":262},[252,103533,103534,103537,103539,103542,103545],{"class":254,"line":1903},[252,103535,103536],{"class":262},"    site_id ",[252,103538,308],{"class":258},[252,103540,103541],{"class":262}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[252,103543,103544],{"class":367},"\"box_center\"",[252,103546,269],{"class":262},[252,103548,103549],{"class":254,"line":1917},[252,103550,2539],{"emptyLinePlaceholder":181},[252,103552,103553,103555,103558,103560,103562],{"class":254,"line":1922},[252,103554,3240],{"class":258},[252,103556,103557],{"class":262}," box_body_id ",[252,103559,1173],{"class":258},[252,103561,4232],{"class":311},[252,103563,3878],{"class":262},[252,103565,103566,103569,103572,103574,103577],{"class":254,"line":2716},[252,103567,103568],{"class":258},"        raise",[252,103570,103571],{"class":311}," RuntimeError",[252,103573,263],{"class":262},[252,103575,103576],{"class":367},"\"body red_box not found\"",[252,103578,269],{"class":262},[252,103580,103581,103583,103586,103588,103590],{"class":254,"line":2730},[252,103582,3240],{"class":258},[252,103584,103585],{"class":262}," site_id ",[252,103587,1173],{"class":258},[252,103589,4232],{"class":311},[252,103591,3878],{"class":262},[252,103593,103594,103596,103598,103600,103603],{"class":254,"line":2738},[252,103595,103568],{"class":258},[252,103597,103571],{"class":311},[252,103599,263],{"class":262},[252,103601,103602],{"class":367},"\"site box_center not found\"",[252,103604,269],{"class":262},[252,103606,103607],{"class":254,"line":2743},[252,103608,2539],{"emptyLinePlaceholder":181},[252,103610,103611,103613,103615,103617,103619,103621,103623],{"class":254,"line":2749},[252,103612,3340],{"class":258},[252,103614,101638],{"class":262},[252,103616,26183],{"class":258},[252,103618,32583],{"class":311},[252,103620,263],{"class":262},[252,103622,1861],{"class":311},[252,103624,30926],{"class":262},[252,103626,103627],{"class":254,"line":2755},[252,103628,101653],{"class":262},[252,103630,103631],{"class":254,"line":2760},[252,103632,2539],{"emptyLinePlaceholder":181},[252,103634,103635,103637,103639,103642],{"class":254,"line":8088},[252,103636,31439],{"class":311},[252,103638,263],{"class":262},[252,103640,103641],{"class":367},"\"simulation time:\"",[252,103643,101615],{"class":262},[252,103645,103646,103648,103650,103653],{"class":254,"line":8112},[252,103647,31439],{"class":311},[252,103649,263],{"class":262},[252,103651,103652],{"class":367},"\"box body position:\"",[252,103654,103655],{"class":262},", data.xpos[box_body_id].copy())\n",[252,103657,103658,103660,103662,103665],{"class":254,"line":8117},[252,103659,31439],{"class":311},[252,103661,263],{"class":262},[252,103663,103664],{"class":367},"\"site position:\"",[252,103666,103667],{"class":262},", data.site_xpos[site_id].copy())\n",[252,103669,103670,103672,103674,103677],{"class":254,"line":8123},[252,103671,31439],{"class":311},[252,103673,263],{"class":262},[252,103675,103676],{"class":367},"\"box qpos:\"",[252,103678,103679],{"class":262},", np.array(data.qpos))\n",[252,103681,103682],{"class":254,"line":8150},[252,103683,2539],{"emptyLinePlaceholder":181},[252,103685,103686],{"class":254,"line":8155},[252,103687,2539],{"emptyLinePlaceholder":181},[252,103689,103690,103692,103694,103696,103698],{"class":254,"line":8161},[252,103691,1670],{"class":258},[252,103693,31360],{"class":311},[252,103695,101696],{"class":258},[252,103697,101699],{"class":367},[252,103699,3878],{"class":262},[252,103701,103702],{"class":254,"line":8173},[252,103703,101706],{"class":262},[19,103705,103706],{},"保存为：",[244,103708,103710],{"className":23961,"code":103709,"language":23963,"meta":169,"style":169},"touch ch2_xml_basic.py\n",[22,103711,103712],{"__ignoreMap":169},[252,103713,103714,103716],{"class":254,"line":255},[252,103715,101420],{"class":2102},[252,103717,103718],{"class":367}," ch2_xml_basic.py\n",[19,103720,102438],{},[244,103722,103724],{"className":23961,"code":103723,"language":23963,"meta":169,"style":169},"python ch2_xml_basic.py\n",[22,103725,103726],{"__ignoreMap":169},[252,103727,103728,103730],{"class":254,"line":255},[252,103729,30520],{"class":2102},[252,103731,103718],{"class":367},[224,103733,101709],{"id":101709},[19,103735,103736],{},"用名字查找 body：",[244,103738,103740],{"className":30518,"code":103739,"language":30520,"meta":169,"style":169},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[22,103741,103742],{"__ignoreMap":169},[252,103743,103744,103747,103749,103751,103753],{"class":254,"line":255},[252,103745,103746],{"class":262},"box_body_id ",[252,103748,308],{"class":258},[252,103750,103526],{"class":262},[252,103752,103529],{"class":367},[252,103754,269],{"class":262},[19,103756,103757],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,103759,103760],{},"用名字查找 site：",[244,103762,103764],{"className":30518,"code":103763,"language":30520,"meta":169,"style":169},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[22,103765,103766],{"__ignoreMap":169},[252,103767,103768,103771,103773,103775,103777],{"class":254,"line":255},[252,103769,103770],{"class":262},"site_id ",[252,103772,308],{"class":258},[252,103774,103541],{"class":262},[252,103776,103544],{"class":367},[252,103778,269],{"class":262},[19,103780,103781,103782,103785,103786,103789],{},"注意第二个参数是对象类型。查 body 就用 ",[22,103783,103784],{},"mjOBJ_BODY","，查 site 就用 ",[22,103787,103788],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,103791,103792],{},"读取世界坐标：",[244,103794,103796],{"className":30518,"code":103795,"language":30520,"meta":169,"style":169},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[22,103797,103798,103803],{"__ignoreMap":169},[252,103799,103800],{"class":254,"line":255},[252,103801,103802],{"class":262},"data.xpos[box_body_id]\n",[252,103804,103805],{"class":254,"line":170},[252,103806,103807],{"class":262},"data.site_xpos[site_id]\n",[19,103809,103810,103813,103814,103817],{},[22,103811,103812],{},"xpos"," 是 body 的世界坐标，",[22,103815,103816],{},"site_xpos"," 是 site 的世界坐标。",[224,103819,101845],{"id":101845},[244,103821,103823],{"className":30518,"code":103822,"language":30520,"meta":169,"style":169},"import mujoco\nimport numpy as np\n",[22,103824,103825,103831],{"__ignoreMap":169},[252,103826,103827,103829],{"class":254,"line":255},[252,103828,30532],{"class":258},[252,103830,101438],{"class":262},[252,103832,103833,103835,103837,103839],{"class":254,"line":170},[252,103834,30532],{"class":258},[252,103836,31520],{"class":262},[252,103838,31523],{"class":258},[252,103840,31526],{"class":262},[19,103842,103843,103844,103847,103848,103851,103852,475,103855,28525],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[22,103845,103846],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[22,103849,103850],{},"as np"," 是习惯写法，后面就可以写 ",[22,103853,103854],{},"np.array(...)",[22,103856,103857],{},"np.round(...)",[244,103859,103860],{"className":30518,"code":101732,"language":30520,"meta":169,"style":169},[22,103861,103862,103870,103874],{"__ignoreMap":169},[252,103863,103864,103866,103868],{"class":254,"line":255},[252,103865,101451],{"class":311},[252,103867,13704],{"class":258},[252,103869,101456],{"class":367},[252,103871,103872],{"class":254,"line":170},[252,103873,101747],{"class":367},[252,103875,103876],{"class":254,"line":1318},[252,103877,95836],{"class":367},[19,103879,103880,103881,28525],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[22,103882,103883],{},"mujoco.MjModel.from_xml_string(XML)",[244,103885,103887],{"className":53207,"code":103886,"language":53209,"meta":169,"style":169},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[22,103888,103889],{"__ignoreMap":169},[252,103890,103891,103893,103895,103897,103899,103901,103903,103905,103908,103910,103912,103915,103917,103919,103922],{"class":254,"line":255},[252,103892,1173],{"class":262},[252,103894,103346],{"class":51440},[252,103896,15060],{"class":2102},[252,103898,308],{"class":262},[252,103900,103544],{"class":367},[252,103902,101243],{"class":2102},[252,103904,308],{"class":262},[252,103906,103907],{"class":367},"\"0 0 0\"",[252,103909,101273],{"class":2102},[252,103911,308],{"class":262},[252,103913,103914],{"class":367},"\"0.03\"",[252,103916,78906],{"class":2102},[252,103918,308],{"class":262},[252,103920,103921],{"class":367},"\"0 1 0 1\"",[252,103923,101281],{"class":262},[19,103925,103926,103928,103929,103932,103933,103935,103936,103939],{},[22,103927,103346],{}," 是标记点。",[22,103930,103931],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[22,103934,103306],{}," 表示显示出来的小球大小。",[22,103937,103938],{},"rgba=\"0 1 0 1\""," 表示绿色。",[244,103941,103942],{"className":30518,"code":103739,"language":30520,"meta":169,"style":169},[22,103943,103944],{"__ignoreMap":169},[252,103945,103946,103948,103950,103952,103954],{"class":254,"line":255},[252,103947,103746],{"class":262},[252,103949,308],{"class":258},[252,103951,103526],{"class":262},[252,103953,103529],{"class":367},[252,103955,269],{"class":262},[19,103957,103958,103959,103961],{},"这行的作用是：根据名字 ",[22,103960,103529],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,103963,103964],{},"拆开看：",[207,103966,103967,103973,103978,103984],{},[210,103968,103969,103972],{},[22,103970,103971],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[210,103974,103975,103977],{},[22,103976,102222],{}," 是被查询的模型。",[210,103979,103980,103983],{},[22,103981,103982],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[210,103985,103986,103988],{},[22,103987,103529],{}," 是 XML 里写的名字。",[244,103990,103991],{"className":30518,"code":103763,"language":30520,"meta":169,"style":169},[22,103992,103993],{"__ignoreMap":169},[252,103994,103995,103997,103999,104001,104003],{"class":254,"line":255},[252,103996,103770],{"class":262},[252,103998,308],{"class":258},[252,104000,103541],{"class":262},[252,104002,103544],{"class":367},[252,104004,269],{"class":262},[19,104006,104007,104008,28525],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[22,104009,103544],{},[244,104011,104013],{"className":30518,"code":104012,"language":30520,"meta":169,"style":169},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[22,104014,104015,104027],{"__ignoreMap":169},[252,104016,104017,104019,104021,104023,104025],{"class":254,"line":255},[252,104018,1670],{"class":258},[252,104020,103557],{"class":262},[252,104022,1173],{"class":258},[252,104024,4232],{"class":311},[252,104026,3878],{"class":262},[252,104028,104029,104032,104034,104036,104038],{"class":254,"line":170},[252,104030,104031],{"class":258},"    raise",[252,104033,103571],{"class":311},[252,104035,263],{"class":262},[252,104037,103576],{"class":367},[252,104039,269],{"class":262},[19,104041,104042,104044,104045,104048,104049,104052,104053,104056],{},[22,104043,1670],{}," 是条件判断。",[22,104046,104047],{},"mj_name2id"," 找不到对象时会返回 ",[22,104050,104051],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[22,104054,104055],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[244,104058,104060],{"className":30518,"code":104059,"language":30520,"meta":169,"style":169},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[22,104061,104062,104078],{"__ignoreMap":169},[252,104063,104064,104066,104068,104070,104072,104074,104076],{"class":254,"line":255},[252,104065,3164],{"class":258},[252,104067,101638],{"class":262},[252,104069,26183],{"class":258},[252,104071,32583],{"class":311},[252,104073,263],{"class":262},[252,104075,1861],{"class":311},[252,104077,30926],{"class":262},[252,104079,104080],{"class":254,"line":170},[252,104081,101836],{"class":262},[19,104083,104084],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[244,104086,104088],{"className":30518,"code":104087,"language":30520,"meta":169,"style":169},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[22,104089,104090],{"__ignoreMap":169},[252,104091,104092,104094,104096,104098],{"class":254,"line":255},[252,104093,30555],{"class":311},[252,104095,263],{"class":262},[252,104097,103652],{"class":367},[252,104099,103655],{"class":262},[19,104101,104102,104104,104105,104108],{},[22,104103,101216],{}," 保存所有 body 的世界坐标。",[22,104106,104107],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[244,104110,104112],{"className":30518,"code":104111,"language":30520,"meta":169,"style":169},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[22,104113,104114],{"__ignoreMap":169},[252,104115,104116,104118,104120,104122],{"class":254,"line":255},[252,104117,30555],{"class":311},[252,104119,263],{"class":262},[252,104121,103664],{"class":367},[252,104123,103667],{"class":262},[19,104125,104126,104129,104130,104132],{},[22,104127,104128],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[22,104131,103113],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[244,104134,104136],{"className":30518,"code":104135,"language":30520,"meta":169,"style":169},"print(\"box qpos:\", np.array(data.qpos))\n",[22,104137,104138],{"__ignoreMap":169},[252,104139,104140,104142,104144,104146],{"class":254,"line":255},[252,104141,30555],{"class":311},[252,104143,263],{"class":262},[252,104145,103676],{"class":367},[252,104147,103679],{"class":262},[19,104149,104150,104151,104154],{},"这里打印广义位置数组。",[22,104152,104153],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104156,102453],{"id":102452},[19,104158,104159,104160,104163,104164,28525],{},"程序会输出 ",[22,104161,104162],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[22,104165,104166],{},"qpos",[19,104168,104169,104171,104172,104175,104176,104179],{},[22,104170,104107],{}," 是 body 的世界坐标位置。",[22,104173,104174],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[22,104177,104178],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104181,82361,104182,82669,104184,104186],{},[22,104183,103113],{},[22,104185,103931],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104188,104189],{},"如果你把 site 改成：",[244,104191,104193],{"className":53207,"code":104192,"language":53209,"meta":169,"style":169},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[22,104194,104195],{"__ignoreMap":169},[252,104196,104197,104199,104201,104203,104205,104208,104210,104212,104215,104217,104219,104221,104223,104225,104227],{"class":254,"line":255},[252,104198,1173],{"class":262},[252,104200,103346],{"class":51440},[252,104202,15060],{"class":2102},[252,104204,308],{"class":262},[252,104206,104207],{"class":367},"\"box_top\"",[252,104209,101243],{"class":2102},[252,104211,308],{"class":262},[252,104213,104214],{"class":367},"\"0 0 0.15\"",[252,104216,101273],{"class":2102},[252,104218,308],{"class":262},[252,104220,103914],{"class":367},[252,104222,78906],{"class":2102},[252,104224,308],{"class":262},[252,104226,103921],{"class":367},[252,104228,101281],{"class":262},[19,104230,104231,104232,104235],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[22,104233,104234],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104237,102485],{"id":102484},[207,104239,104240,104249,104252,104259,104265,104276],{},[210,104241,102548,104242,104244,104245,102551,104247,28525],{},[22,104243,103117],{}," 的初始高度从 ",[22,104246,480],{},[22,104248,340],{},[210,104250,104251],{},"重新运行程序。",[210,104253,104254,104255,104258],{},"观察 ",[22,104256,104257],{},"box qpos"," 和最终位置是否变化。",[210,104260,104261,104262,104264],{},"故意把 ",[22,104263,103346],{}," 名称改错，确认程序能报错。",[210,104266,102548,104267,104269,104270,102551,104272,104275],{},[22,104268,101257],{}," 的颜色 ",[22,104271,102169],{},[22,104273,104274],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[210,104277,102548,104278,82669,104280,102551,104283,104286,104287,104289],{},[22,104279,103113],{},[22,104281,104282],{},"pos",[22,104284,104285],{},"0 0 0.2","，观察 ",[22,104288,104234],{}," 如何变化。",[14,104291,102590],{"id":102589},[224,104293,104295],{"id":104294},"xml-error-schema-violation",[22,104296,104297],{},"XML Error: Schema violation",[19,104299,104300],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[224,104302,104304,81429,104306],{"id":104303},"mj_name2id-返回-1",[22,104305,104047],{},[22,104307,104051],{},[19,104309,104310,104311,104314],{},"说明名字没有找到。检查 XML 中 ",[22,104312,104313],{},"name=\"...\"","，并确认对象类型正确。",[224,104316,104317],{"id":104317},"物体不下落",[19,104319,102660],{},[207,104321,104322,104327,104332],{},[210,104323,104324,104325],{},"body 是否有 ",[22,104326,101757],{},[210,104328,104329,104330],{},"gravity 是否为 ",[22,104331,102726],{},[210,104333,104334,104335,104337],{},"body 是否被固定在 ",[22,104336,101978],{}," 中",[224,104339,104340],{"id":104340},"坐标看起来不符合预期",[19,104342,104343],{},"先区分两种坐标：",[400,104345,104346,104355],{},[403,104347,104348],{},[406,104349,104350,104353],{},[409,104351,104352],{"align":23875},"坐标",[409,104354,100838],{"align":23875},[447,104356,104357,104367],{},[406,104358,104359,104364],{},[452,104360,104361,104362],{"align":23875},"XML 里的 ",[22,104363,104282],{},[452,104365,104366],{"align":23875},"相对父 body 的局部坐标",[406,104368,104369,104375],{},[452,104370,104371,25118,104373],{"align":23875},[22,104372,101216],{},[22,104374,104128],{},[452,104376,104377],{"align":23875},"仿真更新后的世界坐标",[19,104379,104380,104381,104383,104384,84,104387,104389],{},"如果你修改了 ",[22,104382,101207],{},"，但还没调用 ",[22,104385,104386],{},"mj_forward",[22,104388,101352],{},"，世界坐标可能还没有更新。",[14,104391,102744],{"id":102743},[19,104393,104394],{},"MJCF 建模先掌握四件事：",[207,104396,104397,104402,104407,104412],{},[210,104398,104399,104401],{},[22,104400,51940],{}," 表示刚体层级。",[210,104403,104404,104406],{},[22,104405,101257],{}," 表示形状、碰撞和质量。",[210,104408,104409,104411],{},[22,104410,103092],{}," 决定 body 能不能动、怎么动。",[210,104413,104414,104416],{},[22,104415,103346],{}," 用来标记关键点，方便 Python 读取位置。",[19,104418,104419],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5266,104421,104422],{},"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":169,"searchDepth":170,"depth":170,"links":104424},[104425,104426,104427,104433,104437,104438,104439,104446],{"id":100784,"depth":170,"text":100785},{"id":100907,"depth":170,"text":100908},{"id":101181,"depth":170,"text":101182,"children":104428},[104429,104430,104431,104432],{"id":103096,"depth":1318,"text":103096},{"id":103210,"depth":1318,"text":103210},{"id":103236,"depth":1318,"text":103237},{"id":103340,"depth":1318,"text":103341},{"id":101389,"depth":170,"text":101390,"children":104434},[104435,104436],{"id":101709,"depth":1318,"text":101709},{"id":101845,"depth":1318,"text":101845},{"id":102452,"depth":170,"text":102453},{"id":102484,"depth":170,"text":102485},{"id":102589,"depth":170,"text":102590,"children":104440},[104441,104442,104444,104445],{"id":104294,"depth":1318,"text":104297},{"id":104303,"depth":1318,"text":104443},"mj_name2id 返回 -1",{"id":104317,"depth":1318,"text":104317},{"id":104340,"depth":1318,"text":104340},{"id":102743,"depth":170,"text":102744},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102791,"description":169},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104453,"title":104454,"body":104455,"description":169,"extension":179,"meta":105950,"navigation":181,"path":105951,"seo":105952,"stem":105953,"__hash__":105954},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104456,"toc":105922},[104457,104460,104462,104465,104468,104506,104509,104515,104518,104520,104522,104549,104551,104565,104567,104608,104610,104634,104636,104639,104648,104657,104660,104669,104677,104686,104689,104699,104702,104754,104761,104767,104775,104823,104826,104845,104848,104856,104860,104869,104902,104904,105252,105254,105266,105268,105279,105281,105284,105305,105311,105314,105339,105349,105352,105360,105363,105366,105387,105398,105400,105420,105423,105444,105453,105472,105478,105503,105506,105520,105527,105551,105554,105562,105571,105587,105599,105607,105616,105618,105621,105645,105650,105653,105675,105677,105716,105718,105725,105727,105735,105738,105741,105753,105794,105801,105812,105819,105822,105871,105874,105877,105883,105885,105890,105916,105919],[10,104458,104454],{"id":104459},"_3python-控制接口读取状态与推进仿真",[14,104461,100785],{"id":100784},[19,104463,104464],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104466,104467],{},"你将学习:",[207,104469,104470,104475,104480,104484,104489,104500],{},[210,104471,104472],{},[22,104473,104474],{},"MjModel.from_xml_string",[210,104476,104477],{},[22,104478,104479],{},"MjData(model)",[210,104481,104482],{},[22,104483,101352],{},[210,104485,104486],{},[22,104487,104488],{},"mj_resetData",[210,104490,104491,104492,475,104494,475,104497],{},"读取 ",[22,104493,104166],{},[22,104495,104496],{},"qvel",[22,104498,104499],{},"ctrl",[210,104501,104502,104503],{},"使用 ",[22,104504,104505],{},"model.opt.timestep",[19,104507,104508],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[244,104510,104513],{"className":104511,"code":104512,"language":5327,"meta":169},[5325],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[22,104514,104512],{"__ignoreMap":169},[19,104516,104517],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104519,100908],{"id":100907},[19,104521,100911],{},[244,104523,104525],{"className":23961,"code":104524,"language":23963,"meta":169,"style":169},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[22,104526,104527],{"__ignoreMap":169},[252,104528,104529,104531,104533,104535,104537,104540,104542,104544,104546],{"class":254,"line":255},[252,104530,24716],{"class":2102},[252,104532,26455],{"class":367},[252,104534,23973],{"class":367},[252,104536,26540],{"class":311},[252,104538,104539],{"class":367}," python3",[252,104541,100936],{"class":367},[252,104543,102638],{"class":367},[252,104545,100952],{"class":367},[252,104547,104548],{"class":367}," glfw\n",[19,104550,102955],{},[244,104552,104553],{"className":23961,"code":101057,"language":23963,"meta":169,"style":169},[22,104554,104555],{"__ignoreMap":169},[252,104556,104557,104559,104561,104563],{"class":254,"line":255},[252,104558,23970],{"class":2102},[252,104560,23973],{"class":367},[252,104562,101068],{"class":367},[252,104564,101071],{"class":367},[19,104566,102972],{},[244,104568,104570],{"className":23961,"code":104569,"language":23963,"meta":169,"style":169},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[22,104571,104572,104589,104598],{"__ignoreMap":169},[252,104573,104574,104576,104578,104580,104583,104585,104587],{"class":254,"line":255},[252,104575,30470],{"class":2102},[252,104577,29316],{"class":367},[252,104579,25255],{"class":311},[252,104581,104582],{"class":367}," mujoco-python-api",[252,104584,101113],{"class":367},[252,104586,101116],{"class":311},[252,104588,101119],{"class":311},[252,104590,104591,104593,104595],{"class":254,"line":170},[252,104592,30470],{"class":2102},[252,104594,101126],{"class":367},[252,104596,104597],{"class":367}," mujoco-python-api\n",[252,104599,104600,104602,104604,104606],{"class":254,"line":1318},[252,104601,23970],{"class":2102},[252,104603,23973],{"class":367},[252,104605,101068],{"class":367},[252,104607,101071],{"class":367},[19,104609,101142],{},[207,104611,104612,104619,104628],{},[210,104613,104614,132,104616,104618],{},[22,104615,100813],{},[22,104617,100818],{}," 是官方 Python bindings 的类名。",[210,104620,104621,104622,104625,104626,28525],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[22,104623,104624],{},"mjModel"," 在 Python 中是 ",[22,104627,100847],{},[210,104629,104630,104631,28525],{},"不要使用 ",[22,104632,104633],{},"sim = mujoco_py.MjSim(...)",[14,104635,101182],{"id":101181},[19,104637,104638],{},"仿真推进核心代码:",[244,104640,104642],{"className":30518,"code":104641,"language":30520,"meta":169,"style":169},"mujoco.mj_step(model, data)\n",[22,104643,104644],{"__ignoreMap":169},[252,104645,104646],{"class":254,"line":255},[252,104647,104641],{"class":262},[19,104649,104650,104651,475,104653,475,104655,28525],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[22,104652,101207],{},[22,104654,101210],{},[22,104656,101204],{},[19,104658,104659],{},"重置仿真:",[244,104661,104663],{"className":30518,"code":104662,"language":30520,"meta":169,"style":169},"mujoco.mj_resetData(model, data)\n",[22,104664,104665],{"__ignoreMap":169},[252,104666,104667],{"class":254,"line":255},[252,104668,104662],{"class":262},[19,104670,104671,104672,84,104674,104676],{},"如果手动修改了 ",[22,104673,101207],{},[22,104675,101210],{},"，通常应调用:",[244,104678,104680],{"className":30518,"code":104679,"language":30520,"meta":169,"style":169},"mujoco.mj_forward(model, data)\n",[22,104681,104682],{"__ignoreMap":169},[252,104683,104684],{"class":254,"line":255},[252,104685,104679],{"class":262},[19,104687,104688],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[224,104690,104692,475,104694,475,104696,104698],{"id":104691},"qposqvelctrl-是什么",[22,104693,104166],{},[22,104695,104496],{},[22,104697,104499],{}," 是什么",[19,104700,104701],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[400,104703,104704,104716],{},[403,104705,104706],{},[406,104707,104708,104711,104713],{},[409,104709,104710],{"align":23875},"字段",[409,104712,100838],{"align":23875},[409,104714,104715],{"align":23875},"谁来修改",[447,104717,104718,104730,104742],{},[406,104719,104720,104724,104727],{},[452,104721,104722],{"align":23875},[22,104723,101207],{},[452,104725,104726],{"align":23875},"广义位置，例如小车位置、关节角、自由物体位置姿态",[452,104728,104729],{"align":23875},"MuJoCo 更新，也可以手动设置初始状态",[406,104731,104732,104736,104739],{},[452,104733,104734],{"align":23875},[22,104735,101210],{},[452,104737,104738],{"align":23875},"广义速度，例如小车速度、关节角速度",[452,104740,104741],{"align":23875},"MuJoCo 更新，也可以手动清零",[406,104743,104744,104748,104751],{},[452,104745,104746],{"align":23875},[22,104747,101213],{},[452,104749,104750],{"align":23875},"actuator 的控制输入",[452,104752,104753],{"align":23875},"主要由你的控制代码写入",[19,104755,9165,104756,132,104758,104760],{},[22,104757,104166],{},[22,104759,104496],{}," 不一定同维。自由刚体就是典型例子：",[244,104762,104765],{"className":104763,"code":104764,"language":5327,"meta":169},[5325],"freejoint: qpos 7 维，qvel 6 维\n",[22,104766,104764],{"__ignoreMap":169},[224,104768,104770,132,104772,104774],{"id":104769},"mj_step-和-mj_forward-的区别",[22,104771,101352],{},[22,104773,104386],{}," 的区别",[400,104776,104777,104790],{},[403,104778,104779],{},[406,104780,104781,104784,104787],{},[409,104782,104783],{"align":23875},"函数",[409,104785,104786],{"align":23875},"是否推进时间",[409,104788,104789],{"align":23875},"什么时候用",[447,104791,104792,104805],{},[406,104793,104794,104799,104802],{},[452,104795,104796],{"align":23875},[22,104797,104798],{},"mj_step(model, data)",[452,104800,104801],{"align":23875},"是",[452,104803,104804],{"align":23875},"正常仿真循环，每调用一次前进一步",[406,104806,104807,104812,104815],{},[452,104808,104809],{"align":23875},[22,104810,104811],{},"mj_forward(model, data)",[452,104813,104814],{"align":23875},"否",[452,104816,104817,104818,475,104820,104822],{"align":23875},"手动改了 ",[22,104819,104166],{},[22,104821,104496],{}," 后，刷新派生量",[19,104824,104825],{},"例如你写：",[244,104827,104829],{"className":30518,"code":104828,"language":30520,"meta":169,"style":169},"data.qpos[2] = 2.0\n",[22,104830,104831],{"__ignoreMap":169},[252,104832,104833,104836,104838,104840,104842],{"class":254,"line":255},[252,104834,104835],{"class":262},"data.qpos[",[252,104837,340],{"class":311},[252,104839,4582],{"class":262},[252,104841,308],{"class":258},[252,104843,104844],{"class":311}," 2.0\n",[19,104846,104847],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[244,104849,104850],{"className":30518,"code":104679,"language":30520,"meta":169,"style":169},[22,104851,104852],{"__ignoreMap":169},[252,104853,104854],{"class":254,"line":255},[252,104855,104679],{"class":262},[224,104857,104859],{"id":104858},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,104861,104862,104865,104866,104868],{},[22,104863,104864],{},"mujoco.mj_resetData(model, data)"," 会把 ",[22,104867,33541],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[244,104870,104872],{"className":30518,"code":104871,"language":30520,"meta":169,"style":169},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[22,104873,104874,104878,104888,104898],{"__ignoreMap":169},[252,104875,104876],{"class":254,"line":255},[252,104877,104662],{"class":262},[252,104879,104880,104883,104885],{"class":254,"line":170},[252,104881,104882],{"class":262},"data.qpos[:] ",[252,104884,308],{"class":258},[252,104886,104887],{"class":262}," random_qpos\n",[252,104889,104890,104893,104895],{"class":254,"line":1318},[252,104891,104892],{"class":262},"data.qvel[:] ",[252,104894,308],{"class":258},[252,104896,104897],{"class":311}," 0.0\n",[252,104899,104900],{"class":254,"line":1333},[252,104901,104679],{"class":262},[14,104903,101390],{"id":101389},[244,104905,104907],{"className":30518,"code":104906,"language":30520,"meta":169,"style":169},"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",[22,104908,104909,104915,104925,104929,104933,104941,104946,104950,104954,104958,104963,104967,104972,104977,104982,104986,104990,104994,104998,105002,105006,105025,105032,105044,105055,105071,105087,105091,105095,105107,105119,105127,105131,105142,105146,105162,105166,105170,105179,105183,105188,105197,105201,105214,105219,105228,105232,105236,105248],{"__ignoreMap":169},[252,104910,104911,104913],{"class":254,"line":255},[252,104912,30532],{"class":258},[252,104914,101438],{"class":262},[252,104916,104917,104919,104921,104923],{"class":254,"line":170},[252,104918,30532],{"class":258},[252,104920,31520],{"class":262},[252,104922,31523],{"class":258},[252,104924,31526],{"class":262},[252,104926,104927],{"class":254,"line":1318},[252,104928,2539],{"emptyLinePlaceholder":181},[252,104930,104931],{"class":254,"line":1333},[252,104932,2539],{"emptyLinePlaceholder":181},[252,104934,104935,104937,104939],{"class":254,"line":1339},[252,104936,101451],{"class":311},[252,104938,13704],{"class":258},[252,104940,101456],{"class":367},[252,104942,104943],{"class":254,"line":1353},[252,104944,104945],{"class":367},"\u003Cmujoco model=\"state_api\">\n",[252,104947,104948],{"class":254,"line":1359},[252,104949,101466],{"class":367},[252,104951,104952],{"class":254,"line":1450},[252,104953,2539],{"emptyLinePlaceholder":181},[252,104955,104956],{"class":254,"line":1456},[252,104957,101475],{"class":367},[252,104959,104960],{"class":254,"line":1468},[252,104961,104962],{"class":367},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[252,104964,104965],{"class":254,"line":1751},[252,104966,2539],{"emptyLinePlaceholder":181},[252,104968,104969],{"class":254,"line":1756},[252,104970,104971],{"class":367},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[252,104973,104974],{"class":254,"line":1762},[252,104975,104976],{"class":367},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[252,104978,104979],{"class":254,"line":1767},[252,104980,104981],{"class":367},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[252,104983,104984],{"class":254,"line":1781},[252,104985,101504],{"class":367},[252,104987,104988],{"class":254,"line":1786},[252,104989,101509],{"class":367},[252,104991,104992],{"class":254,"line":1792},[252,104993,101514],{"class":367},[252,104995,104996],{"class":254,"line":1813},[252,104997,95836],{"class":367},[252,104999,105000],{"class":254,"line":1818},[252,105001,2539],{"emptyLinePlaceholder":181},[252,105003,105004],{"class":254,"line":1832},[252,105005,2539],{"emptyLinePlaceholder":181},[252,105007,105008,105010,105013,105016,105018,105021,105023],{"class":254,"line":1837},[252,105009,32087],{"class":258},[252,105011,105012],{"class":2102}," print_state",[252,105014,105015],{"class":262},"(prefix: ",[252,105017,1438],{"class":311},[252,105019,105020],{"class":262},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[252,105022,95824],{"class":311},[252,105024,3878],{"class":262},[252,105026,105027,105029],{"class":254,"line":1866},[252,105028,31439],{"class":311},[252,105030,105031],{"class":262},"(prefix)\n",[252,105033,105034,105036,105038,105041],{"class":254,"line":1871},[252,105035,31439],{"class":311},[252,105037,263],{"class":262},[252,105039,105040],{"class":367},"\"  timestep:\"",[252,105042,105043],{"class":262},", model.opt.timestep)\n",[252,105045,105046,105048,105050,105053],{"class":254,"line":1888},[252,105047,31439],{"class":311},[252,105049,263],{"class":262},[252,105051,105052],{"class":367},"\"  time:\"",[252,105054,101615],{"class":262},[252,105056,105057,105059,105061,105064,105067,105069],{"class":254,"line":1893},[252,105058,31439],{"class":311},[252,105060,263],{"class":262},[252,105062,105063],{"class":367},"\"  qpos:\"",[252,105065,105066],{"class":262},", np.round(data.qpos.copy(), ",[252,105068,556],{"class":311},[252,105070,30637],{"class":262},[252,105072,105073,105075,105077,105080,105083,105085],{"class":254,"line":1898},[252,105074,31439],{"class":311},[252,105076,263],{"class":262},[252,105078,105079],{"class":367},"\"  qvel:\"",[252,105081,105082],{"class":262},", np.round(data.qvel.copy(), ",[252,105084,556],{"class":311},[252,105086,30637],{"class":262},[252,105088,105089],{"class":254,"line":1903},[252,105090,2539],{"emptyLinePlaceholder":181},[252,105092,105093],{"class":254,"line":1917},[252,105094,2539],{"emptyLinePlaceholder":181},[252,105096,105097,105099,105101,105103,105105],{"class":254,"line":1922},[252,105098,32087],{"class":258},[252,105100,2112],{"class":2102},[252,105102,101535],{"class":262},[252,105104,95824],{"class":311},[252,105106,3878],{"class":262},[252,105108,105109,105111,105113,105115,105117],{"class":254,"line":2716},[252,105110,101544],{"class":262},[252,105112,308],{"class":258},[252,105114,101549],{"class":262},[252,105116,101451],{"class":311},[252,105118,269],{"class":262},[252,105120,105121,105123,105125],{"class":254,"line":2730},[252,105122,101558],{"class":262},[252,105124,308],{"class":258},[252,105126,101563],{"class":262},[252,105128,105129],{"class":254,"line":2738},[252,105130,2539],{"emptyLinePlaceholder":181},[252,105132,105133,105136,105139],{"class":254,"line":2743},[252,105134,105135],{"class":262},"    print_state(",[252,105137,105138],{"class":367},"\"initial\"",[252,105140,105141],{"class":262},", model, data)\n",[252,105143,105144],{"class":254,"line":2749},[252,105145,2539],{"emptyLinePlaceholder":181},[252,105147,105148,105150,105152,105154,105156,105158,105160],{"class":254,"line":2755},[252,105149,3340],{"class":258},[252,105151,101638],{"class":262},[252,105153,26183],{"class":258},[252,105155,32583],{"class":311},[252,105157,263],{"class":262},[252,105159,919],{"class":311},[252,105161,30926],{"class":262},[252,105163,105164],{"class":254,"line":2760},[252,105165,101653],{"class":262},[252,105167,105168],{"class":254,"line":8088},[252,105169,2539],{"emptyLinePlaceholder":181},[252,105171,105172,105174,105177],{"class":254,"line":8112},[252,105173,105135],{"class":262},[252,105175,105176],{"class":367},"\"after 50 steps\"",[252,105178,105141],{"class":262},[252,105180,105181],{"class":254,"line":8117},[252,105182,2539],{"emptyLinePlaceholder":181},[252,105184,105185],{"class":254,"line":8123},[252,105186,105187],{"class":262},"    mujoco.mj_resetData(model, data)\n",[252,105189,105190,105192,105195],{"class":254,"line":8150},[252,105191,105135],{"class":262},[252,105193,105194],{"class":367},"\"after reset\"",[252,105196,105141],{"class":262},[252,105198,105199],{"class":254,"line":8155},[252,105200,2539],{"emptyLinePlaceholder":181},[252,105202,105203,105206,105208,105210,105212],{"class":254,"line":8161},[252,105204,105205],{"class":262},"    data.qpos[",[252,105207,340],{"class":311},[252,105209,4582],{"class":262},[252,105211,308],{"class":258},[252,105213,104844],{"class":311},[252,105215,105216],{"class":254,"line":8173},[252,105217,105218],{"class":262},"    mujoco.mj_forward(model, data)\n",[252,105220,105221,105223,105226],{"class":254,"line":8185},[252,105222,105135],{"class":262},[252,105224,105225],{"class":367},"\"after manual qpos edit\"",[252,105227,105141],{"class":262},[252,105229,105230],{"class":254,"line":8197},[252,105231,2539],{"emptyLinePlaceholder":181},[252,105233,105234],{"class":254,"line":9856},[252,105235,2539],{"emptyLinePlaceholder":181},[252,105237,105238,105240,105242,105244,105246],{"class":254,"line":9881},[252,105239,1670],{"class":258},[252,105241,31360],{"class":311},[252,105243,101696],{"class":258},[252,105245,101699],{"class":367},[252,105247,3878],{"class":262},[252,105249,105250],{"class":254,"line":9904},[252,105251,101706],{"class":262},[19,105253,103706],{},[244,105255,105257],{"className":23961,"code":105256,"language":23963,"meta":169,"style":169},"touch ch3_python_state.py\n",[22,105258,105259],{"__ignoreMap":169},[252,105260,105261,105263],{"class":254,"line":255},[252,105262,101420],{"class":2102},[252,105264,105265],{"class":367}," ch3_python_state.py\n",[19,105267,102438],{},[244,105269,105271],{"className":23961,"code":105270,"language":23963,"meta":169,"style":169},"python ch3_python_state.py\n",[22,105272,105273],{"__ignoreMap":169},[252,105274,105275,105277],{"class":254,"line":255},[252,105276,30520],{"class":2102},[252,105278,105265],{"class":367},[224,105280,101709],{"id":101709},[19,105282,105283],{},"打印状态的函数：",[244,105285,105287],{"className":30518,"code":105286,"language":30520,"meta":169,"style":169},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[22,105288,105289],{"__ignoreMap":169},[252,105290,105291,105293,105295,105297,105299,105301,105303],{"class":254,"line":255},[252,105292,32087],{"class":258},[252,105294,105012],{"class":2102},[252,105296,105015],{"class":262},[252,105298,1438],{"class":311},[252,105300,105020],{"class":262},[252,105302,95824],{"class":311},[252,105304,3878],{"class":262},[19,105306,105307,105308,105310],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[22,105309,33541],{}," 里发生了什么。",[19,105312,105313],{},"推进 50 步：",[244,105315,105317],{"className":30518,"code":105316,"language":30520,"meta":169,"style":169},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[22,105318,105319,105335],{"__ignoreMap":169},[252,105320,105321,105323,105325,105327,105329,105331,105333],{"class":254,"line":255},[252,105322,3164],{"class":258},[252,105324,101638],{"class":262},[252,105326,26183],{"class":258},[252,105328,32583],{"class":311},[252,105330,263],{"class":262},[252,105332,919],{"class":311},[252,105334,30926],{"class":262},[252,105336,105337],{"class":254,"line":170},[252,105338,101836],{"class":262},[19,105340,105341,105342,105345,105346,105348],{},"由于 ",[22,105343,105344],{},"timestep=0.01","，所以 50 步后时间约为 ",[22,105347,35469],{}," 秒。",[19,105350,105351],{},"重置：",[244,105353,105354],{"className":30518,"code":104662,"language":30520,"meta":169,"style":169},[22,105355,105356],{"__ignoreMap":169},[252,105357,105358],{"class":254,"line":255},[252,105359,104662],{"class":262},[19,105361,105362],{},"这会把时间、位置、速度恢复到初始状态。",[19,105364,105365],{},"手动改高度：",[244,105367,105369],{"className":30518,"code":105368,"language":30520,"meta":169,"style":169},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[22,105370,105371,105383],{"__ignoreMap":169},[252,105372,105373,105375,105377,105379,105381],{"class":254,"line":255},[252,105374,104835],{"class":262},[252,105376,340],{"class":311},[252,105378,4582],{"class":262},[252,105380,308],{"class":258},[252,105382,104844],{"class":311},[252,105384,105385],{"class":254,"line":170},[252,105386,104679],{"class":262},[19,105388,105389,105390,105393,105394,105397],{},"这个例子里 ",[22,105391,105392],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[22,105395,105396],{},"2.0"," 表示把小球放到更高的位置。",[224,105399,101845],{"id":101845},[244,105401,105402],{"className":30518,"code":105286,"language":30520,"meta":169,"style":169},[22,105403,105404],{"__ignoreMap":169},[252,105405,105406,105408,105410,105412,105414,105416,105418],{"class":254,"line":255},[252,105407,32087],{"class":258},[252,105409,105012],{"class":2102},[252,105411,105015],{"class":262},[252,105413,1438],{"class":311},[252,105415,105020],{"class":262},[252,105417,95824],{"class":311},[252,105419,3878],{"class":262},[19,105421,105422],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[207,105424,105425,105434,105439],{},[210,105426,105427,105430,105431,105433],{},[22,105428,105429],{},"prefix","：一段文字，比如 ",[22,105432,105138],{},"，用来说明现在打印的是哪个阶段。",[210,105435,105436,105438],{},[22,105437,102222],{},"：MuJoCo 模型。",[210,105440,105441,105443],{},[22,105442,33541],{},"：MuJoCo 当前状态。",[19,105445,105446,475,105449,105452],{},[22,105447,105448],{},"prefix: str",[22,105450,105451],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[244,105454,105456],{"className":30518,"code":105455,"language":30520,"meta":169,"style":169},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[22,105457,105458],{"__ignoreMap":169},[252,105459,105460,105462,105464,105466,105468,105470],{"class":254,"line":255},[252,105461,30555],{"class":311},[252,105463,263],{"class":262},[252,105465,105063],{"class":367},[252,105467,105066],{"class":262},[252,105469,556],{"class":311},[252,105471,30637],{"class":262},[19,105473,105474,105477],{},[22,105475,105476],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[244,105479,105481],{"className":30518,"code":105480,"language":30520,"meta":169,"style":169},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[22,105482,105483,105495],{"__ignoreMap":169},[252,105484,105485,105487,105489,105491,105493],{"class":254,"line":255},[252,105486,101771],{"class":262},[252,105488,308],{"class":258},[252,105490,101549],{"class":262},[252,105492,101451],{"class":311},[252,105494,269],{"class":262},[252,105496,105497,105499,105501],{"class":254,"line":170},[252,105498,101795],{"class":262},[252,105500,308],{"class":258},[252,105502,101563],{"class":262},[19,105504,105505],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[244,105507,105509],{"className":30518,"code":105508,"language":30520,"meta":169,"style":169},"print_state(\"initial\", model, data)\n",[22,105510,105511],{"__ignoreMap":169},[252,105512,105513,105516,105518],{"class":254,"line":255},[252,105514,105515],{"class":262},"print_state(",[252,105517,105138],{"class":367},[252,105519,105141],{"class":262},[19,105521,105522,105523,105526],{},"调用刚才定义的 ",[22,105524,105525],{},"print_state"," 函数，打印初始状态。",[244,105528,105529],{"className":30518,"code":105316,"language":30520,"meta":169,"style":169},[22,105530,105531,105547],{"__ignoreMap":169},[252,105532,105533,105535,105537,105539,105541,105543,105545],{"class":254,"line":255},[252,105534,3164],{"class":258},[252,105536,101638],{"class":262},[252,105538,26183],{"class":258},[252,105540,32583],{"class":311},[252,105542,263],{"class":262},[252,105544,919],{"class":311},[252,105546,30926],{"class":262},[252,105548,105549],{"class":254,"line":170},[252,105550,101836],{"class":262},[19,105552,105553],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[244,105555,105556],{"className":30518,"code":104662,"language":30520,"meta":169,"style":169},[22,105557,105558],{"__ignoreMap":169},[252,105559,105560],{"class":254,"line":255},[252,105561,104662],{"class":262},[19,105563,105564,105565,105567,105568,105570],{},"重置 ",[22,105566,33541],{},"。注意它不会重新创建 ",[22,105569,102222],{},"，因为模型结构没有变，只是状态回到初始值。",[244,105572,105573],{"className":30518,"code":104828,"language":30520,"meta":169,"style":169},[22,105574,105575],{"__ignoreMap":169},[252,105576,105577,105579,105581,105583,105585],{"class":254,"line":255},[252,105578,104835],{"class":262},[252,105580,340],{"class":311},[252,105582,4582],{"class":262},[252,105584,308],{"class":258},[252,105586,104844],{"class":311},[19,105588,105589,105590,475,105593,475,105596,105598],{},"这行是“手动改状态”。在 freejoint 中，",[22,105591,105592],{},"qpos[0]",[22,105594,105595],{},"qpos[1]",[22,105597,105392],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[244,105600,105601],{"className":30518,"code":104679,"language":30520,"meta":169,"style":169},[22,105602,105603],{"__ignoreMap":169},[252,105604,105605],{"class":254,"line":255},[252,105606,104679],{"class":262},[19,105608,105609,105610,105612,105613,105615],{},"手动改完 ",[22,105611,104166],{}," 后，调用 ",[22,105614,104386],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105617,102453],{"id":102452},[19,105619,105620],{},"你会看到:",[207,105622,105623,105628,105633,105636],{},[210,105624,105625,105626],{},"初始时间为 ",[22,105627,454],{},[210,105629,105630,105631],{},"50 步后时间约为 ",[22,105632,35469],{},[210,105634,105635],{},"reset 后状态恢复",[210,105637,105638,105639,105642,105643],{},"手动修改 ",[22,105640,105641],{},"data.qpos[2]"," 后，小球高度变为 ",[22,105644,105396],{},[19,105646,105647,105649],{},[22,105648,105392],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105651,105652],{},"输出里可以重点看三件事：",[207,105654,105655,105663,105668],{},[210,105656,105657,105659,105660,105662],{},[22,105658,2526],{}," 是否随着 ",[22,105661,101352],{}," 增加。",[210,105664,105665,105667],{},[22,105666,104166],{}," 的 z 坐标是否因为下落而变化。",[210,105669,105670,105672,105673,28525],{},[22,105671,104488],{}," 后时间是否回到 ",[22,105674,454],{},[14,105676,102485],{"id":102484},[207,105678,105679,105685,105691,105697,105700,105709],{},[210,105680,105681,105682,28525],{},"修改 timestep 为 ",[22,105683,105684],{},"0.005",[210,105686,105687,105688,28525],{},"重新运行，检查 50 步后时间是否约为 ",[22,105689,105690],{},"0.25",[210,105692,105693,105694,28525],{},"修改重力为 ",[22,105695,105696],{},"0 0 -1.0",[210,105698,105699],{},"观察小球下降速度是否变慢。",[210,105701,102548,105702,102551,105705,105708],{},[22,105703,105704],{},"data.qpos[2] = 2.0",[22,105706,105707],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[210,105710,105711,105712,105715],{},"注释掉 ",[22,105713,105714],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105717,102590],{"id":102589},[224,105719,105721,105722,105724],{"id":105720},"修改-dataqpos-后位置没有更新","修改 ",[22,105723,101207],{}," 后位置没有更新",[19,105726,102599],{},[244,105728,105729],{"className":30518,"code":104679,"language":30520,"meta":169,"style":169},[22,105730,105731],{"__ignoreMap":169},[252,105732,105733],{"class":254,"line":255},[252,105734,104679],{"class":262},[224,105736,105737],{"id":105737},"数组维度看不懂",[19,105739,105740],{},"打印模型维度:",[244,105742,105744],{"className":30518,"code":105743,"language":30520,"meta":169,"style":169},"print(model.nq, model.nv, model.nu)\n",[22,105745,105746],{"__ignoreMap":169},[252,105747,105748,105750],{"class":254,"line":255},[252,105749,30555],{"class":311},[252,105751,105752],{"class":262},"(model.nq, model.nv, model.nu)\n",[400,105754,105755,105763],{},[403,105756,105757],{},[406,105758,105759,105761],{},[409,105760,104710],{"align":23875},[409,105762,100838],{"align":23875},[447,105764,105765,105775,105785],{},[406,105766,105767,105772],{},[452,105768,105769],{"align":23875},[22,105770,105771],{},"nq",[452,105773,105774],{"align":23875},"位置变量数量",[406,105776,105777,105782],{},[452,105778,105779],{"align":23875},[22,105780,105781],{},"nv",[452,105783,105784],{"align":23875},"速度变量数量",[406,105786,105787,105791],{},[452,105788,105789],{"align":23875},[22,105790,102299],{},[452,105792,105793],{"align":23875},"控制输入数量",[224,105795,105797,105798,105800],{"id":105796},"误以为-qpos-一定等于关节数","误以为 ",[22,105799,104166],{}," 一定等于关节数",[19,105802,105803,105804,82669,105806,105808,105809,105811],{},"不是。例如 ",[22,105805,101757],{},[22,105807,104166],{}," 是 7 维，但 ",[22,105810,104496],{}," 是 6 维。",[224,105813,105815,105816,105818],{"id":105814},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[22,105817,104166],{}," 的第几位",[19,105820,105821],{},"初学时可以先打印：",[244,105823,105825],{"className":30518,"code":105824,"language":30520,"meta":169,"style":169},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[22,105826,105827,105837,105847,105859],{"__ignoreMap":169},[252,105828,105829,105831,105833,105835],{"class":254,"line":255},[252,105830,30555],{"class":311},[252,105832,263],{"class":262},[252,105834,101576],{"class":367},[252,105836,101579],{"class":262},[252,105838,105839,105841,105843,105845],{"class":254,"line":170},[252,105840,30555],{"class":311},[252,105842,263],{"class":262},[252,105844,101588],{"class":367},[252,105846,101591],{"class":262},[252,105848,105849,105851,105853,105856],{"class":254,"line":1318},[252,105850,30555],{"class":311},[252,105852,263],{"class":262},[252,105854,105855],{"class":367},"\"qpos:\"",[252,105857,105858],{"class":262},", data.qpos)\n",[252,105860,105861,105863,105865,105868],{"class":254,"line":1333},[252,105862,30555],{"class":311},[252,105864,263],{"class":262},[252,105866,105867],{"class":367},"\"qvel:\"",[252,105869,105870],{"class":262},", data.qvel)\n",[19,105872,105873],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[224,105875,105876],{"id":105876},"仿真结果每次都一样",[19,105878,105879,105880,105882],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[22,105881,104166],{},"、目标点或控制输入。",[14,105884,102744],{"id":102743},[19,105886,105887,105888,24758],{},"Python 控制 MuJoCo 的核心就是读写 ",[22,105889,33541],{},[207,105891,105892,105900,105905,105910],{},[210,105893,105894,105895,132,105897,105899],{},"用 ",[22,105896,101207],{},[22,105898,101210],{}," 读取状态。",[210,105901,105894,105902,105904],{},[22,105903,101213],{}," 写入控制。",[210,105906,105894,105907,105909],{},[22,105908,101352],{}," 推进时间。",[210,105911,105912,105913,105915],{},"手动改状态后用 ",[22,105914,104386],{}," 刷新派生量。",[19,105917,105918],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5266,105920,105921],{},"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":169,"searchDepth":170,"depth":170,"links":105923},[105924,105925,105926,105933,105937,105938,105939,105949],{"id":100784,"depth":170,"text":100785},{"id":100907,"depth":170,"text":100908},{"id":101181,"depth":170,"text":101182,"children":105927},[105928,105930,105932],{"id":104691,"depth":1318,"text":105929},"qpos、qvel、ctrl 是什么",{"id":104769,"depth":1318,"text":105931},"mj_step 和 mj_forward 的区别",{"id":104858,"depth":1318,"text":104859},{"id":101389,"depth":170,"text":101390,"children":105934},[105935,105936],{"id":101709,"depth":1318,"text":101709},{"id":101845,"depth":1318,"text":101845},{"id":102452,"depth":170,"text":102453},{"id":102484,"depth":170,"text":102485},{"id":102589,"depth":170,"text":102590,"children":105940},[105941,105943,105944,105946,105948],{"id":105720,"depth":1318,"text":105942},"修改 data.qpos 后位置没有更新",{"id":105737,"depth":1318,"text":105737},{"id":105796,"depth":1318,"text":105945},"误以为 qpos 一定等于关节数",{"id":105814,"depth":1318,"text":105947},"不知道某个元素在 qpos 的第几位",{"id":105876,"depth":1318,"text":105876},{"id":102743,"depth":170,"text":102744},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104454,"description":169},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105956,"title":105957,"body":105958,"description":169,"extension":179,"meta":107648,"navigation":181,"path":107649,"seo":107650,"stem":107651,"__hash__":107652},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105959,"toc":107624},[105960,105963,105965,105968,105970,105995,105998,106017,106020,106022,106024,106048,106050,106064,106066,106107,106109,106133,106135,106138,106172,106174,106187,106190,106258,106267,106271,106274,106308,106314,106317,106321,106360,106363,106383,106387,106430,106432,106461,106464,106470,106473,106475,106869,106871,106883,106885,106896,106898,106901,106930,106938,106941,106976,106979,106981,106989,106992,106994,107005,107015,107035,107038,107074,107086,107134,107153,107195,107208,107236,107241,107262,107272,107290,107293,107327,107330,107350,107353,107372,107378,107380,107383,107389,107395,107405,107408,107414,107423,107425,107471,107473,107479,107485,107488,107491,107511,107514,107520,107526,107528,107551,107554,107557,107566,107569,107607,107609,107612,107618,107621],[10,105961,105957],{"id":105962},"_4关节actuator-与力控制",[14,105964,100785],{"id":100784},[19,105966,105967],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,105969,104467],{},[207,105971,105972,105978,105983,105987,105992],{},[210,105973,105974,105977],{},[22,105975,105976],{},"hinge"," 关节",[210,105979,105980],{},[22,105981,105982],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[210,105984,105985],{},[22,105986,101213],{},[210,105988,105989],{},[22,105990,105991],{},"ctrlrange",[210,105993,105994],{},"读取关节角和角速度",[19,105996,105997],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[244,105999,106001],{"className":30518,"code":106000,"language":30520,"meta":169,"style":169},"data.ctrl[0] = ...\n",[22,106002,106003],{"__ignoreMap":169},[252,106004,106005,106008,106010,106012,106014],{"class":254,"line":255},[252,106006,106007],{"class":262},"data.ctrl[",[252,106009,454],{"class":311},[252,106011,4582],{"class":262},[252,106013,308],{"class":258},[252,106015,106016],{"class":311}," ...\n",[19,106018,106019],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106021,100908],{"id":100907},[19,106023,100911],{},[244,106025,106026],{"className":23961,"code":104524,"language":23963,"meta":169,"style":169},[22,106027,106028],{"__ignoreMap":169},[252,106029,106030,106032,106034,106036,106038,106040,106042,106044,106046],{"class":254,"line":255},[252,106031,24716],{"class":2102},[252,106033,26455],{"class":367},[252,106035,23973],{"class":367},[252,106037,26540],{"class":311},[252,106039,104539],{"class":367},[252,106041,100936],{"class":367},[252,106043,102638],{"class":367},[252,106045,100952],{"class":367},[252,106047,104548],{"class":367},[19,106049,102955],{},[244,106051,106052],{"className":23961,"code":101057,"language":23963,"meta":169,"style":169},[22,106053,106054],{"__ignoreMap":169},[252,106055,106056,106058,106060,106062],{"class":254,"line":255},[252,106057,23970],{"class":2102},[252,106059,23973],{"class":367},[252,106061,101068],{"class":367},[252,106063,101071],{"class":367},[19,106065,102972],{},[244,106067,106069],{"className":23961,"code":106068,"language":23963,"meta":169,"style":169},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[22,106070,106071,106088,106097],{"__ignoreMap":169},[252,106072,106073,106075,106077,106079,106082,106084,106086],{"class":254,"line":255},[252,106074,30470],{"class":2102},[252,106076,29316],{"class":367},[252,106078,25255],{"class":311},[252,106080,106081],{"class":367}," mujoco-control",[252,106083,101113],{"class":367},[252,106085,101116],{"class":311},[252,106087,101119],{"class":311},[252,106089,106090,106092,106094],{"class":254,"line":170},[252,106091,30470],{"class":2102},[252,106093,101126],{"class":367},[252,106095,106096],{"class":367}," mujoco-control\n",[252,106098,106099,106101,106103,106105],{"class":254,"line":1318},[252,106100,23970],{"class":2102},[252,106102,23973],{"class":367},[252,106104,101068],{"class":367},[252,106106,101071],{"class":367},[19,106108,101142],{},[207,106110,106111,106117,106124,106130],{},[210,106112,106113,106116],{},[22,106114,106115],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[210,106118,106119,106121,106122,28525],{},[22,106120,101213],{}," 长度等于 ",[22,106123,102295],{},[210,106125,82361,106126,106129],{},[22,106127,106128],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[210,106131,106132],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106134,101182],{"id":101181},[19,106136,106137],{},"关节决定 body 如何运动:",[244,106139,106141],{"className":53207,"code":106140,"language":53209,"meta":169,"style":169},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[22,106142,106143],{"__ignoreMap":169},[252,106144,106145,106147,106149,106151,106153,106156,106158,106160,106162,106165,106167,106170],{"class":254,"line":255},[252,106146,1173],{"class":262},[252,106148,103092],{"class":51440},[252,106150,15060],{"class":2102},[252,106152,308],{"class":262},[252,106154,106155],{"class":367},"\"hinge\"",[252,106157,53964],{"class":2102},[252,106159,308],{"class":262},[252,106161,106155],{"class":367},[252,106163,106164],{"class":2102}," axis",[252,106166,308],{"class":262},[252,106168,106169],{"class":367},"\"0 1 0\"",[252,106171,101281],{"class":262},[19,106173,103188],{},[207,106175,106176,106181,106184],{},[210,106177,106178,106179],{},"名字是 ",[22,106180,105976],{},[210,106182,106183],{},"类型是旋转关节",[210,106185,106186],{},"绕 y 轴旋转",[19,106188,106189],{},"actuator 决定如何施加控制:",[244,106191,106193],{"className":53207,"code":106192,"language":53209,"meta":169,"style":169},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[22,106194,106195,106204,106250],{"__ignoreMap":169},[252,106196,106197,106199,106202],{"class":254,"line":255},[252,106198,1173],{"class":262},[252,106200,106201],{"class":51440},"actuator",[252,106203,51447],{"class":262},[252,106205,106206,106208,106211,106213,106215,106218,106221,106223,106225,106228,106230,106232,106235,106237,106240,106243,106245,106248],{"class":254,"line":170},[252,106207,52284],{"class":262},[252,106209,106210],{"class":51440},"motor",[252,106212,15060],{"class":2102},[252,106214,308],{"class":262},[252,106216,106217],{"class":367},"\"hinge_motor\"",[252,106219,106220],{"class":2102}," joint",[252,106222,308],{"class":262},[252,106224,106155],{"class":367},[252,106226,106227],{"class":2102}," gear",[252,106229,308],{"class":262},[252,106231,3817],{"class":367},[252,106233,106234],{"class":2102}," ctrlrange",[252,106236,308],{"class":262},[252,106238,106239],{"class":367},"\"-2 2\"",[252,106241,106242],{"class":2102}," ctrllimited",[252,106244,308],{"class":262},[252,106246,106247],{"class":367},"\"true\"",[252,106249,101281],{"class":262},[252,106251,106252,106254,106256],{"class":254,"line":1318},[252,106253,51925],{"class":262},[252,106255,106201],{"class":51440},[252,106257,51447],{"class":262},[19,106259,106260,106263,106264,28525],{},[22,106261,106262],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[22,106265,106266],{},"[-2, 2]",[224,106268,106270],{"id":106269},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106272,106273],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[400,106275,106276,106286],{},[403,106277,106278],{},[406,106279,106280,106282,106284],{},[409,106281,25893],{"align":23875},[409,106283,102832],{"align":23875},[409,106285,100872],{"align":23875},[447,106287,106288,106298],{},[406,106289,106290,106292,106295],{},[452,106291,103092],{"align":23875},[452,106293,106294],{"align":23875},"定义能怎么动",[452,106296,106297],{"align":23875},"门轴允许门旋转",[406,106299,106300,106302,106305],{},[452,106301,106201],{"align":23875},[452,106303,106304],{"align":23875},"定义怎么施力或控制",[452,106306,106307],{"align":23875},"人推门、马达带动门",[19,106309,106310,106311,106313],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[22,106312,101213],{}," 主动控制它。",[19,106315,106316],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[224,106318,106320],{"id":106319},"hinge-joint","hinge joint",[244,106322,106324],{"className":53207,"code":106323,"language":53209,"meta":169,"style":169},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[22,106325,106326],{"__ignoreMap":169},[252,106327,106328,106330,106332,106334,106336,106338,106340,106342,106344,106346,106348,106350,106353,106355,106358],{"class":254,"line":255},[252,106329,1173],{"class":262},[252,106331,103092],{"class":51440},[252,106333,15060],{"class":2102},[252,106335,308],{"class":262},[252,106337,106155],{"class":367},[252,106339,53964],{"class":2102},[252,106341,308],{"class":262},[252,106343,106155],{"class":367},[252,106345,106164],{"class":2102},[252,106347,308],{"class":262},[252,106349,106169],{"class":367},[252,106351,106352],{"class":2102}," damping",[252,106354,308],{"class":262},[252,106356,106357],{"class":367},"\"0.1\"",[252,106359,101281],{"class":262},[19,106361,106362],{},"含义：",[207,106364,106365,106371,106377],{},[210,106366,106367,106370],{},[22,106368,106369],{},"type=\"hinge\"","：只能绕一个轴旋转。",[210,106372,106373,106376],{},[22,106374,106375],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[210,106378,106379,106382],{},[22,106380,106381],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[224,106384,106386],{"id":106385},"motor-actuator","motor actuator",[244,106388,106390],{"className":53207,"code":106389,"language":53209,"meta":169,"style":169},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[22,106391,106392],{"__ignoreMap":169},[252,106393,106394,106396,106398,106400,106402,106404,106406,106408,106410,106412,106414,106416,106418,106420,106422,106424,106426,106428],{"class":254,"line":255},[252,106395,1173],{"class":262},[252,106397,106210],{"class":51440},[252,106399,15060],{"class":2102},[252,106401,308],{"class":262},[252,106403,106217],{"class":367},[252,106405,106220],{"class":2102},[252,106407,308],{"class":262},[252,106409,106155],{"class":367},[252,106411,106227],{"class":2102},[252,106413,308],{"class":262},[252,106415,3817],{"class":367},[252,106417,106234],{"class":2102},[252,106419,308],{"class":262},[252,106421,106239],{"class":367},[252,106423,106242],{"class":2102},[252,106425,308],{"class":262},[252,106427,106247],{"class":367},[252,106429,101281],{"class":262},[19,106431,106362],{},[207,106433,106434,106443,106449,106455],{},[210,106435,106436,106439,106440,106442],{},[22,106437,106438],{},"joint=\"hinge\"","：这个电机作用在名为 ",[22,106441,105976],{}," 的关节上。",[210,106444,106445,106448],{},[22,106446,106447],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[210,106450,106451,106454],{},[22,106452,106453],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[210,106456,106457,106460],{},[22,106458,106459],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106462,106463],{},"简单理解：",[244,106465,106468],{"className":106466,"code":106467,"language":5327,"meta":169},[5325],"实际施加效果 ≈ data.ctrl[0] * gear\n",[22,106469,106467],{"__ignoreMap":169},[19,106471,106472],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106474,101390],{"id":101389},[244,106476,106478],{"className":30518,"code":106477,"language":30520,"meta":169,"style":169},"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",[22,106479,106480,106487,106491,106497,106507,106511,106515,106523,106528,106533,106537,106541,106546,106551,106555,106560,106565,106570,106575,106579,106583,106587,106592,106597,106602,106606,106610,106614,106618,106630,106642,106650,106654,106664,106674,106684,106688,106701,106714,106718,106735,106749,106784,106788,106792,106803,106818,106833,106845,106849,106853,106865],{"__ignoreMap":169},[252,106481,106482,106484],{"class":254,"line":255},[252,106483,30532],{"class":258},[252,106485,106486],{"class":262}," math\n",[252,106488,106489],{"class":254,"line":170},[252,106490,2539],{"emptyLinePlaceholder":181},[252,106492,106493,106495],{"class":254,"line":1318},[252,106494,30532],{"class":258},[252,106496,101438],{"class":262},[252,106498,106499,106501,106503,106505],{"class":254,"line":1333},[252,106500,30532],{"class":258},[252,106502,31520],{"class":262},[252,106504,31523],{"class":258},[252,106506,31526],{"class":262},[252,106508,106509],{"class":254,"line":1339},[252,106510,2539],{"emptyLinePlaceholder":181},[252,106512,106513],{"class":254,"line":1353},[252,106514,2539],{"emptyLinePlaceholder":181},[252,106516,106517,106519,106521],{"class":254,"line":1359},[252,106518,101451],{"class":311},[252,106520,13704],{"class":258},[252,106522,101456],{"class":367},[252,106524,106525],{"class":254,"line":1450},[252,106526,106527],{"class":367},"\u003Cmujoco model=\"one_link_motor\">\n",[252,106529,106530],{"class":254,"line":1456},[252,106531,106532],{"class":367},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[252,106534,106535],{"class":254,"line":1468},[252,106536,2539],{"emptyLinePlaceholder":181},[252,106538,106539],{"class":254,"line":1751},[252,106540,101475],{"class":367},[252,106542,106543],{"class":254,"line":1756},[252,106544,106545],{"class":367},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[252,106547,106548],{"class":254,"line":1762},[252,106549,106550],{"class":367},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[252,106552,106553],{"class":254,"line":1767},[252,106554,2539],{"emptyLinePlaceholder":181},[252,106556,106557],{"class":254,"line":1781},[252,106558,106559],{"class":367},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[252,106561,106562],{"class":254,"line":1786},[252,106563,106564],{"class":367},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[252,106566,106567],{"class":254,"line":1792},[252,106568,106569],{"class":367},"        \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",[252,106571,106572],{"class":254,"line":1813},[252,106573,106574],{"class":367},"      \u003C\u002Fbody>\n",[252,106576,106577],{"class":254,"line":1818},[252,106578,101504],{"class":367},[252,106580,106581],{"class":254,"line":1832},[252,106582,101509],{"class":367},[252,106584,106585],{"class":254,"line":1837},[252,106586,2539],{"emptyLinePlaceholder":181},[252,106588,106589],{"class":254,"line":1866},[252,106590,106591],{"class":367},"  \u003Cactuator>\n",[252,106593,106594],{"class":254,"line":1871},[252,106595,106596],{"class":367},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[252,106598,106599],{"class":254,"line":1888},[252,106600,106601],{"class":367},"  \u003C\u002Factuator>\n",[252,106603,106604],{"class":254,"line":1893},[252,106605,101514],{"class":367},[252,106607,106608],{"class":254,"line":1898},[252,106609,95836],{"class":367},[252,106611,106612],{"class":254,"line":1903},[252,106613,2539],{"emptyLinePlaceholder":181},[252,106615,106616],{"class":254,"line":1917},[252,106617,2539],{"emptyLinePlaceholder":181},[252,106619,106620,106622,106624,106626,106628],{"class":254,"line":1922},[252,106621,32087],{"class":258},[252,106623,2112],{"class":2102},[252,106625,101535],{"class":262},[252,106627,95824],{"class":311},[252,106629,3878],{"class":262},[252,106631,106632,106634,106636,106638,106640],{"class":254,"line":2716},[252,106633,101544],{"class":262},[252,106635,308],{"class":258},[252,106637,101549],{"class":262},[252,106639,101451],{"class":311},[252,106641,269],{"class":262},[252,106643,106644,106646,106648],{"class":254,"line":2730},[252,106645,101558],{"class":262},[252,106647,308],{"class":258},[252,106649,101563],{"class":262},[252,106651,106652],{"class":254,"line":2738},[252,106653,2539],{"emptyLinePlaceholder":181},[252,106655,106656,106658,106660,106662],{"class":254,"line":2743},[252,106657,31439],{"class":311},[252,106659,263],{"class":262},[252,106661,101576],{"class":367},[252,106663,101579],{"class":262},[252,106665,106666,106668,106670,106672],{"class":254,"line":2749},[252,106667,31439],{"class":311},[252,106669,263],{"class":262},[252,106671,101588],{"class":367},[252,106673,101591],{"class":262},[252,106675,106676,106678,106680,106682],{"class":254,"line":2755},[252,106677,31439],{"class":311},[252,106679,263],{"class":262},[252,106681,101600],{"class":367},[252,106683,101603],{"class":262},[252,106685,106686],{"class":254,"line":2760},[252,106687,2539],{"emptyLinePlaceholder":181},[252,106689,106690,106692,106695,106697,106699],{"class":254,"line":8088},[252,106691,3240],{"class":258},[252,106693,106694],{"class":262}," model.nu ",[252,106696,21087],{"class":258},[252,106698,25258],{"class":311},[252,106700,3878],{"class":262},[252,106702,106703,106705,106707,106709,106712],{"class":254,"line":8112},[252,106704,103568],{"class":258},[252,106706,103571],{"class":311},[252,106708,263],{"class":262},[252,106710,106711],{"class":367},"\"expected exactly one actuator\"",[252,106713,269],{"class":262},[252,106715,106716],{"class":254,"line":8117},[252,106717,2539],{"emptyLinePlaceholder":181},[252,106719,106720,106722,106724,106726,106728,106730,106733],{"class":254,"line":8123},[252,106721,3340],{"class":258},[252,106723,31756],{"class":262},[252,106725,26183],{"class":258},[252,106727,32583],{"class":311},[252,106729,263],{"class":262},[252,106731,106732],{"class":311},"2000",[252,106734,30926],{"class":262},[252,106736,106737,106740,106742,106744,106746],{"class":254,"line":8150},[252,106738,106739],{"class":262},"        t ",[252,106741,308],{"class":258},[252,106743,31756],{"class":262},[252,106745,718],{"class":258},[252,106747,106748],{"class":262}," model.opt.timestep\n",[252,106750,106751,106754,106756,106758,106760,106763,106765,106768,106770,106772,106775,106777,106779,106781],{"class":254,"line":8155},[252,106752,106753],{"class":262},"        data.ctrl[",[252,106755,454],{"class":311},[252,106757,4582],{"class":262},[252,106759,308],{"class":258},[252,106761,106762],{"class":311}," 1.5",[252,106764,6658],{"class":258},[252,106766,106767],{"class":262}," math.sin(",[252,106769,105396],{"class":311},[252,106771,6658],{"class":258},[252,106773,106774],{"class":262}," math.pi ",[252,106776,718],{"class":258},[252,106778,62007],{"class":311},[252,106780,6658],{"class":258},[252,106782,106783],{"class":262}," t)\n",[252,106785,106786],{"class":254,"line":8161},[252,106787,101653],{"class":262},[252,106789,106790],{"class":254,"line":8173},[252,106791,2539],{"emptyLinePlaceholder":181},[252,106793,106794,106796,106798,106801],{"class":254,"line":8185},[252,106795,31439],{"class":311},[252,106797,263],{"class":262},[252,106799,106800],{"class":367},"\"time:\"",[252,106802,101615],{"class":262},[252,106804,106805,106807,106809,106812,106814,106816],{"class":254,"line":8197},[252,106806,31439],{"class":311},[252,106808,263],{"class":262},[252,106810,106811],{"class":367},"\"joint qpos:\"",[252,106813,105066],{"class":262},[252,106815,556],{"class":311},[252,106817,30637],{"class":262},[252,106819,106820,106822,106824,106827,106829,106831],{"class":254,"line":9856},[252,106821,31439],{"class":311},[252,106823,263],{"class":262},[252,106825,106826],{"class":367},"\"joint qvel:\"",[252,106828,105082],{"class":262},[252,106830,556],{"class":311},[252,106832,30637],{"class":262},[252,106834,106835,106837,106839,106842],{"class":254,"line":9881},[252,106836,31439],{"class":311},[252,106838,263],{"class":262},[252,106840,106841],{"class":367},"\"last ctrl:\"",[252,106843,106844],{"class":262},", data.ctrl.copy())\n",[252,106846,106847],{"class":254,"line":9904},[252,106848,2539],{"emptyLinePlaceholder":181},[252,106850,106851],{"class":254,"line":9928},[252,106852,2539],{"emptyLinePlaceholder":181},[252,106854,106855,106857,106859,106861,106863],{"class":254,"line":9933},[252,106856,1670],{"class":258},[252,106858,31360],{"class":311},[252,106860,101696],{"class":258},[252,106862,101699],{"class":367},[252,106864,3878],{"class":262},[252,106866,106867],{"class":254,"line":9938},[252,106868,101706],{"class":262},[19,106870,103706],{},[244,106872,106874],{"className":23961,"code":106873,"language":23963,"meta":169,"style":169},"touch ch4_joint_motor.py\n",[22,106875,106876],{"__ignoreMap":169},[252,106877,106878,106880],{"class":254,"line":255},[252,106879,101420],{"class":2102},[252,106881,106882],{"class":367}," ch4_joint_motor.py\n",[19,106884,102438],{},[244,106886,106888],{"className":23961,"code":106887,"language":23963,"meta":169,"style":169},"python ch4_joint_motor.py\n",[22,106889,106890],{"__ignoreMap":169},[252,106891,106892,106894],{"class":254,"line":255},[252,106893,30520],{"class":2102},[252,106895,106882],{"class":367},[224,106897,101709],{"id":101709},[19,106899,106900],{},"检查 actuator 数量：",[244,106902,106904],{"className":30518,"code":106903,"language":30520,"meta":169,"style":169},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[22,106905,106906,106918],{"__ignoreMap":169},[252,106907,106908,106910,106912,106914,106916],{"class":254,"line":255},[252,106909,1670],{"class":258},[252,106911,106694],{"class":262},[252,106913,21087],{"class":258},[252,106915,25258],{"class":311},[252,106917,3878],{"class":262},[252,106919,106920,106922,106924,106926,106928],{"class":254,"line":170},[252,106921,104031],{"class":258},[252,106923,103571],{"class":311},[252,106925,263],{"class":262},[252,106927,106711],{"class":367},[252,106929,269],{"class":262},[19,106931,106932,106934,106935,106937],{},[22,106933,102295],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[22,106936,101213],{}," 长度应该是 1。",[19,106939,106940],{},"产生正弦控制信号：",[244,106942,106944],{"className":30518,"code":106943,"language":30520,"meta":169,"style":169},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[22,106945,106946],{"__ignoreMap":169},[252,106947,106948,106950,106952,106954,106956,106958,106960,106962,106964,106966,106968,106970,106972,106974],{"class":254,"line":255},[252,106949,106007],{"class":262},[252,106951,454],{"class":311},[252,106953,4582],{"class":262},[252,106955,308],{"class":258},[252,106957,106762],{"class":311},[252,106959,6658],{"class":258},[252,106961,106767],{"class":262},[252,106963,105396],{"class":311},[252,106965,6658],{"class":258},[252,106967,106774],{"class":262},[252,106969,718],{"class":258},[252,106971,62007],{"class":311},[252,106973,6658],{"class":258},[252,106975,106783],{"class":262},[19,106977,106978],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,106980,101810],{},[244,106982,106983],{"className":30518,"code":104641,"language":30520,"meta":169,"style":169},[22,106984,106985],{"__ignoreMap":169},[252,106986,106987],{"class":254,"line":255},[252,106988,104641],{"class":262},[19,106990,106991],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[224,106993,101845],{"id":101845},[244,106995,106997],{"className":30518,"code":106996,"language":30520,"meta":169,"style":169},"import math\n",[22,106998,106999],{"__ignoreMap":169},[252,107000,107001,107003],{"class":254,"line":255},[252,107002,30532],{"class":258},[252,107004,106486],{"class":262},[19,107006,107007,107008,132,107011,107014],{},"导入 Python 标准库里的数学模块。后面要用 ",[22,107009,107010],{},"math.sin",[22,107012,107013],{},"math.pi"," 生成周期变化的控制信号。",[244,107016,107017],{"className":30518,"code":103822,"language":30520,"meta":169,"style":169},[22,107018,107019,107025],{"__ignoreMap":169},[252,107020,107021,107023],{"class":254,"line":255},[252,107022,30532],{"class":258},[252,107024,101438],{"class":262},[252,107026,107027,107029,107031,107033],{"class":254,"line":170},[252,107028,30532],{"class":258},[252,107030,31520],{"class":262},[252,107032,31523],{"class":258},[252,107034,31526],{"class":262},[19,107036,107037],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[244,107039,107040],{"className":53207,"code":106323,"language":53209,"meta":169,"style":169},[22,107041,107042],{"__ignoreMap":169},[252,107043,107044,107046,107048,107050,107052,107054,107056,107058,107060,107062,107064,107066,107068,107070,107072],{"class":254,"line":255},[252,107045,1173],{"class":262},[252,107047,103092],{"class":51440},[252,107049,15060],{"class":2102},[252,107051,308],{"class":262},[252,107053,106155],{"class":367},[252,107055,53964],{"class":2102},[252,107057,308],{"class":262},[252,107059,106155],{"class":367},[252,107061,106164],{"class":2102},[252,107063,308],{"class":262},[252,107065,106169],{"class":367},[252,107067,106352],{"class":2102},[252,107069,308],{"class":262},[252,107071,106357],{"class":367},[252,107073,101281],{"class":262},[19,107075,107076,107077,107079,107080,107082,107083,107085],{},"这行定义关节。",[22,107078,105976],{}," 表示旋转关节。",[22,107081,106375],{}," 表示绕 y 轴旋转。",[22,107084,106381],{}," 表示有一点阻尼，运动不会完全无损耗。",[244,107087,107089],{"className":53207,"code":107088,"language":53209,"meta":169,"style":169},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[22,107090,107091],{"__ignoreMap":169},[252,107092,107093,107095,107097,107099,107101,107104,107106,107108,107111,107114,107116,107119,107121,107123,107125,107127,107129,107132],{"class":254,"line":255},[252,107094,1173],{"class":262},[252,107096,101257],{"class":51440},[252,107098,15060],{"class":2102},[252,107100,308],{"class":262},[252,107102,107103],{"class":367},"\"link_geom\"",[252,107105,53964],{"class":2102},[252,107107,308],{"class":262},[252,107109,107110],{"class":367},"\"capsule\"",[252,107112,107113],{"class":2102}," fromto",[252,107115,308],{"class":262},[252,107117,107118],{"class":367},"\"0 0 0 0 0 0.5\"",[252,107120,101273],{"class":2102},[252,107122,308],{"class":262},[252,107124,103914],{"class":367},[252,107126,102138],{"class":2102},[252,107128,308],{"class":262},[252,107130,107131],{"class":367},"\"0.5\"",[252,107133,101281],{"class":262},[19,107135,107136,107137,107139,107140,107142,107143,107146,107147,28525,107150,107152],{},"这行定义摆杆的形状。",[22,107138,103301],{}," 是胶囊体，适合表示杆子。",[22,107141,103312],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[22,107144,107145],{},"(0,0,0)"," 延伸到 ",[22,107148,107149],{},"(0,0,0.5)",[22,107151,103306],{}," 是半径。",[244,107154,107155],{"className":53207,"code":106389,"language":53209,"meta":169,"style":169},[22,107156,107157],{"__ignoreMap":169},[252,107158,107159,107161,107163,107165,107167,107169,107171,107173,107175,107177,107179,107181,107183,107185,107187,107189,107191,107193],{"class":254,"line":255},[252,107160,1173],{"class":262},[252,107162,106210],{"class":51440},[252,107164,15060],{"class":2102},[252,107166,308],{"class":262},[252,107168,106217],{"class":367},[252,107170,106220],{"class":2102},[252,107172,308],{"class":262},[252,107174,106155],{"class":367},[252,107176,106227],{"class":2102},[252,107178,308],{"class":262},[252,107180,3817],{"class":367},[252,107182,106234],{"class":2102},[252,107184,308],{"class":262},[252,107186,106239],{"class":367},[252,107188,106242],{"class":2102},[252,107190,308],{"class":262},[252,107192,106247],{"class":367},[252,107194,101281],{"class":262},[19,107196,107197,107198,107200,107201,107204,107205,107207],{},"这行定义电机。它作用在 ",[22,107199,105976],{}," 关节上。",[22,107202,107203],{},"gear"," 可以理解成放大倍数。",[22,107206,105991],{}," 限制控制输入范围。",[244,107209,107210],{"className":30518,"code":106903,"language":30520,"meta":169,"style":169},[22,107211,107212,107224],{"__ignoreMap":169},[252,107213,107214,107216,107218,107220,107222],{"class":254,"line":255},[252,107215,1670],{"class":258},[252,107217,106694],{"class":262},[252,107219,21087],{"class":258},[252,107221,25258],{"class":311},[252,107223,3878],{"class":262},[252,107225,107226,107228,107230,107232,107234],{"class":254,"line":170},[252,107227,104031],{"class":258},[252,107229,103571],{"class":311},[252,107231,263],{"class":262},[252,107233,106711],{"class":367},[252,107235,269],{"class":262},[19,107237,107238,107240],{},[22,107239,102295],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[244,107242,107244],{"className":30518,"code":107243,"language":30520,"meta":169,"style":169},"for step in range(2000):\n",[22,107245,107246],{"__ignoreMap":169},[252,107247,107248,107250,107252,107254,107256,107258,107260],{"class":254,"line":255},[252,107249,3164],{"class":258},[252,107251,31756],{"class":262},[252,107253,26183],{"class":258},[252,107255,32583],{"class":311},[252,107257,263],{"class":262},[252,107259,106732],{"class":311},[252,107261,30926],{"class":262},[19,107263,107264,107265,107267,107268,107271],{},"循环 2000 步。这里没有用 ",[22,107266,1255],{},"，而是用 ",[22,107269,107270],{},"step","，因为后面要用当前步数计算时间。",[244,107273,107275],{"className":30518,"code":107274,"language":30520,"meta":169,"style":169},"t = step * model.opt.timestep\n",[22,107276,107277],{"__ignoreMap":169},[252,107278,107279,107282,107284,107286,107288],{"class":254,"line":255},[252,107280,107281],{"class":262},"t ",[252,107283,308],{"class":258},[252,107285,31756],{"class":262},[252,107287,718],{"class":258},[252,107289,106748],{"class":262},[19,107291,107292],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[244,107294,107295],{"className":30518,"code":106943,"language":30520,"meta":169,"style":169},[22,107296,107297],{"__ignoreMap":169},[252,107298,107299,107301,107303,107305,107307,107309,107311,107313,107315,107317,107319,107321,107323,107325],{"class":254,"line":255},[252,107300,106007],{"class":262},[252,107302,454],{"class":311},[252,107304,4582],{"class":262},[252,107306,308],{"class":258},[252,107308,106762],{"class":311},[252,107310,6658],{"class":258},[252,107312,106767],{"class":262},[252,107314,105396],{"class":311},[252,107316,6658],{"class":258},[252,107318,106774],{"class":262},[252,107320,718],{"class":258},[252,107322,62007],{"class":311},[252,107324,6658],{"class":258},[252,107326,106783],{"class":262},[19,107328,107329],{},"这行给电机输入一个正弦波。拆开看：",[207,107331,107332,107338,107344],{},[210,107333,107334,107337],{},[22,107335,107336],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[210,107339,107340,107343],{},[22,107341,107342],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[210,107345,107346,107349],{},[22,107347,107348],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107351,107352],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[244,107354,107356],{"className":30518,"code":107355,"language":30520,"meta":169,"style":169},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[22,107357,107358],{"__ignoreMap":169},[252,107359,107360,107362,107364,107366,107368,107370],{"class":254,"line":255},[252,107361,30555],{"class":311},[252,107363,263],{"class":262},[252,107365,106811],{"class":367},[252,107367,105066],{"class":262},[252,107369,556],{"class":311},[252,107371,30637],{"class":262},[19,107373,107374,107375,107377],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[22,107376,101207],{}," 只有一个数。",[14,107379,102453],{"id":102452},[19,107381,107382],{},"输出类似:",[244,107384,107387],{"className":107385,"code":107386,"language":5327,"meta":169},[5325],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[22,107388,107386],{"__ignoreMap":169},[19,107390,107391,107392,107394],{},"这里 ",[22,107393,106262],{}," 是电机输入。",[19,107396,107397,107400,107401,107404],{},[22,107398,107399],{},"joint qpos"," 是关节角度，单位通常是弧度。",[22,107402,107403],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107406,107407],{},"角度单位提示：",[244,107409,107412],{"className":107410,"code":107411,"language":5327,"meta":169},[5325],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[22,107413,107411],{"__ignoreMap":169},[19,107415,107416,107417,107419,107420,107422],{},"如果你看到 ",[22,107418,104166],{}," 是 ",[22,107421,35469],{},"，大约就是 28.6 度。",[14,107424,102485],{"id":102484},[207,107426,107427,107434,107437,107444,107447,107455,107463],{},[210,107428,102548,107429,102551,107431,28525],{},[22,107430,106447],{},[22,107432,107433],{},"gear=\"5\"",[210,107435,107436],{},"重新运行，观察关节运动是否更剧烈。",[210,107438,102548,107439,102551,107441,28525],{},[22,107440,105991],{},[22,107442,107443],{},"-0.2 0.2",[210,107445,107446],{},"重新运行，观察控制能力是否变弱。",[210,107448,107449,107450,107452,107453,28525],{},"去掉 actuator，确认 ",[22,107451,102295],{}," 变成 ",[22,107454,454],{},[210,107456,102548,107457,102551,107459,107462],{},[22,107458,106381],{},[22,107460,107461],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[210,107464,102548,107465,102551,107467,107470],{},[22,107466,106375],{},[22,107468,107469],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107472,102590],{"id":102589},[224,107474,107476],{"id":107475},"indexerror-index-0-is-out-of-bounds",[22,107477,107478],{},"IndexError: index 0 is out of bounds",[19,107480,107481,107482,107484],{},"原因是 ",[22,107483,106128],{},"，没有 actuator。",[224,107486,107487],{"id":107487},"关节几乎不动",[19,107489,107490],{},"可能原因:",[207,107492,107493,107498,107502,107508],{},[210,107494,107495,107497],{},[22,107496,107203],{}," 太小",[210,107499,107500,107497],{},[22,107501,105991],{},[210,107503,107504,107507],{},[22,107505,107506],{},"damping"," 太大",[210,107509,107510],{},"重力方向导致运动不明显",[224,107512,107513],{"id":107513},"模型编译失败",[19,107515,107516,107517,107519],{},"检查 actuator 引用的 ",[22,107518,106438],{}," 是否存在，joint 名称是否拼写一致。",[224,107521,107523,107525],{"id":107522},"datactrl0-写了但没有效果",[22,107524,106262],{}," 写了但没有效果",[19,107527,102712],{},[207,107529,107530,107535,107538,107543,107548],{},[210,107531,107532,107534],{},[22,107533,102295],{}," 是否大于 0。",[210,107536,107537],{},"motor 是否引用了正确 joint。",[210,107539,107540,107542],{},[22,107541,107203],{}," 是否太小。",[210,107544,107545,107547],{},[22,107546,105991],{}," 是否把输入限制得太小。",[210,107549,107550],{},"body 是否真的有可动 joint。",[224,107552,107553],{"id":107553},"控制输入超过范围会怎样",[19,107555,107556],{},"如果设置了：",[244,107558,107560],{"className":53207,"code":107559,"language":53209,"meta":169,"style":169},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[22,107561,107562],{"__ignoreMap":169},[252,107563,107564],{"class":254,"line":255},[252,107565,107559],{"class":262},[19,107567,107568],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[244,107570,107572],{"className":30518,"code":107571,"language":30520,"meta":169,"style":169},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[22,107573,107574,107594],{"__ignoreMap":169},[252,107575,107576,107579,107581,107584,107586,107588,107590,107592],{"class":254,"line":255},[252,107577,107578],{"class":262},"action ",[252,107580,308],{"class":258},[252,107582,107583],{"class":262}," np.clip(action, ",[252,107585,795],{"class":258},[252,107587,105396],{"class":311},[252,107589,12575],{"class":262},[252,107591,105396],{"class":311},[252,107593,269],{"class":262},[252,107595,107596,107598,107600,107602,107604],{"class":254,"line":170},[252,107597,106007],{"class":262},[252,107599,454],{"class":311},[252,107601,4582],{"class":262},[252,107603,308],{"class":258},[252,107605,107606],{"class":262}," action\n",[14,107608,102744],{"id":102743},[19,107610,107611],{},"这一章建立了控制任务的基本形式：",[244,107613,107616],{"className":107614,"code":107615,"language":5327,"meta":169},[5325],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[22,107617,107615],{"__ignoreMap":169},[19,107619,107620],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5266,107622,107623],{},"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":169,"searchDepth":170,"depth":170,"links":107625},[107626,107627,107628,107633,107637,107638,107639,107647],{"id":100784,"depth":170,"text":100785},{"id":100907,"depth":170,"text":100908},{"id":101181,"depth":170,"text":101182,"children":107629},[107630,107631,107632],{"id":106269,"depth":1318,"text":106270},{"id":106319,"depth":1318,"text":106320},{"id":106385,"depth":1318,"text":106386},{"id":101389,"depth":170,"text":101390,"children":107634},[107635,107636],{"id":101709,"depth":1318,"text":101709},{"id":101845,"depth":1318,"text":101845},{"id":102452,"depth":170,"text":102453},{"id":102484,"depth":170,"text":102485},{"id":102589,"depth":170,"text":102590,"children":107640},[107641,107642,107643,107644,107646],{"id":107475,"depth":1318,"text":107478},{"id":107487,"depth":1318,"text":107487},{"id":107513,"depth":1318,"text":107513},{"id":107522,"depth":1318,"text":107645},"data.ctrl[0] 写了但没有效果",{"id":107553,"depth":1318,"text":107553},{"id":102743,"depth":170,"text":102744},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105957,"description":169},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107654,"title":107655,"body":107656,"description":169,"extension":179,"meta":109565,"navigation":181,"path":109566,"seo":109567,"stem":109568,"__hash__":109569},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107657,"toc":109541},[107658,107661,107663,107666,107674,107677,107694,107697,107722,107725,107771,107773,107775,107830,107832,107851,107853,107896,107899,107916,107919,107935,107945,107952,107954,107957,107960,107994,107997,108045,108049,108052,108066,108075,108079,108082,108107,108110,108114,108127,108130,108136,108139,108154,108156,108159,108419,108421,108433,108436,108748,108750,108762,108764,108767,108782,108787,108790,108812,108815,108818,108852,108855,108859,108870,108873,108890,108893,108907,108914,108934,108941,108955,108958,108970,108985,109005,109008,109030,109033,109037,109052,109063,109078,109081,109111,109127,109156,109164,109188,109191,109209,109219,109231,109238,109247,109253,109262,109265,109267,109276,109279,109294,109296,109299,109310,109313,109324,109327,109345,109347,109364,109367,109395,109397,109401,109404,109434,109440,109443,109447,109455,109458,109460,109481,109484,109487,109503,109506,109522,109524,109527,109538],[10,107659,107655],{"id":107660},"_5viewer-可视化与-renderer-离屏渲染",[14,107662,100785],{"id":100784},[19,107664,107665],{},"本章掌握两类可视化方式:",[207,107667,107668,107671],{},[210,107669,107670],{},"交互式 viewer: 适合人工观察仿真",[210,107672,107673],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107675,107676],{},"使用官方接口:",[244,107678,107680],{"className":30518,"code":107679,"language":30520,"meta":169,"style":169},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[22,107681,107682,107689],{"__ignoreMap":169},[252,107683,107684,107686],{"class":254,"line":255},[252,107685,30532],{"class":258},[252,107687,107688],{"class":262}," mujoco.viewer\n",[252,107690,107691],{"class":254,"line":170},[252,107692,107693],{"class":262},"mujoco.viewer.launch_passive(model, data)\n",[19,107695,107696],{},"以及:",[244,107698,107700],{"className":30518,"code":107699,"language":30520,"meta":169,"style":169},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[22,107701,107702,107712],{"__ignoreMap":169},[252,107703,107704,107707,107709],{"class":254,"line":255},[252,107705,107706],{"class":262},"renderer ",[252,107708,308],{"class":258},[252,107710,107711],{"class":262}," mujoco.Renderer(model)\n",[252,107713,107714,107717,107719],{"class":254,"line":170},[252,107715,107716],{"class":262},"image ",[252,107718,308],{"class":258},[252,107720,107721],{"class":262}," renderer.render()\n",[19,107723,107724],{},"新手建议先理解二者区别：",[400,107726,107727,107743],{},[403,107728,107729],{},[406,107730,107731,107734,107737,107740],{},[409,107732,107733],{"align":23875},"工具",[409,107735,107736],{"align":23875},"用途",[409,107738,107739],{"align":23875},"是否打开窗口",[409,107741,107742],{"align":23875},"常见场景",[447,107744,107745,107758],{},[406,107746,107747,107750,107753,107755],{},[452,107748,107749],{"align":23875},"Viewer",[452,107751,107752],{"align":23875},"人眼实时观察仿真",[452,107754,104801],{"align":23875},[452,107756,107757],{"align":23875},"调试模型、看控制效果",[406,107759,107760,107763,107766,107768],{},[452,107761,107762],{"align":23875},"Renderer",[452,107764,107765],{"align":23875},"生成图像数组",[452,107767,104814],{"align":23875},[452,107769,107770],{"align":23875},"保存图片、训练视觉策略、服务器批量采集",[14,107772,100908],{"id":100907},[19,107774,100911],{},[244,107776,107778],{"className":23961,"code":107777,"language":23963,"meta":169,"style":169},"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",[22,107779,107780,107792,107802,107810,107818],{"__ignoreMap":169},[252,107781,107782,107784,107786,107788,107790],{"class":254,"line":255},[252,107783,24716],{"class":2102},[252,107785,26455],{"class":367},[252,107787,23973],{"class":367},[252,107789,26540],{"class":311},[252,107791,24818],{"class":311},[252,107793,107794,107796,107798,107800],{"class":254,"line":170},[252,107795,100946],{"class":367},[252,107797,100949],{"class":367},[252,107799,100952],{"class":367},[252,107801,24818],{"class":311},[252,107803,107804,107806,107808],{"class":254,"line":1318},[252,107805,100959],{"class":367},[252,107807,100962],{"class":367},[252,107809,24818],{"class":311},[252,107811,107812,107814,107816],{"class":254,"line":1333},[252,107813,100969],{"class":367},[252,107815,100972],{"class":367},[252,107817,24818],{"class":311},[252,107819,107820,107822,107824,107826,107828],{"class":254,"line":1339},[252,107821,100979],{"class":367},[252,107823,100982],{"class":367},[252,107825,100985],{"class":367},[252,107827,100988],{"class":367},[252,107829,102653],{"class":367},[19,107831,102955],{},[244,107833,107835],{"className":23961,"code":107834,"language":23963,"meta":169,"style":169},"pip install \"mujoco>=2.3\" numpy pillow\n",[22,107836,107837],{"__ignoreMap":169},[252,107838,107839,107841,107843,107845,107848],{"class":254,"line":255},[252,107840,23970],{"class":2102},[252,107842,23973],{"class":367},[252,107844,101068],{"class":367},[252,107846,107847],{"class":367}," numpy",[252,107849,107850],{"class":367}," pillow\n",[19,107852,102972],{},[244,107854,107856],{"className":23961,"code":107855,"language":23963,"meta":169,"style":169},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[22,107857,107858,107875,107884],{"__ignoreMap":169},[252,107859,107860,107862,107864,107866,107869,107871,107873],{"class":254,"line":255},[252,107861,30470],{"class":2102},[252,107863,29316],{"class":367},[252,107865,25255],{"class":311},[252,107867,107868],{"class":367}," mujoco-render",[252,107870,101113],{"class":367},[252,107872,101116],{"class":311},[252,107874,101119],{"class":311},[252,107876,107877,107879,107881],{"class":254,"line":170},[252,107878,30470],{"class":2102},[252,107880,101126],{"class":367},[252,107882,107883],{"class":367}," mujoco-render\n",[252,107885,107886,107888,107890,107892,107894],{"class":254,"line":1318},[252,107887,23970],{"class":2102},[252,107889,23973],{"class":367},[252,107891,101068],{"class":367},[252,107893,107847],{"class":367},[252,107895,107850],{"class":367},[19,107897,107898],{},"离屏渲染后端:",[244,107900,107902],{"className":23961,"code":107901,"language":23963,"meta":169,"style":169},"export MUJOCO_GL=egl\n",[22,107903,107904],{"__ignoreMap":169},[252,107905,107906,107908,107911,107913],{"class":254,"line":255},[252,107907,25182],{"class":258},[252,107909,107910],{"class":262}," MUJOCO_GL",[252,107912,308],{"class":258},[252,107914,107915],{"class":262},"egl\n",[19,107917,107918],{},"或:",[244,107920,107922],{"className":23961,"code":107921,"language":23963,"meta":169,"style":169},"export MUJOCO_GL=osmesa\n",[22,107923,107924],{"__ignoreMap":169},[252,107925,107926,107928,107930,107932],{"class":254,"line":255},[252,107927,25182],{"class":258},[252,107929,107910],{"class":262},[252,107931,308],{"class":258},[252,107933,107934],{"class":262},"osmesa\n",[19,107936,107937,107938,107941,107942,28525],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[22,107939,107940],{},"egl"," 失败，再尝试 ",[22,107943,107944],{},"osmesa",[19,107946,107947,107948,107951],{},"如果你在本机桌面环境运行，通常先不要设置 ",[22,107949,107950],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,107953,101182],{"id":101181},[19,107955,107956],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,107958,107959],{},"典型 viewer 流程:",[244,107961,107963],{"className":30518,"code":107962,"language":30520,"meta":169,"style":169},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[22,107964,107965,107978,107985,107989],{"__ignoreMap":169},[252,107966,107967,107970,107973,107975],{"class":254,"line":255},[252,107968,107969],{"class":258},"with",[252,107971,107972],{"class":262}," mujoco.viewer.launch_passive(model, data) ",[252,107974,31523],{"class":258},[252,107976,107977],{"class":262}," viewer:\n",[252,107979,107980,107982],{"class":254,"line":170},[252,107981,2390],{"class":258},[252,107983,107984],{"class":262}," viewer.is_running():\n",[252,107986,107987],{"class":254,"line":1318},[252,107988,101653],{"class":262},[252,107990,107991],{"class":254,"line":1333},[252,107992,107993],{"class":262},"        viewer.sync()\n",[19,107995,107996],{},"典型 renderer 流程:",[244,107998,108000],{"className":30518,"code":107999,"language":30520,"meta":169,"style":169},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[22,108001,108002,108028,108032,108037],{"__ignoreMap":169},[252,108003,108004,108006,108008,108011,108013,108015,108017,108019,108021,108023,108026],{"class":254,"line":255},[252,108005,107706],{"class":262},[252,108007,308],{"class":258},[252,108009,108010],{"class":262}," mujoco.Renderer(model, ",[252,108012,25121],{"class":5356},[252,108014,308],{"class":258},[252,108016,42482],{"class":311},[252,108018,12575],{"class":262},[252,108020,25117],{"class":5356},[252,108022,308],{"class":258},[252,108024,108025],{"class":311},"640",[252,108027,269],{"class":262},[252,108029,108030],{"class":254,"line":170},[252,108031,104641],{"class":262},[252,108033,108034],{"class":254,"line":1318},[252,108035,108036],{"class":262},"renderer.update_scene(data)\n",[252,108038,108039,108041,108043],{"class":254,"line":1333},[252,108040,107716],{"class":262},[252,108042,308],{"class":258},[252,108044,107721],{"class":262},[224,108046,108048],{"id":108047},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108050,108051],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[244,108053,108055],{"className":30518,"code":108054,"language":30520,"meta":169,"style":169},"mujoco.mj_step(model, data)\nviewer.sync()\n",[22,108056,108057,108061],{"__ignoreMap":169},[252,108058,108059],{"class":254,"line":255},[252,108060,104641],{"class":262},[252,108062,108063],{"class":254,"line":170},[252,108064,108065],{"class":262},"viewer.sync()\n",[19,108067,108068,108070,108071,108074],{},[22,108069,101352],{}," 负责算物理，",[22,108072,108073],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[224,108076,108078],{"id":108077},"为什么要-sleep","为什么要 sleep",[19,108080,108081],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[244,108083,108085],{"className":30518,"code":108084,"language":30520,"meta":169,"style":169},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[22,108086,108087],{"__ignoreMap":169},[252,108088,108089,108092,108094,108097,108099,108102,108104],{"class":254,"line":255},[252,108090,108091],{"class":262},"sleep_time ",[252,108093,308],{"class":258},[252,108095,108096],{"class":262}," model.opt.timestep ",[252,108098,795],{"class":258},[252,108100,108101],{"class":262}," (time.time() ",[252,108103,795],{"class":258},[252,108105,108106],{"class":262}," step_start)\n",[19,108108,108109],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[224,108111,108113],{"id":108112},"renderer-输出是什么","renderer 输出是什么",[244,108115,108117],{"className":30518,"code":108116,"language":30520,"meta":169,"style":169},"image = renderer.render()\n",[22,108118,108119],{"__ignoreMap":169},[252,108120,108121,108123,108125],{"class":254,"line":255},[252,108122,107716],{"class":262},[252,108124,308],{"class":258},[252,108126,107721],{"class":262},[19,108128,108129],{},"得到的是 NumPy 数组，形状通常是：",[244,108131,108134],{"className":108132,"code":108133,"language":5327,"meta":169},[5325],"(height, width, 3)\n",[22,108135,108133],{"__ignoreMap":169},[19,108137,108138],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[244,108140,108142],{"className":30518,"code":108141,"language":30520,"meta":169,"style":169},"Image.fromarray(image).save(\"render_output.png\")\n",[22,108143,108144],{"__ignoreMap":169},[252,108145,108146,108149,108152],{"class":254,"line":255},[252,108147,108148],{"class":262},"Image.fromarray(image).save(",[252,108150,108151],{"class":367},"\"render_output.png\"",[252,108153,269],{"class":262},[14,108155,101390],{"id":101389},[19,108157,108158],{},"交互式 Viewer:",[244,108160,108162],{"className":30518,"code":108161,"language":30520,"meta":169,"style":169},"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",[22,108163,108164,108170,108174,108180,108186,108190,108194,108202,108207,108211,108215,108219,108224,108229,108233,108237,108241,108246,108250,108254,108258,108262,108266,108270,108282,108294,108302,108306,108316,108336,108346,108351,108356,108360,108377,108390,108395,108399,108403,108415],{"__ignoreMap":169},[252,108165,108166,108168],{"class":254,"line":255},[252,108167,30532],{"class":258},[252,108169,31969],{"class":262},[252,108171,108172],{"class":254,"line":170},[252,108173,2539],{"emptyLinePlaceholder":181},[252,108175,108176,108178],{"class":254,"line":1318},[252,108177,30532],{"class":258},[252,108179,101438],{"class":262},[252,108181,108182,108184],{"class":254,"line":1333},[252,108183,30532],{"class":258},[252,108185,107688],{"class":262},[252,108187,108188],{"class":254,"line":1339},[252,108189,2539],{"emptyLinePlaceholder":181},[252,108191,108192],{"class":254,"line":1353},[252,108193,2539],{"emptyLinePlaceholder":181},[252,108195,108196,108198,108200],{"class":254,"line":1359},[252,108197,101451],{"class":311},[252,108199,13704],{"class":258},[252,108201,101456],{"class":367},[252,108203,108204],{"class":254,"line":1450},[252,108205,108206],{"class":367},"\u003Cmujoco model=\"viewer_demo\">\n",[252,108208,108209],{"class":254,"line":1456},[252,108210,101466],{"class":367},[252,108212,108213],{"class":254,"line":1468},[252,108214,2539],{"emptyLinePlaceholder":181},[252,108216,108217],{"class":254,"line":1751},[252,108218,101475],{"class":367},[252,108220,108221],{"class":254,"line":1756},[252,108222,108223],{"class":367},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[252,108225,108226],{"class":254,"line":1762},[252,108227,108228],{"class":367},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[252,108230,108231],{"class":254,"line":1767},[252,108232,2539],{"emptyLinePlaceholder":181},[252,108234,108235],{"class":254,"line":1781},[252,108236,101489],{"class":367},[252,108238,108239],{"class":254,"line":1786},[252,108240,101494],{"class":367},[252,108242,108243],{"class":254,"line":1792},[252,108244,108245],{"class":367},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[252,108247,108248],{"class":254,"line":1813},[252,108249,101504],{"class":367},[252,108251,108252],{"class":254,"line":1818},[252,108253,101509],{"class":367},[252,108255,108256],{"class":254,"line":1832},[252,108257,101514],{"class":367},[252,108259,108260],{"class":254,"line":1837},[252,108261,95836],{"class":367},[252,108263,108264],{"class":254,"line":1866},[252,108265,2539],{"emptyLinePlaceholder":181},[252,108267,108268],{"class":254,"line":1871},[252,108269,2539],{"emptyLinePlaceholder":181},[252,108271,108272,108274,108276,108278,108280],{"class":254,"line":1888},[252,108273,32087],{"class":258},[252,108275,2112],{"class":2102},[252,108277,101535],{"class":262},[252,108279,95824],{"class":311},[252,108281,3878],{"class":262},[252,108283,108284,108286,108288,108290,108292],{"class":254,"line":1893},[252,108285,101544],{"class":262},[252,108287,308],{"class":258},[252,108289,101549],{"class":262},[252,108291,101451],{"class":311},[252,108293,269],{"class":262},[252,108295,108296,108298,108300],{"class":254,"line":1898},[252,108297,101558],{"class":262},[252,108299,308],{"class":258},[252,108301,101563],{"class":262},[252,108303,108304],{"class":254,"line":1903},[252,108305,2539],{"emptyLinePlaceholder":181},[252,108307,108308,108310,108312,108314],{"class":254,"line":1917},[252,108309,34318],{"class":258},[252,108311,107972],{"class":262},[252,108313,31523],{"class":258},[252,108315,107977],{"class":262},[252,108317,108318,108321,108324,108326,108329,108331,108334],{"class":254,"line":1922},[252,108319,108320],{"class":258},"        while",[252,108322,108323],{"class":262}," viewer.is_running() ",[252,108325,30602],{"class":258},[252,108327,108328],{"class":262}," data.time ",[252,108330,1173],{"class":258},[252,108332,108333],{"class":311}," 5.0",[252,108335,3878],{"class":262},[252,108337,108338,108341,108343],{"class":254,"line":2716},[252,108339,108340],{"class":262},"            step_start ",[252,108342,308],{"class":258},[252,108344,108345],{"class":262}," time.time()\n",[252,108347,108348],{"class":254,"line":2730},[252,108349,108350],{"class":262},"            mujoco.mj_step(model, data)\n",[252,108352,108353],{"class":254,"line":2738},[252,108354,108355],{"class":262},"            viewer.sync()\n",[252,108357,108358],{"class":254,"line":2743},[252,108359,2539],{"emptyLinePlaceholder":181},[252,108361,108362,108365,108367,108369,108371,108373,108375],{"class":254,"line":2749},[252,108363,108364],{"class":262},"            sleep_time ",[252,108366,308],{"class":258},[252,108368,108096],{"class":262},[252,108370,795],{"class":258},[252,108372,108101],{"class":262},[252,108374,795],{"class":258},[252,108376,108106],{"class":262},[252,108378,108379,108381,108384,108386,108388],{"class":254,"line":2755},[252,108380,4781],{"class":258},[252,108382,108383],{"class":262}," sleep_time ",[252,108385,1223],{"class":258},[252,108387,4232],{"class":311},[252,108389,3878],{"class":262},[252,108391,108392],{"class":254,"line":2760},[252,108393,108394],{"class":262},"                time.sleep(sleep_time)\n",[252,108396,108397],{"class":254,"line":8088},[252,108398,2539],{"emptyLinePlaceholder":181},[252,108400,108401],{"class":254,"line":8112},[252,108402,2539],{"emptyLinePlaceholder":181},[252,108404,108405,108407,108409,108411,108413],{"class":254,"line":8117},[252,108406,1670],{"class":258},[252,108408,31360],{"class":311},[252,108410,101696],{"class":258},[252,108412,101699],{"class":367},[252,108414,3878],{"class":262},[252,108416,108417],{"class":254,"line":8123},[252,108418,101706],{"class":262},[19,108420,103706],{},[244,108422,108424],{"className":23961,"code":108423,"language":23963,"meta":169,"style":169},"touch ch5_viewer.py\n",[22,108425,108426],{"__ignoreMap":169},[252,108427,108428,108430],{"class":254,"line":255},[252,108429,101420],{"class":2102},[252,108431,108432],{"class":367}," ch5_viewer.py\n",[19,108434,108435],{},"离屏 Renderer 保存图片:",[244,108437,108439],{"className":30518,"code":108438,"language":30520,"meta":169,"style":169},"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",[22,108440,108441,108453,108457,108463,108473,108477,108481,108489,108494,108498,108502,108506,108510,108515,108519,108523,108527,108531,108535,108539,108543,108547,108551,108555,108559,108571,108583,108591,108616,108620,108636,108640,108644,108659,108668,108672,108686,108691,108696,108700,108712,108724,108728,108732,108744],{"__ignoreMap":169},[252,108442,108443,108445,108448,108450],{"class":254,"line":255},[252,108444,30877],{"class":258},[252,108446,108447],{"class":262}," pathlib ",[252,108449,30532],{"class":258},[252,108451,108452],{"class":262}," Path\n",[252,108454,108455],{"class":254,"line":170},[252,108456,2539],{"emptyLinePlaceholder":181},[252,108458,108459,108461],{"class":254,"line":1318},[252,108460,30532],{"class":258},[252,108462,101438],{"class":262},[252,108464,108465,108467,108469,108471],{"class":254,"line":1333},[252,108466,30877],{"class":258},[252,108468,47403],{"class":311},[252,108470,47406],{"class":258},[252,108472,47409],{"class":262},[252,108474,108475],{"class":254,"line":1339},[252,108476,2539],{"emptyLinePlaceholder":181},[252,108478,108479],{"class":254,"line":1353},[252,108480,2539],{"emptyLinePlaceholder":181},[252,108482,108483,108485,108487],{"class":254,"line":1359},[252,108484,101451],{"class":311},[252,108486,13704],{"class":258},[252,108488,101456],{"class":367},[252,108490,108491],{"class":254,"line":1450},[252,108492,108493],{"class":367},"\u003Cmujoco model=\"renderer_demo\">\n",[252,108495,108496],{"class":254,"line":1456},[252,108497,101466],{"class":367},[252,108499,108500],{"class":254,"line":1468},[252,108501,2539],{"emptyLinePlaceholder":181},[252,108503,108504],{"class":254,"line":1751},[252,108505,101475],{"class":367},[252,108507,108508],{"class":254,"line":1756},[252,108509,108223],{"class":367},[252,108511,108512],{"class":254,"line":1762},[252,108513,108514],{"class":367},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[252,108516,108517],{"class":254,"line":1767},[252,108518,108228],{"class":367},[252,108520,108521],{"class":254,"line":1781},[252,108522,2539],{"emptyLinePlaceholder":181},[252,108524,108525],{"class":254,"line":1786},[252,108526,101489],{"class":367},[252,108528,108529],{"class":254,"line":1792},[252,108530,101494],{"class":367},[252,108532,108533],{"class":254,"line":1813},[252,108534,108245],{"class":367},[252,108536,108537],{"class":254,"line":1818},[252,108538,101504],{"class":367},[252,108540,108541],{"class":254,"line":1832},[252,108542,101509],{"class":367},[252,108544,108545],{"class":254,"line":1837},[252,108546,101514],{"class":367},[252,108548,108549],{"class":254,"line":1866},[252,108550,95836],{"class":367},[252,108552,108553],{"class":254,"line":1871},[252,108554,2539],{"emptyLinePlaceholder":181},[252,108556,108557],{"class":254,"line":1888},[252,108558,2539],{"emptyLinePlaceholder":181},[252,108560,108561,108563,108565,108567,108569],{"class":254,"line":1893},[252,108562,32087],{"class":258},[252,108564,2112],{"class":2102},[252,108566,101535],{"class":262},[252,108568,95824],{"class":311},[252,108570,3878],{"class":262},[252,108572,108573,108575,108577,108579,108581],{"class":254,"line":1898},[252,108574,101544],{"class":262},[252,108576,308],{"class":258},[252,108578,101549],{"class":262},[252,108580,101451],{"class":311},[252,108582,269],{"class":262},[252,108584,108585,108587,108589],{"class":254,"line":1903},[252,108586,101558],{"class":262},[252,108588,308],{"class":258},[252,108590,101563],{"class":262},[252,108592,108593,108596,108598,108600,108602,108604,108606,108608,108610,108612,108614],{"class":254,"line":1917},[252,108594,108595],{"class":262},"    renderer ",[252,108597,308],{"class":258},[252,108599,108010],{"class":262},[252,108601,25121],{"class":5356},[252,108603,308],{"class":258},[252,108605,42482],{"class":311},[252,108607,12575],{"class":262},[252,108609,25117],{"class":5356},[252,108611,308],{"class":258},[252,108613,108025],{"class":311},[252,108615,269],{"class":262},[252,108617,108618],{"class":254,"line":1922},[252,108619,2539],{"emptyLinePlaceholder":181},[252,108621,108622,108624,108626,108628,108630,108632,108634],{"class":254,"line":2716},[252,108623,3340],{"class":258},[252,108625,101638],{"class":262},[252,108627,26183],{"class":258},[252,108629,32583],{"class":311},[252,108631,263],{"class":262},[252,108633,574],{"class":311},[252,108635,30926],{"class":262},[252,108637,108638],{"class":254,"line":2730},[252,108639,101653],{"class":262},[252,108641,108642],{"class":254,"line":2738},[252,108643,2539],{"emptyLinePlaceholder":181},[252,108645,108646,108649,108652,108654,108657],{"class":254,"line":2743},[252,108647,108648],{"class":262},"    renderer.update_scene(data, ",[252,108650,108651],{"class":5356},"camera",[252,108653,308],{"class":258},[252,108655,108656],{"class":367},"\"fixed_camera\"",[252,108658,269],{"class":262},[252,108660,108661,108664,108666],{"class":254,"line":2749},[252,108662,108663],{"class":262},"    image ",[252,108665,308],{"class":258},[252,108667,107721],{"class":262},[252,108669,108670],{"class":254,"line":2755},[252,108671,2539],{"emptyLinePlaceholder":181},[252,108673,108674,108677,108679,108682,108684],{"class":254,"line":2760},[252,108675,108676],{"class":262},"    output_path ",[252,108678,308],{"class":258},[252,108680,108681],{"class":262}," Path(",[252,108683,108151],{"class":367},[252,108685,269],{"class":262},[252,108687,108688],{"class":254,"line":8088},[252,108689,108690],{"class":262},"    Image.fromarray(image).save(output_path)\n",[252,108692,108693],{"class":254,"line":8112},[252,108694,108695],{"class":262},"    renderer.close()\n",[252,108697,108698],{"class":254,"line":8117},[252,108699,2539],{"emptyLinePlaceholder":181},[252,108701,108702,108704,108706,108709],{"class":254,"line":8123},[252,108703,31439],{"class":311},[252,108705,263],{"class":262},[252,108707,108708],{"class":367},"\"saved:\"",[252,108710,108711],{"class":262},", output_path.resolve())\n",[252,108713,108714,108716,108718,108721],{"class":254,"line":8150},[252,108715,31439],{"class":311},[252,108717,263],{"class":262},[252,108719,108720],{"class":367},"\"image shape:\"",[252,108722,108723],{"class":262},", image.shape)\n",[252,108725,108726],{"class":254,"line":8155},[252,108727,2539],{"emptyLinePlaceholder":181},[252,108729,108730],{"class":254,"line":8161},[252,108731,2539],{"emptyLinePlaceholder":181},[252,108733,108734,108736,108738,108740,108742],{"class":254,"line":8173},[252,108735,1670],{"class":258},[252,108737,31360],{"class":311},[252,108739,101696],{"class":258},[252,108741,101699],{"class":367},[252,108743,3878],{"class":262},[252,108745,108746],{"class":254,"line":8185},[252,108747,101706],{"class":262},[19,108749,103706],{},[244,108751,108753],{"className":23961,"code":108752,"language":23963,"meta":169,"style":169},"touch ch5_renderer.py\n",[22,108754,108755],{"__ignoreMap":169},[252,108756,108757,108759],{"class":254,"line":255},[252,108758,101420],{"class":2102},[252,108760,108761],{"class":367}," ch5_renderer.py\n",[224,108763,101709],{"id":101709},[19,108765,108766],{},"viewer 上下文：",[244,108768,108770],{"className":30518,"code":108769,"language":30520,"meta":169,"style":169},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[22,108771,108772],{"__ignoreMap":169},[252,108773,108774,108776,108778,108780],{"class":254,"line":255},[252,108775,107969],{"class":258},[252,108777,107972],{"class":262},[252,108779,31523],{"class":258},[252,108781,107977],{"class":262},[19,108783,108784,108786],{},[22,108785,107969],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,108788,108789],{},"窗口循环：",[244,108791,108793],{"className":30518,"code":108792,"language":30520,"meta":169,"style":169},"while viewer.is_running() and data.time \u003C 5.0:\n",[22,108794,108795],{"__ignoreMap":169},[252,108796,108797,108800,108802,108804,108806,108808,108810],{"class":254,"line":255},[252,108798,108799],{"class":258},"while",[252,108801,108323],{"class":262},[252,108803,30602],{"class":258},[252,108805,108328],{"class":262},[252,108807,1173],{"class":258},[252,108809,108333],{"class":311},[252,108811,3878],{"class":262},[19,108813,108814],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,108816,108817],{},"固定相机：",[244,108819,108821],{"className":53207,"code":108820,"language":53209,"meta":169,"style":169},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[22,108822,108823],{"__ignoreMap":169},[252,108824,108825,108827,108829,108831,108833,108835,108837,108839,108842,108845,108847,108850],{"class":254,"line":255},[252,108826,1173],{"class":262},[252,108828,108651],{"class":51440},[252,108830,15060],{"class":2102},[252,108832,308],{"class":262},[252,108834,108656],{"class":367},[252,108836,101243],{"class":2102},[252,108838,308],{"class":262},[252,108840,108841],{"class":367},"\"1.5 -2.0 1.2\"",[252,108843,108844],{"class":2102}," xyaxes",[252,108846,308],{"class":262},[252,108848,108849],{"class":367},"\"1 0.75 0 0 0 1\"",[252,108851,101281],{"class":262},[19,108853,108854],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[224,108856,108858],{"id":108857},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[244,108860,108862],{"className":30518,"code":108861,"language":30520,"meta":169,"style":169},"import time\n",[22,108863,108864],{"__ignoreMap":169},[252,108865,108866,108868],{"class":254,"line":255},[252,108867,30532],{"class":258},[252,108869,31969],{"class":262},[19,108871,108872],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[244,108874,108876],{"className":30518,"code":108875,"language":30520,"meta":169,"style":169},"import mujoco\nimport mujoco.viewer\n",[22,108877,108878,108884],{"__ignoreMap":169},[252,108879,108880,108882],{"class":254,"line":255},[252,108881,30532],{"class":258},[252,108883,101438],{"class":262},[252,108885,108886,108888],{"class":254,"line":170},[252,108887,30532],{"class":258},[252,108889,107688],{"class":262},[19,108891,108892],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[244,108894,108895],{"className":30518,"code":108769,"language":30520,"meta":169,"style":169},[22,108896,108897],{"__ignoreMap":169},[252,108898,108899,108901,108903,108905],{"class":254,"line":255},[252,108900,107969],{"class":258},[252,108902,107972],{"class":262},[252,108904,31523],{"class":258},[252,108906,107977],{"class":262},[19,108908,108909,108910,108913],{},"打开一个 viewer 窗口。",[22,108911,108912],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[244,108915,108916],{"className":30518,"code":108792,"language":30520,"meta":169,"style":169},[22,108917,108918],{"__ignoreMap":169},[252,108919,108920,108922,108924,108926,108928,108930,108932],{"class":254,"line":255},[252,108921,108799],{"class":258},[252,108923,108323],{"class":262},[252,108925,30602],{"class":258},[252,108927,108328],{"class":262},[252,108929,1173],{"class":258},[252,108931,108333],{"class":311},[252,108933,3878],{"class":262},[19,108935,108936,108937,108940],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[22,108938,108939],{},"viewer.is_running()"," 会变成 false，循环结束。",[244,108942,108944],{"className":30518,"code":108943,"language":30520,"meta":169,"style":169},"step_start = time.time()\n",[22,108945,108946],{"__ignoreMap":169},[252,108947,108948,108951,108953],{"class":254,"line":255},[252,108949,108950],{"class":262},"step_start ",[252,108952,308],{"class":258},[252,108954,108345],{"class":262},[19,108956,108957],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[244,108959,108960],{"className":30518,"code":108054,"language":30520,"meta":169,"style":169},[22,108961,108962,108966],{"__ignoreMap":169},[252,108963,108964],{"class":254,"line":255},[252,108965,104641],{"class":262},[252,108967,108968],{"class":254,"line":170},[252,108969,108065],{"class":262},[19,108971,108972,108974,108975,108977,108978,108980,108981,108984],{},[22,108973,101352],{}," 推进物理仿真。",[22,108976,108073],{}," 把最新的 ",[22,108979,33541],{}," 同步到窗口里显示。没有 ",[22,108982,108983],{},"sync()","，窗口可能看不到最新状态。",[244,108986,108987],{"className":30518,"code":108084,"language":30520,"meta":169,"style":169},[22,108988,108989],{"__ignoreMap":169},[252,108990,108991,108993,108995,108997,108999,109001,109003],{"class":254,"line":255},[252,108992,108091],{"class":262},[252,108994,308],{"class":258},[252,108996,108096],{"class":262},[252,108998,795],{"class":258},[252,109000,108101],{"class":262},[252,109002,795],{"class":258},[252,109004,108106],{"class":262},[19,109006,109007],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[244,109009,109011],{"className":30518,"code":109010,"language":30520,"meta":169,"style":169},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[22,109012,109013,109025],{"__ignoreMap":169},[252,109014,109015,109017,109019,109021,109023],{"class":254,"line":255},[252,109016,1670],{"class":258},[252,109018,108383],{"class":262},[252,109020,1223],{"class":258},[252,109022,4232],{"class":311},[252,109024,3878],{"class":262},[252,109026,109027],{"class":254,"line":170},[252,109028,109029],{"class":262},"    time.sleep(sleep_time)\n",[19,109031,109032],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[224,109034,109036],{"id":109035},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[244,109038,109040],{"className":30518,"code":109039,"language":30520,"meta":169,"style":169},"from pathlib import Path\n",[22,109041,109042],{"__ignoreMap":169},[252,109043,109044,109046,109048,109050],{"class":254,"line":255},[252,109045,30877],{"class":258},[252,109047,108447],{"class":262},[252,109049,30532],{"class":258},[252,109051,108452],{"class":262},[19,109053,109054,109055,109058,109059,109062],{},"导入 ",[22,109056,109057],{},"Path","，用来处理文件路径。相比直接写字符串，",[22,109060,109061],{},"Path(\"render_output.png\")"," 更清晰。",[244,109064,109066],{"className":30518,"code":109065,"language":30520,"meta":169,"style":169},"from PIL import Image\n",[22,109067,109068],{"__ignoreMap":169},[252,109069,109070,109072,109074,109076],{"class":254,"line":255},[252,109071,30877],{"class":258},[252,109073,47403],{"class":311},[252,109075,47406],{"class":258},[252,109077,47409],{"class":262},[19,109079,109080],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[244,109082,109083],{"className":53207,"code":108820,"language":53209,"meta":169,"style":169},[22,109084,109085],{"__ignoreMap":169},[252,109086,109087,109089,109091,109093,109095,109097,109099,109101,109103,109105,109107,109109],{"class":254,"line":255},[252,109088,1173],{"class":262},[252,109090,108651],{"class":51440},[252,109092,15060],{"class":2102},[252,109094,308],{"class":262},[252,109096,108656],{"class":367},[252,109098,101243],{"class":2102},[252,109100,308],{"class":262},[252,109102,108841],{"class":367},[252,109104,108844],{"class":2102},[252,109106,308],{"class":262},[252,109108,108849],{"class":367},[252,109110,101281],{"class":262},[19,109112,109113,109114,109116,109117,109119,109120,109123,109124,109126],{},"定义一个相机。",[22,109115,79949],{}," 是相机名字。",[22,109118,104282],{}," 是相机在世界里的位置。",[22,109121,109122],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[22,109125,104282],{}," 来调视角。",[244,109128,109130],{"className":30518,"code":109129,"language":30520,"meta":169,"style":169},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[22,109131,109132],{"__ignoreMap":169},[252,109133,109134,109136,109138,109140,109142,109144,109146,109148,109150,109152,109154],{"class":254,"line":255},[252,109135,107706],{"class":262},[252,109137,308],{"class":258},[252,109139,108010],{"class":262},[252,109141,25121],{"class":5356},[252,109143,308],{"class":258},[252,109145,42482],{"class":311},[252,109147,12575],{"class":262},[252,109149,25117],{"class":5356},[252,109151,308],{"class":258},[252,109153,108025],{"class":311},[252,109155,269],{"class":262},[19,109157,109158,109159,132,109161,109163],{},"创建离屏渲染器。",[22,109160,25121],{},[22,109162,25117],{}," 决定输出图片大小。",[244,109165,109166],{"className":30518,"code":101813,"language":30520,"meta":169,"style":169},[22,109167,109168,109184],{"__ignoreMap":169},[252,109169,109170,109172,109174,109176,109178,109180,109182],{"class":254,"line":255},[252,109171,3164],{"class":258},[252,109173,101638],{"class":262},[252,109175,26183],{"class":258},[252,109177,32583],{"class":311},[252,109179,263],{"class":262},[252,109181,574],{"class":311},[252,109183,30926],{"class":262},[252,109185,109186],{"class":254,"line":170},[252,109187,101836],{"class":262},[19,109189,109190],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[244,109192,109194],{"className":30518,"code":109193,"language":30520,"meta":169,"style":169},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[22,109195,109196],{"__ignoreMap":169},[252,109197,109198,109201,109203,109205,109207],{"class":254,"line":255},[252,109199,109200],{"class":262},"renderer.update_scene(data, ",[252,109202,108651],{"class":5356},[252,109204,308],{"class":258},[252,109206,108656],{"class":367},[252,109208,269],{"class":262},[19,109210,109211,109212,109214,109215,109218],{},"告诉 renderer：用当前 ",[22,109213,33541],{}," 的状态更新画面，并使用名为 ",[22,109216,109217],{},"fixed_camera"," 的相机视角。",[244,109220,109221],{"className":30518,"code":108116,"language":30520,"meta":169,"style":169},[22,109222,109223],{"__ignoreMap":169},[252,109224,109225,109227,109229],{"class":254,"line":255},[252,109226,107716],{"class":262},[252,109228,308],{"class":258},[252,109230,107721],{"class":262},[19,109232,109233,109234,109237],{},"真正渲染出图像。",[22,109235,109236],{},"image"," 是一个 NumPy 数组，不是文件。",[244,109239,109241],{"className":30518,"code":109240,"language":30520,"meta":169,"style":169},"Image.fromarray(image).save(output_path)\n",[22,109242,109243],{"__ignoreMap":169},[252,109244,109245],{"class":254,"line":255},[252,109246,109240],{"class":262},[19,109248,109249,109250,28525],{},"把数组转换成图片，并保存到 ",[22,109251,109252],{},"render_output.png",[244,109254,109256],{"className":30518,"code":109255,"language":30520,"meta":169,"style":169},"renderer.close()\n",[22,109257,109258],{"__ignoreMap":169},[252,109259,109260],{"class":254,"line":255},[252,109261,109255],{"class":262},[19,109263,109264],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109266,102453],{"id":102452},[19,109268,109269,109270,109272,109273,28525],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[22,109271,109252],{},"，并输出图像数组形状，例如 ",[22,109274,109275],{},"(480, 640, 3)",[19,109277,109278],{},"如果图片里看不到方块，先检查：",[207,109280,109281,109284,109287],{},[210,109282,109283],{},"方块是否掉到相机视野外。",[210,109285,109286],{},"camera 位置是否合理。",[210,109288,109289,109290,109293],{},"是否在 ",[22,109291,109292],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109295,102485],{"id":102484},[19,109297,109298],{},"运行 viewer:",[244,109300,109302],{"className":23961,"code":109301,"language":23963,"meta":169,"style":169},"python ch5_viewer.py\n",[22,109303,109304],{"__ignoreMap":169},[252,109305,109306,109308],{"class":254,"line":255},[252,109307,30520],{"class":2102},[252,109309,108432],{"class":367},[19,109311,109312],{},"运行 renderer:",[244,109314,109316],{"className":23961,"code":109315,"language":23963,"meta":169,"style":169},"python ch5_renderer.py\n",[22,109317,109318],{"__ignoreMap":169},[252,109319,109320,109322],{"class":254,"line":255},[252,109321,30520],{"class":2102},[252,109323,108761],{"class":367},[19,109325,109326],{},"如果在服务器上运行:",[244,109328,109330],{"className":23961,"code":109329,"language":23963,"meta":169,"style":169},"MUJOCO_GL=egl python ch5_renderer.py\n",[22,109331,109332],{"__ignoreMap":169},[252,109333,109334,109336,109338,109340,109343],{"class":254,"line":255},[252,109335,107950],{"class":262},[252,109337,308],{"class":258},[252,109339,107940],{"class":367},[252,109341,109342],{"class":2102}," python",[252,109344,108761],{"class":367},[19,109346,107918],{},[244,109348,109350],{"className":23961,"code":109349,"language":23963,"meta":169,"style":169},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[22,109351,109352],{"__ignoreMap":169},[252,109353,109354,109356,109358,109360,109362],{"class":254,"line":255},[252,109355,107950],{"class":262},[252,109357,308],{"class":258},[252,109359,107944],{"class":367},[252,109361,109342],{"class":2102},[252,109363,108761],{"class":367},[19,109365,109366],{},"再做几个练习：",[207,109368,109369,109376,109379,109385],{},[210,109370,109371,109372,109375],{},"把 renderer 分辨率改成 ",[22,109373,109374],{},"height=240, width=320","，观察输出 shape。",[210,109377,109378],{},"把方块颜色改成蓝色，重新保存图片。",[210,109380,109381,109382,109384],{},"把相机 ",[22,109383,104282],{}," 改远一点，观察画面中物体是否变小。",[210,109386,109387,109388,102551,109391,109394],{},"把 viewer 示例中的 ",[22,109389,109390],{},"data.time \u003C 5.0",[22,109392,109393],{},"data.time \u003C 20.0","，观察更长时间。",[14,109396,102590],{"id":102589},[224,109398,109400],{"id":109399},"viewer-窗口打不开","viewer 窗口打不开",[19,109402,109403],{},"安装:",[244,109405,109407],{"className":23961,"code":109406,"language":23963,"meta":169,"style":169},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[22,109408,109409],{"__ignoreMap":169},[252,109410,109411,109413,109415,109417,109419,109421,109423,109425,109427,109429,109431],{"class":254,"line":255},[252,109412,24716],{"class":2102},[252,109414,26455],{"class":367},[252,109416,23973],{"class":367},[252,109418,26540],{"class":311},[252,109420,102643],{"class":367},[252,109422,100972],{"class":367},[252,109424,102648],{"class":367},[252,109426,100985],{"class":367},[252,109428,100991],{"class":367},[252,109430,100982],{"class":367},[252,109432,109433],{"class":367}," libXinerama\n",[224,109435,109437],{"id":109436},"glfwerror",[22,109438,109439],{},"GLFWError",[19,109441,109442],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[224,109444,109446],{"id":109445},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109448,109449,109450,84,109452,109454],{},"尝试 ",[22,109451,101174],{},[22,109453,101177],{},"。可能存在版本差异。",[224,109456,109457],{"id":109457},"保存图片是黑的",[19,109459,102712],{},[207,109461,109462,109465,109468,109478],{},[210,109463,109464],{},"XML 里是否有 light。",[210,109466,109467],{},"相机是否对着模型。",[210,109469,109470,109471,109474,109475,28525],{},"是否先 ",[22,109472,109473],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[22,109476,109477],{},"renderer.render()",[210,109479,109480],{},"物体是否已经掉出视野。",[224,109482,109483],{"id":109483},"远程服务器没有显示器",[19,109485,109486],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[244,109488,109489],{"className":23961,"code":109329,"language":23963,"meta":169,"style":169},[22,109490,109491],{"__ignoreMap":169},[252,109492,109493,109495,109497,109499,109501],{"class":254,"line":255},[252,109494,107950],{"class":262},[252,109496,308],{"class":258},[252,109498,107940],{"class":367},[252,109500,109342],{"class":2102},[252,109502,108761],{"class":367},[19,109504,109505],{},"如果 EGL 不可用，再尝试：",[244,109507,109508],{"className":23961,"code":109349,"language":23963,"meta":169,"style":169},[22,109509,109510],{"__ignoreMap":169},[252,109511,109512,109514,109516,109518,109520],{"class":254,"line":255},[252,109513,107950],{"class":262},[252,109515,308],{"class":258},[252,109517,107944],{"class":367},[252,109519,109342],{"class":2102},[252,109521,108761],{"class":367},[14,109523,102744],{"id":102743},[19,109525,109526],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[207,109528,109529,109532,109535],{},[210,109530,109531],{},"先用 viewer 看模型和控制是否正常。",[210,109533,109534],{},"再用 renderer 保存图片或构造视觉观测。",[210,109536,109537],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5266,109539,109540],{},"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":169,"searchDepth":170,"depth":170,"links":109542},[109543,109544,109545,109550,109555,109556,109557,109564],{"id":100784,"depth":170,"text":100785},{"id":100907,"depth":170,"text":100908},{"id":101181,"depth":170,"text":101182,"children":109546},[109547,109548,109549],{"id":108047,"depth":1318,"text":108048},{"id":108077,"depth":1318,"text":108078},{"id":108112,"depth":1318,"text":108113},{"id":101389,"depth":170,"text":101390,"children":109551},[109552,109553,109554],{"id":101709,"depth":1318,"text":101709},{"id":108857,"depth":1318,"text":108858},{"id":109035,"depth":1318,"text":109036},{"id":102452,"depth":170,"text":102453},{"id":102484,"depth":170,"text":102485},{"id":102589,"depth":170,"text":102590,"children":109558},[109559,109560,109561,109562,109563],{"id":109399,"depth":1318,"text":109400},{"id":109436,"depth":1318,"text":109439},{"id":109445,"depth":1318,"text":109446},{"id":109457,"depth":1318,"text":109457},{"id":109483,"depth":1318,"text":109483},{"id":102743,"depth":170,"text":102744},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107655,"description":169},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109571,"title":109572,"body":109573,"description":169,"extension":179,"meta":111484,"navigation":181,"path":111485,"seo":111486,"stem":111487,"__hash__":111488},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109574,"toc":111460},[109575,109578,109580,109583,109585,109604,109607,109613,109616,109618,109620,109644,109646,109660,109662,109703,109705,109716,109718,109721,109727,109730,109764,109767,109799,109802,109834,109838,109841,109881,109884,109890,109893,109899,109903,109906,109912,109915,109919,109922,109962,109964,109977,109980,109982,110564,110566,110578,110581,110592,110594,110597,110616,110628,110631,110652,110655,110658,110701,110704,110707,110727,110734,110736,110754,110769,110772,110778,110781,110787,110804,110811,110842,110853,110887,110898,110915,110924,110932,110937,110951,110954,110975,110981,110995,111000,111030,111040,111065,111073,111096,111099,111115,111118,111126,111132,111154,111167,111188,111197,111236,111247,111249,111252,111258,111261,111264,111270,111273,111293,111296,111298,111337,111339,111342,111350,111353,111356,111383,111386,111396,111402,111405,111411,111413,111419,111423,111426,111428,111431,111455,111458],[10,109576,109572],{"id":109577},"_6控制任务cartpole",[14,109579,100785],{"id":100784},[19,109581,109582],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109584,104467],{},[207,109586,109587,109590,109592,109595,109598,109601],{},[210,109588,109589],{},"slide joint",[210,109591,106320],{},[210,109593,109594],{},"cart force actuator",[210,109596,109597],{},"状态观测",[210,109599,109600],{},"简单控制循环",[210,109602,109603],{},"reward 设计雏形",[19,109605,109606],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[244,109608,109611],{"className":109609,"code":109610,"language":5327,"meta":169},[5325],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[22,109612,109610],{"__ignoreMap":169},[19,109614,109615],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109617,100908],{"id":100907},[19,109619,100911],{},[244,109621,109622],{"className":23961,"code":104524,"language":23963,"meta":169,"style":169},[22,109623,109624],{"__ignoreMap":169},[252,109625,109626,109628,109630,109632,109634,109636,109638,109640,109642],{"class":254,"line":255},[252,109627,24716],{"class":2102},[252,109629,26455],{"class":367},[252,109631,23973],{"class":367},[252,109633,26540],{"class":311},[252,109635,104539],{"class":367},[252,109637,100936],{"class":367},[252,109639,102638],{"class":367},[252,109641,100952],{"class":367},[252,109643,104548],{"class":367},[19,109645,102955],{},[244,109647,109648],{"className":23961,"code":101057,"language":23963,"meta":169,"style":169},[22,109649,109650],{"__ignoreMap":169},[252,109651,109652,109654,109656,109658],{"class":254,"line":255},[252,109653,23970],{"class":2102},[252,109655,23973],{"class":367},[252,109657,101068],{"class":367},[252,109659,101071],{"class":367},[19,109661,102972],{},[244,109663,109665],{"className":23961,"code":109664,"language":23963,"meta":169,"style":169},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[22,109666,109667,109684,109693],{"__ignoreMap":169},[252,109668,109669,109671,109673,109675,109678,109680,109682],{"class":254,"line":255},[252,109670,30470],{"class":2102},[252,109672,29316],{"class":367},[252,109674,25255],{"class":311},[252,109676,109677],{"class":367}," mujoco-cartpole",[252,109679,101113],{"class":367},[252,109681,101116],{"class":311},[252,109683,101119],{"class":311},[252,109685,109686,109688,109690],{"class":254,"line":170},[252,109687,30470],{"class":2102},[252,109689,101126],{"class":367},[252,109691,109692],{"class":367}," mujoco-cartpole\n",[252,109694,109695,109697,109699,109701],{"class":254,"line":1318},[252,109696,23970],{"class":2102},[252,109698,23973],{"class":367},[252,109700,101068],{"class":367},[252,109702,101071],{"class":367},[19,109704,101142],{},[207,109706,109707,109710,109713],{},[210,109708,109709],{},"本章不依赖 Gymnasium。",[210,109711,109712],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[210,109714,109715],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109717,101182],{"id":101181},[19,109719,109720],{},"Cartpole 的模型结构:",[244,109722,109725],{"className":109723,"code":109724,"language":5327,"meta":169},[5325],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[22,109726,109724],{"__ignoreMap":169},[19,109728,109729],{},"小车通过 slide joint 左右移动:",[244,109731,109733],{"className":53207,"code":109732,"language":53209,"meta":169,"style":169},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[22,109734,109735],{"__ignoreMap":169},[252,109736,109737,109739,109741,109743,109745,109748,109750,109752,109755,109757,109759,109762],{"class":254,"line":255},[252,109738,1173],{"class":262},[252,109740,103092],{"class":51440},[252,109742,15060],{"class":2102},[252,109744,308],{"class":262},[252,109746,109747],{"class":367},"\"cart_x\"",[252,109749,53964],{"class":2102},[252,109751,308],{"class":262},[252,109753,109754],{"class":367},"\"slide\"",[252,109756,106164],{"class":2102},[252,109758,308],{"class":262},[252,109760,109761],{"class":367},"\"1 0 0\"",[252,109763,101281],{"class":262},[19,109765,109766],{},"杆子通过 hinge joint 旋转:",[244,109768,109770],{"className":53207,"code":109769,"language":53209,"meta":169,"style":169},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[22,109771,109772],{"__ignoreMap":169},[252,109773,109774,109776,109778,109780,109782,109785,109787,109789,109791,109793,109795,109797],{"class":254,"line":255},[252,109775,1173],{"class":262},[252,109777,103092],{"class":51440},[252,109779,15060],{"class":2102},[252,109781,308],{"class":262},[252,109783,109784],{"class":367},"\"pole_hinge\"",[252,109786,53964],{"class":2102},[252,109788,308],{"class":262},[252,109790,106155],{"class":367},[252,109792,106164],{"class":2102},[252,109794,308],{"class":262},[252,109796,106169],{"class":367},[252,109798,101281],{"class":262},[19,109800,109801],{},"控制力作用在小车 slide joint 上:",[244,109803,109805],{"className":53207,"code":109804,"language":53209,"meta":169,"style":169},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[22,109806,109807],{"__ignoreMap":169},[252,109808,109809,109811,109813,109815,109817,109820,109822,109824,109826,109828,109830,109832],{"class":254,"line":255},[252,109810,1173],{"class":262},[252,109812,106210],{"class":51440},[252,109814,15060],{"class":2102},[252,109816,308],{"class":262},[252,109818,109819],{"class":367},"\"cart_motor\"",[252,109821,106220],{"class":2102},[252,109823,308],{"class":262},[252,109825,109747],{"class":367},[252,109827,106227],{"class":2102},[252,109829,308],{"class":262},[252,109831,54456],{"class":367},[252,109833,101281],{"class":262},[224,109835,109837],{"id":109836},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,109839,109840],{},"这个简化模型有两个关节：",[400,109842,109843,109854],{},[403,109844,109845],{},[406,109846,109847,109849,109851],{},[409,109848,102895],{"align":23875},[409,109850,23876],{"align":23875},[409,109852,109853],{"align":23875},"对应状态",[447,109855,109856,109869],{},[406,109857,109858,109863,109866],{},[452,109859,109860],{"align":23875},[22,109861,109862],{},"cart_x",[452,109864,109865],{"align":23875},"slide",[452,109867,109868],{"align":23875},"小车 x 位置",[406,109870,109871,109876,109878],{},[452,109872,109873],{"align":23875},[22,109874,109875],{},"pole_hinge",[452,109877,105976],{"align":23875},[452,109879,109880],{"align":23875},"杆子角度",[19,109882,109883],{},"所以：",[244,109885,109888],{"className":109886,"code":109887,"language":5327,"meta":169},[5325],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[22,109889,109887],{"__ignoreMap":169},[19,109891,109892],{},"把它们拼起来就是观测：",[244,109894,109897],{"className":109895,"code":109896,"language":5327,"meta":169},[5325],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[22,109898,109896],{"__ignoreMap":169},[224,109900,109902],{"id":109901},"action-是什么","action 是什么",[19,109904,109905],{},"本章只有一个 actuator：",[244,109907,109910],{"className":109908,"code":109909,"language":5327,"meta":169},[5325],"data.ctrl[0] = action\n",[22,109911,109909],{"__ignoreMap":169},[19,109913,109914],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[224,109916,109918],{"id":109917},"reward-是什么","reward 是什么",[19,109920,109921],{},"奖励函数：",[244,109923,109925],{"className":30518,"code":109924,"language":30520,"meta":169,"style":169},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[22,109926,109927],{"__ignoreMap":169},[252,109928,109929,109931,109934,109936,109938,109940,109943,109945,109948,109950,109952,109954,109957,109959],{"class":254,"line":255},[252,109930,17186],{"class":258},[252,109932,109933],{"class":311}," float",[252,109935,263],{"class":262},[252,109937,102540],{"class":311},[252,109939,52411],{"class":258},[252,109941,109942],{"class":311}," 0.1",[252,109944,6658],{"class":258},[252,109946,109947],{"class":262}," cart_x ",[252,109949,718],{"class":258},[252,109951,109947],{"class":262},[252,109953,795],{"class":258},[252,109955,109956],{"class":262}," pole_angle ",[252,109958,718],{"class":258},[252,109960,109961],{"class":262}," pole_angle)\n",[19,109963,106362],{},[207,109965,109966,109971,109974],{},[210,109967,109968,109969,28525],{},"基础奖励是 ",[22,109970,102540],{},[210,109972,109973],{},"小车离中心越远，扣分越多。",[210,109975,109976],{},"杆子角度越大，扣分越多。",[19,109978,109979],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,109981,101390],{"id":101389},[244,109983,109985],{"className":30518,"code":109984,"language":30520,"meta":169,"style":169},"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",[22,109986,109987,109993,110003,110007,110011,110019,110024,110028,110032,110036,110041,110045,110050,110055,110060,110064,110069,110074,110079,110083,110087,110091,110095,110099,110104,110108,110112,110116,110120,110124,110134,110141,110145,110149,110163,110177,110190,110220,110224,110228,110240,110252,110260,110264,110277,110281,110285,110294,110298,110314,110324,110337,110350,110354,110377,110395,110399,110411,110415,110419,110429,110439,110443,110459,110500,110504,110524,110540,110544,110548,110560],{"__ignoreMap":169},[252,109988,109989,109991],{"class":254,"line":255},[252,109990,30532],{"class":258},[252,109992,101438],{"class":262},[252,109994,109995,109997,109999,110001],{"class":254,"line":170},[252,109996,30532],{"class":258},[252,109998,31520],{"class":262},[252,110000,31523],{"class":258},[252,110002,31526],{"class":262},[252,110004,110005],{"class":254,"line":1318},[252,110006,2539],{"emptyLinePlaceholder":181},[252,110008,110009],{"class":254,"line":1333},[252,110010,2539],{"emptyLinePlaceholder":181},[252,110012,110013,110015,110017],{"class":254,"line":1339},[252,110014,101451],{"class":311},[252,110016,13704],{"class":258},[252,110018,101456],{"class":367},[252,110020,110021],{"class":254,"line":1353},[252,110022,110023],{"class":367},"\u003Cmujoco model=\"cartpole\">\n",[252,110025,110026],{"class":254,"line":1359},[252,110027,101466],{"class":367},[252,110029,110030],{"class":254,"line":1450},[252,110031,2539],{"emptyLinePlaceholder":181},[252,110033,110034],{"class":254,"line":1456},[252,110035,101475],{"class":367},[252,110037,110038],{"class":254,"line":1468},[252,110039,110040],{"class":367},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[252,110042,110043],{"class":254,"line":1751},[252,110044,2539],{"emptyLinePlaceholder":181},[252,110046,110047],{"class":254,"line":1756},[252,110048,110049],{"class":367},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[252,110051,110052],{"class":254,"line":1762},[252,110053,110054],{"class":367},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[252,110056,110057],{"class":254,"line":1767},[252,110058,110059],{"class":367},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[252,110061,110062],{"class":254,"line":1781},[252,110063,2539],{"emptyLinePlaceholder":181},[252,110065,110066],{"class":254,"line":1786},[252,110067,110068],{"class":367},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[252,110070,110071],{"class":254,"line":1792},[252,110072,110073],{"class":367},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[252,110075,110076],{"class":254,"line":1813},[252,110077,110078],{"class":367},"        \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",[252,110080,110081],{"class":254,"line":1818},[252,110082,106574],{"class":367},[252,110084,110085],{"class":254,"line":1832},[252,110086,101504],{"class":367},[252,110088,110089],{"class":254,"line":1837},[252,110090,101509],{"class":367},[252,110092,110093],{"class":254,"line":1866},[252,110094,2539],{"emptyLinePlaceholder":181},[252,110096,110097],{"class":254,"line":1871},[252,110098,106591],{"class":367},[252,110100,110101],{"class":254,"line":1888},[252,110102,110103],{"class":367},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[252,110105,110106],{"class":254,"line":1893},[252,110107,106601],{"class":367},[252,110109,110110],{"class":254,"line":1898},[252,110111,101514],{"class":367},[252,110113,110114],{"class":254,"line":1903},[252,110115,95836],{"class":367},[252,110117,110118],{"class":254,"line":1917},[252,110119,2539],{"emptyLinePlaceholder":181},[252,110121,110122],{"class":254,"line":1922},[252,110123,2539],{"emptyLinePlaceholder":181},[252,110125,110126,110128,110131],{"class":254,"line":2716},[252,110127,32087],{"class":258},[252,110129,110130],{"class":2102}," get_observation",[252,110132,110133],{"class":262},"(data: mujoco.MjData) -> np.ndarray:\n",[252,110135,110136,110138],{"class":254,"line":2730},[252,110137,4229],{"class":258},[252,110139,110140],{"class":262}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[252,110142,110143],{"class":254,"line":2738},[252,110144,2539],{"emptyLinePlaceholder":181},[252,110146,110147],{"class":254,"line":2743},[252,110148,2539],{"emptyLinePlaceholder":181},[252,110150,110151,110153,110156,110159,110161],{"class":254,"line":2749},[252,110152,32087],{"class":258},[252,110154,110155],{"class":2102}," compute_reward",[252,110157,110158],{"class":262},"(obs: np.ndarray) -> ",[252,110160,302],{"class":311},[252,110162,3878],{"class":262},[252,110164,110165,110168,110170,110173,110175],{"class":254,"line":2755},[252,110166,110167],{"class":262},"    cart_x ",[252,110169,308],{"class":258},[252,110171,110172],{"class":262}," obs[",[252,110174,454],{"class":311},[252,110176,33386],{"class":262},[252,110178,110179,110182,110184,110186,110188],{"class":254,"line":2760},[252,110180,110181],{"class":262},"    pole_angle ",[252,110183,308],{"class":258},[252,110185,110172],{"class":262},[252,110187,480],{"class":311},[252,110189,33386],{"class":262},[252,110191,110192,110194,110196,110198,110200,110202,110204,110206,110208,110210,110212,110214,110216,110218],{"class":254,"line":8088},[252,110193,4229],{"class":258},[252,110195,109933],{"class":311},[252,110197,263],{"class":262},[252,110199,102540],{"class":311},[252,110201,52411],{"class":258},[252,110203,109942],{"class":311},[252,110205,6658],{"class":258},[252,110207,109947],{"class":262},[252,110209,718],{"class":258},[252,110211,109947],{"class":262},[252,110213,795],{"class":258},[252,110215,109956],{"class":262},[252,110217,718],{"class":258},[252,110219,109961],{"class":262},[252,110221,110222],{"class":254,"line":8112},[252,110223,2539],{"emptyLinePlaceholder":181},[252,110225,110226],{"class":254,"line":8117},[252,110227,2539],{"emptyLinePlaceholder":181},[252,110229,110230,110232,110234,110236,110238],{"class":254,"line":8123},[252,110231,32087],{"class":258},[252,110233,2112],{"class":2102},[252,110235,101535],{"class":262},[252,110237,95824],{"class":311},[252,110239,3878],{"class":262},[252,110241,110242,110244,110246,110248,110250],{"class":254,"line":8150},[252,110243,101544],{"class":262},[252,110245,308],{"class":258},[252,110247,101549],{"class":262},[252,110249,101451],{"class":311},[252,110251,269],{"class":262},[252,110253,110254,110256,110258],{"class":254,"line":8155},[252,110255,101558],{"class":262},[252,110257,308],{"class":258},[252,110259,101563],{"class":262},[252,110261,110262],{"class":254,"line":8161},[252,110263,2539],{"emptyLinePlaceholder":181},[252,110265,110266,110268,110270,110272,110274],{"class":254,"line":8173},[252,110267,105205],{"class":262},[252,110269,480],{"class":311},[252,110271,4582],{"class":262},[252,110273,308],{"class":258},[252,110275,110276],{"class":311}," 0.1\n",[252,110278,110279],{"class":254,"line":8185},[252,110280,105218],{"class":262},[252,110282,110283],{"class":254,"line":8197},[252,110284,2539],{"emptyLinePlaceholder":181},[252,110286,110287,110290,110292],{"class":254,"line":9856},[252,110288,110289],{"class":262},"    total_reward ",[252,110291,308],{"class":258},[252,110293,104897],{"class":311},[252,110295,110296],{"class":254,"line":9881},[252,110297,2539],{"emptyLinePlaceholder":181},[252,110299,110300,110302,110304,110306,110308,110310,110312],{"class":254,"line":9904},[252,110301,3340],{"class":258},[252,110303,31756],{"class":262},[252,110305,26183],{"class":258},[252,110307,32583],{"class":311},[252,110309,263],{"class":262},[252,110311,6550],{"class":311},[252,110313,30926],{"class":262},[252,110315,110316,110319,110321],{"class":254,"line":9928},[252,110317,110318],{"class":262},"        obs ",[252,110320,308],{"class":258},[252,110322,110323],{"class":262}," get_observation(data)\n",[252,110325,110326,110329,110331,110333,110335],{"class":254,"line":9933},[252,110327,110328],{"class":262},"        pole_angle ",[252,110330,308],{"class":258},[252,110332,110172],{"class":262},[252,110334,480],{"class":311},[252,110336,33386],{"class":262},[252,110338,110339,110342,110344,110346,110348],{"class":254,"line":9938},[252,110340,110341],{"class":262},"        pole_angular_velocity ",[252,110343,308],{"class":258},[252,110345,110172],{"class":262},[252,110347,334],{"class":311},[252,110349,33386],{"class":262},[252,110351,110352],{"class":254,"line":9943},[252,110353,2539],{"emptyLinePlaceholder":181},[252,110355,110356,110359,110361,110364,110366,110368,110370,110372,110374],{"class":254,"line":9952},[252,110357,110358],{"class":262},"        action ",[252,110360,308],{"class":258},[252,110362,110363],{"class":311}," 2.0",[252,110365,6658],{"class":258},[252,110367,109956],{"class":262},[252,110369,744],{"class":258},[252,110371,62007],{"class":311},[252,110373,6658],{"class":258},[252,110375,110376],{"class":262}," pole_angular_velocity\n",[252,110378,110379,110381,110383,110385,110387,110389,110391,110393],{"class":254,"line":9957},[252,110380,110358],{"class":262},[252,110382,308],{"class":258},[252,110384,107583],{"class":262},[252,110386,795],{"class":258},[252,110388,102540],{"class":311},[252,110390,12575],{"class":262},[252,110392,102540],{"class":311},[252,110394,269],{"class":262},[252,110396,110397],{"class":254,"line":9963},[252,110398,2539],{"emptyLinePlaceholder":181},[252,110400,110401,110403,110405,110407,110409],{"class":254,"line":9984},[252,110402,106753],{"class":262},[252,110404,454],{"class":311},[252,110406,4582],{"class":262},[252,110408,308],{"class":258},[252,110410,107606],{"class":262},[252,110412,110413],{"class":254,"line":9990},[252,110414,101653],{"class":262},[252,110416,110417],{"class":254,"line":10004},[252,110418,2539],{"emptyLinePlaceholder":181},[252,110420,110421,110424,110426],{"class":254,"line":10010},[252,110422,110423],{"class":262},"        reward ",[252,110425,308],{"class":258},[252,110427,110428],{"class":262}," compute_reward(get_observation(data))\n",[252,110430,110431,110434,110436],{"class":254,"line":10037},[252,110432,110433],{"class":262},"        total_reward ",[252,110435,9617],{"class":258},[252,110437,110438],{"class":262}," reward\n",[252,110440,110441],{"class":254,"line":10046},[252,110442,2539],{"emptyLinePlaceholder":181},[252,110444,110445,110447,110449,110451,110453,110455,110457],{"class":254,"line":10052},[252,110446,2636],{"class":258},[252,110448,31756],{"class":262},[252,110450,591],{"class":258},[252,110452,5894],{"class":311},[252,110454,101696],{"class":258},[252,110456,4232],{"class":311},[252,110458,3878],{"class":262},[252,110460,110461,110463,110465,110468,110471,110474,110477,110479,110482,110485,110487,110489,110491,110493,110496,110498],{"class":254,"line":10060},[252,110462,34790],{"class":311},[252,110464,263],{"class":262},[252,110466,110467],{"class":367},"\"step:\"",[252,110469,110470],{"class":262},", step, ",[252,110472,110473],{"class":367},"\"obs:\"",[252,110475,110476],{"class":262},", np.round(obs, ",[252,110478,334],{"class":311},[252,110480,110481],{"class":262},"), ",[252,110483,110484],{"class":367},"\"action:\"",[252,110486,12575],{"class":262},[252,110488,32158],{"class":311},[252,110490,263],{"class":262},[252,110492,302],{"class":311},[252,110494,110495],{"class":262},"(action), ",[252,110497,334],{"class":311},[252,110499,30637],{"class":262},[252,110501,110502],{"class":254,"line":10065},[252,110503,2539],{"emptyLinePlaceholder":181},[252,110505,110506,110508,110510,110513,110515,110517,110520,110522],{"class":254,"line":16744},[252,110507,31439],{"class":311},[252,110509,263],{"class":262},[252,110511,110512],{"class":367},"\"total_reward:\"",[252,110514,12575],{"class":262},[252,110516,32158],{"class":311},[252,110518,110519],{"class":262},"(total_reward, ",[252,110521,334],{"class":311},[252,110523,30637],{"class":262},[252,110525,110526,110528,110530,110533,110536,110538],{"class":254,"line":16750},[252,110527,31439],{"class":311},[252,110529,263],{"class":262},[252,110531,110532],{"class":367},"\"final obs:\"",[252,110534,110535],{"class":262},", np.round(get_observation(data), ",[252,110537,334],{"class":311},[252,110539,30637],{"class":262},[252,110541,110542],{"class":254,"line":16773},[252,110543,2539],{"emptyLinePlaceholder":181},[252,110545,110546],{"class":254,"line":16779},[252,110547,2539],{"emptyLinePlaceholder":181},[252,110549,110550,110552,110554,110556,110558],{"class":254,"line":16802},[252,110551,1670],{"class":258},[252,110553,31360],{"class":311},[252,110555,101696],{"class":258},[252,110557,101699],{"class":367},[252,110559,3878],{"class":262},[252,110561,110562],{"class":254,"line":16816},[252,110563,101706],{"class":262},[19,110565,103706],{},[244,110567,110569],{"className":23961,"code":110568,"language":23963,"meta":169,"style":169},"touch ch6_cartpole.py\n",[22,110570,110571],{"__ignoreMap":169},[252,110572,110573,110575],{"class":254,"line":255},[252,110574,101420],{"class":2102},[252,110576,110577],{"class":367}," ch6_cartpole.py\n",[19,110579,110580],{},"运行：",[244,110582,110584],{"className":23961,"code":110583,"language":23963,"meta":169,"style":169},"python ch6_cartpole.py\n",[22,110585,110586],{"__ignoreMap":169},[252,110587,110588,110590],{"class":254,"line":255},[252,110589,30520],{"class":2102},[252,110591,110577],{"class":367},[224,110593,101709],{"id":101709},[19,110595,110596],{},"构造观测：",[244,110598,110600],{"className":30518,"code":110599,"language":30520,"meta":169,"style":169},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[22,110601,110602,110610],{"__ignoreMap":169},[252,110603,110604,110606,110608],{"class":254,"line":255},[252,110605,32087],{"class":258},[252,110607,110130],{"class":2102},[252,110609,110133],{"class":262},[252,110611,110612,110614],{"class":254,"line":170},[252,110613,4229],{"class":258},[252,110615,110140],{"class":262},[19,110617,110618,110621,110622,110624,110625,110627],{},[22,110619,110620],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[22,110623,104166],{}," 2 维，",[22,110626,104496],{}," 2 维，所以 obs 是 4 维。",[19,110629,110630],{},"设置初始角度：",[244,110632,110634],{"className":30518,"code":110633,"language":30520,"meta":169,"style":169},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[22,110635,110636,110648],{"__ignoreMap":169},[252,110637,110638,110640,110642,110644,110646],{"class":254,"line":255},[252,110639,104835],{"class":262},[252,110641,480],{"class":311},[252,110643,4582],{"class":262},[252,110645,308],{"class":258},[252,110647,110276],{"class":311},[252,110649,110650],{"class":254,"line":170},[252,110651,104679],{"class":262},[19,110653,110654],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110656,110657],{},"简单反馈控制：",[244,110659,110661],{"className":30518,"code":110660,"language":30520,"meta":169,"style":169},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[22,110662,110663,110683],{"__ignoreMap":169},[252,110664,110665,110667,110669,110671,110673,110675,110677,110679,110681],{"class":254,"line":255},[252,110666,107578],{"class":262},[252,110668,308],{"class":258},[252,110670,110363],{"class":311},[252,110672,6658],{"class":258},[252,110674,109956],{"class":262},[252,110676,744],{"class":258},[252,110678,62007],{"class":311},[252,110680,6658],{"class":258},[252,110682,110376],{"class":262},[252,110684,110685,110687,110689,110691,110693,110695,110697,110699],{"class":254,"line":170},[252,110686,107578],{"class":262},[252,110688,308],{"class":258},[252,110690,107583],{"class":262},[252,110692,795],{"class":258},[252,110694,102540],{"class":311},[252,110696,12575],{"class":262},[252,110698,102540],{"class":311},[252,110700,269],{"class":262},[19,110702,110703],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110705,110706],{},"限制动作：",[244,110708,110710],{"className":30518,"code":110709,"language":30520,"meta":169,"style":169},"np.clip(action, -1.0, 1.0)\n",[22,110711,110712],{"__ignoreMap":169},[252,110713,110714,110717,110719,110721,110723,110725],{"class":254,"line":255},[252,110715,110716],{"class":262},"np.clip(action, ",[252,110718,795],{"class":258},[252,110720,102540],{"class":311},[252,110722,12575],{"class":262},[252,110724,102540],{"class":311},[252,110726,269],{"class":262},[19,110728,110729,110730,110733],{},"因为 XML 里 ",[22,110731,110732],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[224,110735,101845],{"id":101845},[244,110737,110738],{"className":30518,"code":110599,"language":30520,"meta":169,"style":169},[22,110739,110740,110748],{"__ignoreMap":169},[252,110741,110742,110744,110746],{"class":254,"line":255},[252,110743,32087],{"class":258},[252,110745,110130],{"class":2102},[252,110747,110133],{"class":262},[252,110749,110750,110752],{"class":254,"line":170},[252,110751,4229],{"class":258},[252,110753,110140],{"class":262},[19,110755,110756,110757,110760,110761,110764,110765,110768],{},"这段定义了一个函数，用来获取当前观测。",[22,110758,110759],{},"data.qpos.copy()"," 是位置数组副本，",[22,110762,110763],{},"data.qvel.copy()"," 是速度数组副本。",[22,110766,110767],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,110770,110771],{},"在本章模型里：",[244,110773,110776],{"className":110774,"code":110775,"language":5327,"meta":169},[5325],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[22,110777,110775],{"__ignoreMap":169},[19,110779,110780],{},"所以返回的 obs 是：",[244,110782,110785],{"className":110783,"code":110784,"language":5327,"meta":169},[5325],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[22,110786,110784],{"__ignoreMap":169},[244,110788,110790],{"className":30518,"code":110789,"language":30520,"meta":169,"style":169},"def compute_reward(obs: np.ndarray) -> float:\n",[22,110791,110792],{"__ignoreMap":169},[252,110793,110794,110796,110798,110800,110802],{"class":254,"line":255},[252,110795,32087],{"class":258},[252,110797,110155],{"class":2102},[252,110799,110158],{"class":262},[252,110801,302],{"class":311},[252,110803,3878],{"class":262},[19,110805,110806,110807,110810],{},"这行定义奖励函数。输入是观测 ",[22,110808,110809],{},"obs","，输出是一个浮点数奖励。",[244,110812,110814],{"className":30518,"code":110813,"language":30520,"meta":169,"style":169},"cart_x = obs[0]\npole_angle = obs[1]\n",[22,110815,110816,110829],{"__ignoreMap":169},[252,110817,110818,110821,110823,110825,110827],{"class":254,"line":255},[252,110819,110820],{"class":262},"cart_x ",[252,110822,308],{"class":258},[252,110824,110172],{"class":262},[252,110826,454],{"class":311},[252,110828,33386],{"class":262},[252,110830,110831,110834,110836,110838,110840],{"class":254,"line":170},[252,110832,110833],{"class":262},"pole_angle ",[252,110835,308],{"class":258},[252,110837,110172],{"class":262},[252,110839,480],{"class":311},[252,110841,33386],{"class":262},[19,110843,110844,110845,110848,110849,110852],{},"数组索引从 0 开始。",[22,110846,110847],{},"obs[0]"," 是第一个元素，也就是小车位置。",[22,110850,110851],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[244,110854,110855],{"className":30518,"code":109924,"language":30520,"meta":169,"style":169},[22,110856,110857],{"__ignoreMap":169},[252,110858,110859,110861,110863,110865,110867,110869,110871,110873,110875,110877,110879,110881,110883,110885],{"class":254,"line":255},[252,110860,17186],{"class":258},[252,110862,109933],{"class":311},[252,110864,263],{"class":262},[252,110866,102540],{"class":311},[252,110868,52411],{"class":258},[252,110870,109942],{"class":311},[252,110872,6658],{"class":258},[252,110874,109947],{"class":262},[252,110876,718],{"class":258},[252,110878,109947],{"class":262},[252,110880,795],{"class":258},[252,110882,109956],{"class":262},[252,110884,718],{"class":258},[252,110886,109961],{"class":262},[19,110888,110889,110890,110893,110894,110897],{},"这行计算奖励。",[22,110891,110892],{},"cart_x * cart_x"," 是小车位置的平方，",[22,110895,110896],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[244,110899,110901],{"className":30518,"code":110900,"language":30520,"meta":169,"style":169},"data.qpos[1] = 0.1\n",[22,110902,110903],{"__ignoreMap":169},[252,110904,110905,110907,110909,110911,110913],{"class":254,"line":255},[252,110906,104835],{"class":262},[252,110908,480],{"class":311},[252,110910,4582],{"class":262},[252,110912,308],{"class":258},[252,110914,110276],{"class":311},[19,110916,110917,110918,110920,110921,110923],{},"手动设置杆子的初始角度。因为 ",[22,110919,105592],{}," 是小车位置，",[22,110922,105595],{}," 是杆子角度，所以这里改的是杆子。",[244,110925,110926],{"className":30518,"code":104679,"language":30520,"meta":169,"style":169},[22,110927,110928],{"__ignoreMap":169},[252,110929,110930],{"class":254,"line":255},[252,110931,104679],{"class":262},[19,110933,105638,110934,110936],{},[22,110935,104166],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[244,110938,110940],{"className":30518,"code":110939,"language":30520,"meta":169,"style":169},"total_reward = 0.0\n",[22,110941,110942],{"__ignoreMap":169},[252,110943,110944,110947,110949],{"class":254,"line":255},[252,110945,110946],{"class":262},"total_reward ",[252,110948,308],{"class":258},[252,110950,104897],{"class":311},[19,110952,110953],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[244,110955,110957],{"className":30518,"code":110956,"language":30520,"meta":169,"style":169},"for step in range(1000):\n",[22,110958,110959],{"__ignoreMap":169},[252,110960,110961,110963,110965,110967,110969,110971,110973],{"class":254,"line":255},[252,110962,3164],{"class":258},[252,110964,31756],{"class":262},[252,110966,26183],{"class":258},[252,110968,32583],{"class":311},[252,110970,263],{"class":262},[252,110972,6550],{"class":311},[252,110974,30926],{"class":262},[19,110976,110977,110978,110980],{},"循环 1000 步。",[22,110979,107270],{}," 是当前步数，从 0 到 999。",[244,110982,110984],{"className":30518,"code":110983,"language":30520,"meta":169,"style":169},"obs = get_observation(data)\n",[22,110985,110986],{"__ignoreMap":169},[252,110987,110988,110991,110993],{"class":254,"line":255},[252,110989,110990],{"class":262},"obs ",[252,110992,308],{"class":258},[252,110994,110323],{"class":262},[19,110996,110997,110998,28525],{},"读取当前状态，保存到 ",[22,110999,110809],{},[244,111001,111003],{"className":30518,"code":111002,"language":30520,"meta":169,"style":169},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[22,111004,111005,111017],{"__ignoreMap":169},[252,111006,111007,111009,111011,111013,111015],{"class":254,"line":255},[252,111008,110833],{"class":262},[252,111010,308],{"class":258},[252,111012,110172],{"class":262},[252,111014,480],{"class":311},[252,111016,33386],{"class":262},[252,111018,111019,111022,111024,111026,111028],{"class":254,"line":170},[252,111020,111021],{"class":262},"pole_angular_velocity ",[252,111023,308],{"class":258},[252,111025,110172],{"class":262},[252,111027,334],{"class":311},[252,111029,33386],{"class":262},[19,111031,111032,111033,111036,111037,28525],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[22,111034,111035],{},"obs[3]","？因为 obs 的顺序是 ",[22,111038,111039],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[244,111041,111043],{"className":30518,"code":111042,"language":30520,"meta":169,"style":169},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[22,111044,111045],{"__ignoreMap":169},[252,111046,111047,111049,111051,111053,111055,111057,111059,111061,111063],{"class":254,"line":255},[252,111048,107578],{"class":262},[252,111050,308],{"class":258},[252,111052,110363],{"class":311},[252,111054,6658],{"class":258},[252,111056,109956],{"class":262},[252,111058,744],{"class":258},[252,111060,62007],{"class":311},[252,111062,6658],{"class":258},[252,111064,110376],{"class":262},[19,111066,111067,111068,132,111070,111072],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[22,111069,105396],{},[22,111071,35469],{}," 是人为设置的系数，不是固定公式。",[244,111074,111076],{"className":30518,"code":111075,"language":30520,"meta":169,"style":169},"action = np.clip(action, -1.0, 1.0)\n",[22,111077,111078],{"__ignoreMap":169},[252,111079,111080,111082,111084,111086,111088,111090,111092,111094],{"class":254,"line":255},[252,111081,107578],{"class":262},[252,111083,308],{"class":258},[252,111085,107583],{"class":262},[252,111087,795],{"class":258},[252,111089,102540],{"class":311},[252,111091,12575],{"class":262},[252,111093,102540],{"class":311},[252,111095,269],{"class":262},[19,111097,111098],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[244,111100,111101],{"className":30518,"code":109909,"language":30520,"meta":169,"style":169},[22,111102,111103],{"__ignoreMap":169},[252,111104,111105,111107,111109,111111,111113],{"class":254,"line":255},[252,111106,106007],{"class":262},[252,111108,454],{"class":311},[252,111110,4582],{"class":262},[252,111112,308],{"class":258},[252,111114,107606],{"class":262},[19,111116,111117],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[244,111119,111120],{"className":30518,"code":104641,"language":30520,"meta":169,"style":169},[22,111121,111122],{"__ignoreMap":169},[252,111123,111124],{"class":254,"line":255},[252,111125,104641],{"class":262},[19,111127,111128,111129,111131],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[22,111130,106262],{}," 计算小车和杆子的下一刻状态。",[244,111133,111135],{"className":30518,"code":111134,"language":30520,"meta":169,"style":169},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[22,111136,111137,111146],{"__ignoreMap":169},[252,111138,111139,111142,111144],{"class":254,"line":255},[252,111140,111141],{"class":262},"reward ",[252,111143,308],{"class":258},[252,111145,110428],{"class":262},[252,111147,111148,111150,111152],{"class":254,"line":170},[252,111149,110946],{"class":262},[252,111151,9617],{"class":258},[252,111153,110438],{"class":262},[19,111155,111156,111157,111159,111160,111163,111164,28525],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[22,111158,9617],{}," 是简写，",[22,111161,111162],{},"total_reward += reward"," 等价于 ",[22,111165,111166],{},"total_reward = total_reward + reward",[244,111168,111170],{"className":30518,"code":111169,"language":30520,"meta":169,"style":169},"if step % 100 == 0:\n",[22,111171,111172],{"__ignoreMap":169},[252,111173,111174,111176,111178,111180,111182,111184,111186],{"class":254,"line":255},[252,111175,1670],{"class":258},[252,111177,31756],{"class":262},[252,111179,591],{"class":258},[252,111181,5894],{"class":311},[252,111183,101696],{"class":258},[252,111185,4232],{"class":311},[252,111187,3878],{"class":262},[19,111189,111190,111192,111193,111196],{},[22,111191,591],{}," 是取余数。",[22,111194,111195],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[244,111198,111200],{"className":30518,"code":111199,"language":30520,"meta":169,"style":169},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[22,111201,111202],{"__ignoreMap":169},[252,111203,111204,111206,111208,111210,111212,111214,111216,111218,111220,111222,111224,111226,111228,111230,111232,111234],{"class":254,"line":255},[252,111205,30555],{"class":311},[252,111207,263],{"class":262},[252,111209,110467],{"class":367},[252,111211,110470],{"class":262},[252,111213,110473],{"class":367},[252,111215,110476],{"class":262},[252,111217,334],{"class":311},[252,111219,110481],{"class":262},[252,111221,110484],{"class":367},[252,111223,12575],{"class":262},[252,111225,32158],{"class":311},[252,111227,263],{"class":262},[252,111229,302],{"class":311},[252,111231,110495],{"class":262},[252,111233,334],{"class":311},[252,111235,30637],{"class":262},[19,111237,111238,111239,111242,111243,111246],{},"打印当前步数、观测和动作。",[22,111240,111241],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[22,111244,111245],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111248,102453],{"id":102452},[19,111250,111251],{},"观测向量:",[244,111253,111256],{"className":111254,"code":111255,"language":5327,"meta":169},[5325],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[22,111257,111255],{"__ignoreMap":169},[19,111259,111260],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111262,111263],{},"每隔 100 步会打印一次：",[244,111265,111268],{"className":111266,"code":111267,"language":5327,"meta":169},[5325],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[22,111269,111267],{"__ignoreMap":169},[19,111271,111272],{},"重点观察：",[207,111274,111275,111281,111286],{},[210,111276,111277,111280],{},[22,111278,111279],{},"pole_angle"," 是否越来越大。",[210,111282,111283,111285],{},[22,111284,109862],{}," 是否跑得太远。",[210,111287,111288,111289,84,111291,28525],{},"action 是否经常被 clip 到 ",[22,111290,104051],{},[22,111292,480],{},[19,111294,111295],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111297,102485],{"id":102484},[207,111299,111300,111306,111309,111315,111325,111331,111334],{},[210,111301,111302,111303,28525],{},"把初始角度改为 ",[22,111304,111305],{},"data.qpos[1] = 0.3",[210,111307,111308],{},"重新运行，观察控制是否变差。",[210,111310,111311,111312,111314],{},"把 actuator ",[22,111313,107203],{}," 改小。",[210,111316,111317,111318,111321,111322,28525],{},"打印 ",[22,111319,111320],{},"model.nq, model.nv, model.nu","，应为 ",[22,111323,111324],{},"2 2 1",[210,111326,111327,111328,111330],{},"把 reward 里的 ",[22,111329,110896],{}," 系数改大，观察总奖励变化。",[210,111332,111333],{},"把控制器改成反号，观察杆子是否更容易倒。",[210,111335,111336],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111338,102590],{"id":102589},[224,111340,111341],{"id":111341},"杆子方向和预期不一致",[19,111343,102533,111344,111346,111347,111349],{},[22,111345,106375],{}," 和 capsule 的 ",[22,111348,103312],{},"，必要时用 viewer 可视化确认。",[224,111351,111352],{"id":111352},"控制器越控越倒",[19,111354,111355],{},"说明反馈符号可能反了，尝试:",[244,111357,111359],{"className":30518,"code":111358,"language":30520,"meta":169,"style":169},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[22,111360,111361],{"__ignoreMap":169},[252,111362,111363,111365,111367,111369,111371,111373,111375,111377,111379,111381],{"class":254,"line":255},[252,111364,107578],{"class":262},[252,111366,308],{"class":258},[252,111368,52411],{"class":258},[252,111370,105396],{"class":311},[252,111372,6658],{"class":258},[252,111374,109956],{"class":262},[252,111376,795],{"class":258},[252,111378,62007],{"class":311},[252,111380,6658],{"class":258},[252,111382,110376],{"class":262},[224,111384,111385],{"id":111385},"小车飞走",[19,111387,111388,111389,111391,111392,111395],{},"降低 ",[22,111390,107203],{}," 或缩小 ",[22,111393,111394],{},"action"," 的 clip 范围。",[224,111397,111399,111401],{"id":111398},"obs3-为什么是杆子角速度",[22,111400,111035],{}," 为什么是杆子角速度",[19,111403,111404],{},"因为这个模型里：",[244,111406,111409],{"className":111407,"code":111408,"language":5327,"meta":169},[5325],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[22,111410,111408],{"__ignoreMap":169},[19,111412,109883],{},[244,111414,111417],{"className":111415,"code":111416,"language":5327,"meta":169},[5325],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[22,111418,111416],{"__ignoreMap":169},[224,111420,111422],{"id":111421},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111424,111425],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111427,102744],{"id":102743},[19,111429,111430],{},"一个控制任务通常包含：",[207,111432,111433,111436,111444,111449,111452],{},[210,111434,111435],{},"模型：Cartpole 的 body、joint、actuator。",[210,111437,111438,111439,475,111441,111443],{},"观测：从 ",[22,111440,104166],{},[22,111442,104496],{}," 里取状态。",[210,111445,111446,111447,28525],{},"动作：写入 ",[22,111448,101213],{},[210,111450,111451],{},"奖励：根据任务目标打分。",[210,111453,111454],{},"循环：obs -> action -> step -> reward。",[19,111456,111457],{},"这就是后面 Gymnasium 环境的基本骨架。",[5266,111459,104422],{},{"title":169,"searchDepth":170,"depth":170,"links":111461},[111462,111463,111464,111469,111473,111474,111475,111483],{"id":100784,"depth":170,"text":100785},{"id":100907,"depth":170,"text":100908},{"id":101181,"depth":170,"text":101182,"children":111465},[111466,111467,111468],{"id":109836,"depth":1318,"text":109837},{"id":109901,"depth":1318,"text":109902},{"id":109917,"depth":1318,"text":109918},{"id":101389,"depth":170,"text":101390,"children":111470},[111471,111472],{"id":101709,"depth":1318,"text":101709},{"id":101845,"depth":1318,"text":101845},{"id":102452,"depth":170,"text":102453},{"id":102484,"depth":170,"text":102485},{"id":102589,"depth":170,"text":102590,"children":111476},[111477,111478,111479,111480,111482],{"id":111341,"depth":1318,"text":111341},{"id":111352,"depth":1318,"text":111352},{"id":111385,"depth":1318,"text":111385},{"id":111398,"depth":1318,"text":111481},"obs[3] 为什么是杆子角速度",{"id":111421,"depth":1318,"text":111422},{"id":102743,"depth":170,"text":102744},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109572,"description":169},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111490,"title":111491,"body":111492,"description":169,"extension":179,"meta":113506,"navigation":181,"path":113507,"seo":113508,"stem":113509,"__hash__":113510},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111493,"toc":113482},[111494,111497,111499,111502,111504,111521,111524,111527,111533,111536,111538,111540,111564,111566,111580,111582,111623,111625,111643,111645,111648,111654,111657,111685,111689,111695,111720,111723,111754,111761,111764,111767,111773,111776,111782,111785,111791,111795,111798,111823,111826,111828,112588,112590,112602,112604,112615,112617,112620,112637,112640,112642,112653,112656,112658,112704,112707,112720,112723,112805,112808,112810,112826,112836,112849,112852,112891,112901,112912,112922,112935,112938,112967,112970,112980,112983,112989,113006,113017,113019,113025,113042,113053,113074,113077,113089,113092,113113,113116,113124,113132,113149,113152,113221,113228,113236,113239,113252,113259,113261,113264,113270,113273,113276,113282,113288,113290,113330,113332,113338,113347,113350,113352,113372,113375,113378,113384,113388,113390,113417,113420,113423,113450,113456,113459,113462,113464,113467,113470,113476,113479],[10,111495,111491],{"id":111496},"_7控制任务reacher-机械臂到达目标",[14,111498,100785],{"id":100784},[19,111500,111501],{},"本章搭建一个二维两关节 reacher 任务。",[19,111503,104467],{},[207,111505,111506,111509,111512,111515,111518],{},[210,111507,111508],{},"两个 hinge joint",[210,111510,111511],{},"两个 motor actuator",[210,111513,111514],{},"site 作为末端点和目标点",[210,111516,111517],{},"根据末端和目标距离设计 reward",[210,111519,111520],{},"构造机械臂任务的基本形式",[19,111522,111523],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111525,111526],{},"Reacher 任务可以理解为：",[244,111528,111531],{"className":111529,"code":111530,"language":5327,"meta":169},[5325],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[22,111532,111530],{"__ignoreMap":169},[19,111534,111535],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111537,100908],{"id":100907},[19,111539,100911],{},[244,111541,111542],{"className":23961,"code":104524,"language":23963,"meta":169,"style":169},[22,111543,111544],{"__ignoreMap":169},[252,111545,111546,111548,111550,111552,111554,111556,111558,111560,111562],{"class":254,"line":255},[252,111547,24716],{"class":2102},[252,111549,26455],{"class":367},[252,111551,23973],{"class":367},[252,111553,26540],{"class":311},[252,111555,104539],{"class":367},[252,111557,100936],{"class":367},[252,111559,102638],{"class":367},[252,111561,100952],{"class":367},[252,111563,104548],{"class":367},[19,111565,102955],{},[244,111567,111568],{"className":23961,"code":101057,"language":23963,"meta":169,"style":169},[22,111569,111570],{"__ignoreMap":169},[252,111571,111572,111574,111576,111578],{"class":254,"line":255},[252,111573,23970],{"class":2102},[252,111575,23973],{"class":367},[252,111577,101068],{"class":367},[252,111579,101071],{"class":367},[19,111581,102972],{},[244,111583,111585],{"className":23961,"code":111584,"language":23963,"meta":169,"style":169},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[22,111586,111587,111604,111613],{"__ignoreMap":169},[252,111588,111589,111591,111593,111595,111598,111600,111602],{"class":254,"line":255},[252,111590,30470],{"class":2102},[252,111592,29316],{"class":367},[252,111594,25255],{"class":311},[252,111596,111597],{"class":367}," mujoco-reacher",[252,111599,101113],{"class":367},[252,111601,101116],{"class":311},[252,111603,101119],{"class":311},[252,111605,111606,111608,111610],{"class":254,"line":170},[252,111607,30470],{"class":2102},[252,111609,101126],{"class":367},[252,111611,111612],{"class":367}," mujoco-reacher\n",[252,111614,111615,111617,111619,111621],{"class":254,"line":1318},[252,111616,23970],{"class":2102},[252,111618,23973],{"class":367},[252,111620,101068],{"class":367},[252,111622,101071],{"class":367},[19,111624,101142],{},[207,111626,111627,111630,111633],{},[210,111628,111629],{},"本章使用低维状态，不使用图像输入。",[210,111631,111632],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[210,111634,111635,111636,475,111638,475,111640,111642],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[22,111637,104166],{},[22,111639,104496],{},[22,111641,103816],{}," 的方法一致。",[14,111644,101182],{"id":101181},[19,111646,111647],{},"Reacher 任务核心:",[244,111649,111652],{"className":111650,"code":111651,"language":5327,"meta":169},[5325],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[22,111653,111651],{"__ignoreMap":169},[19,111655,111656],{},"读取 site 世界坐标:",[244,111658,111660],{"className":30518,"code":111659,"language":30520,"meta":169,"style":169},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[22,111661,111662,111675],{"__ignoreMap":169},[252,111663,111664,111666,111668,111670,111673],{"class":254,"line":255},[252,111665,103770],{"class":262},[252,111667,308],{"class":258},[252,111669,103541],{"class":262},[252,111671,111672],{"class":367},"\"tip\"",[252,111674,269],{"class":262},[252,111676,111677,111680,111682],{"class":254,"line":170},[252,111678,111679],{"class":262},"tip_pos ",[252,111681,308],{"class":258},[252,111683,111684],{"class":262}," data.site_xpos[site_id]\n",[224,111686,111688],{"id":111687},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111690,111691,111692,111694],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[22,111693,104166],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[244,111696,111698],{"className":30518,"code":111697,"language":30520,"meta":169,"style":169},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[22,111699,111700,111710],{"__ignoreMap":169},[252,111701,111702,111705,111707],{"class":254,"line":255},[252,111703,111704],{"class":262},"tip ",[252,111706,308],{"class":258},[252,111708,111709],{"class":262}," data.site_xpos[tip_site_id]\n",[252,111711,111712,111715,111717],{"class":254,"line":170},[252,111713,111714],{"class":262},"target ",[252,111716,308],{"class":258},[252,111718,111719],{"class":262}," data.site_xpos[target_site_id]\n",[19,111721,111722],{},"这样 reward 就很容易写：",[244,111724,111726],{"className":30518,"code":111725,"language":30520,"meta":169,"style":169},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[22,111727,111728,111743],{"__ignoreMap":169},[252,111729,111730,111733,111735,111738,111740],{"class":254,"line":255},[252,111731,111732],{"class":262},"dist ",[252,111734,308],{"class":258},[252,111736,111737],{"class":262}," np.linalg.norm(tip ",[252,111739,795],{"class":258},[252,111741,111742],{"class":262}," target)\n",[252,111744,111745,111747,111749,111751],{"class":254,"line":170},[252,111746,111141],{"class":262},[252,111748,308],{"class":258},[252,111750,52411],{"class":258},[252,111752,111753],{"class":262},"dist\n",[19,111755,111756,111757,111760],{},"距离越小，",[22,111758,111759],{},"-dist"," 越接近 0，奖励越高。",[224,111762,111763],{"id":111763},"两关节机械臂的状态",[19,111765,111766],{},"这个模型有两个 hinge joint：",[244,111768,111771],{"className":111769,"code":111770,"language":5327,"meta":169},[5325],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[22,111772,111770],{"__ignoreMap":169},[19,111774,111775],{},"再加上末端和目标位置：",[244,111777,111780],{"className":111778,"code":111779,"language":5327,"meta":169},[5325],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[22,111781,111779],{"__ignoreMap":169},[19,111783,111784],{},"总维度：",[244,111786,111789],{"className":111787,"code":111788,"language":5327,"meta":169},[5325],"2 + 2 + 3 + 3 = 10\n",[22,111790,111788],{"__ignoreMap":169},[224,111792,111794],{"id":111793},"为什么-gravity-是-0","为什么 gravity 是 0",[19,111796,111797],{},"本章把重力设为：",[244,111799,111801],{"className":53207,"code":111800,"language":53209,"meta":169,"style":169},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[22,111802,111803],{"__ignoreMap":169},[252,111804,111805,111807,111809,111811,111813,111815,111817,111819,111821],{"class":254,"line":255},[252,111806,1173],{"class":262},[252,111808,69306],{"class":51440},[252,111810,101331],{"class":2102},[252,111812,308],{"class":262},[252,111814,101336],{"class":367},[252,111816,101339],{"class":2102},[252,111818,308],{"class":262},[252,111820,103907],{"class":367},[252,111822,101281],{"class":262},[19,111824,111825],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111827,101390],{"id":101389},[244,111829,111831],{"className":30518,"code":111830,"language":30520,"meta":169,"style":169},"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",[22,111832,111833,111839,111849,111853,111857,111865,111870,111875,111879,111883,111888,111893,111897,111902,111907,111912,111916,111921,111926,111931,111936,111940,111944,111948,111952,111956,111961,111966,111970,111974,111978,111982,111986,112001,112010,112022,112045,112052,112056,112060,112070,112084,112098,112105,112109,112113,112127,112139,112151,112164,112179,112196,112200,112204,112216,112228,112236,112244,112248,112264,112269,112282,112295,112310,112314,112349,112381,112385,112389,112398,112402,112418,112428,112439,112455,112471,112487,112503,112507,112525,112545,112564,112568,112572,112584],{"__ignoreMap":169},[252,111834,111835,111837],{"class":254,"line":255},[252,111836,30532],{"class":258},[252,111838,101438],{"class":262},[252,111840,111841,111843,111845,111847],{"class":254,"line":170},[252,111842,30532],{"class":258},[252,111844,31520],{"class":262},[252,111846,31523],{"class":258},[252,111848,31526],{"class":262},[252,111850,111851],{"class":254,"line":1318},[252,111852,2539],{"emptyLinePlaceholder":181},[252,111854,111855],{"class":254,"line":1333},[252,111856,2539],{"emptyLinePlaceholder":181},[252,111858,111859,111861,111863],{"class":254,"line":1339},[252,111860,101451],{"class":311},[252,111862,13704],{"class":258},[252,111864,101456],{"class":367},[252,111866,111867],{"class":254,"line":1353},[252,111868,111869],{"class":367},"\u003Cmujoco model=\"two_link_reacher\">\n",[252,111871,111872],{"class":254,"line":1359},[252,111873,111874],{"class":367},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[252,111876,111877],{"class":254,"line":1450},[252,111878,2539],{"emptyLinePlaceholder":181},[252,111880,111881],{"class":254,"line":1456},[252,111882,101475],{"class":367},[252,111884,111885],{"class":254,"line":1468},[252,111886,111887],{"class":367},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[252,111889,111890],{"class":254,"line":1751},[252,111891,111892],{"class":367},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[252,111894,111895],{"class":254,"line":1756},[252,111896,2539],{"emptyLinePlaceholder":181},[252,111898,111899],{"class":254,"line":1762},[252,111900,111901],{"class":367},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[252,111903,111904],{"class":254,"line":1767},[252,111905,111906],{"class":367},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[252,111908,111909],{"class":254,"line":1781},[252,111910,111911],{"class":367},"      \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",[252,111913,111914],{"class":254,"line":1786},[252,111915,2539],{"emptyLinePlaceholder":181},[252,111917,111918],{"class":254,"line":1792},[252,111919,111920],{"class":367},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[252,111922,111923],{"class":254,"line":1813},[252,111924,111925],{"class":367},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[252,111927,111928],{"class":254,"line":1818},[252,111929,111930],{"class":367},"        \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",[252,111932,111933],{"class":254,"line":1832},[252,111934,111935],{"class":367},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[252,111937,111938],{"class":254,"line":1837},[252,111939,106574],{"class":367},[252,111941,111942],{"class":254,"line":1866},[252,111943,101504],{"class":367},[252,111945,111946],{"class":254,"line":1871},[252,111947,101509],{"class":367},[252,111949,111950],{"class":254,"line":1888},[252,111951,2539],{"emptyLinePlaceholder":181},[252,111953,111954],{"class":254,"line":1893},[252,111955,106591],{"class":367},[252,111957,111958],{"class":254,"line":1898},[252,111959,111960],{"class":367},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[252,111962,111963],{"class":254,"line":1903},[252,111964,111965],{"class":367},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[252,111967,111968],{"class":254,"line":1917},[252,111969,106601],{"class":367},[252,111971,111972],{"class":254,"line":1922},[252,111973,101514],{"class":367},[252,111975,111976],{"class":254,"line":2716},[252,111977,95836],{"class":367},[252,111979,111980],{"class":254,"line":2730},[252,111981,2539],{"emptyLinePlaceholder":181},[252,111983,111984],{"class":254,"line":2738},[252,111985,2539],{"emptyLinePlaceholder":181},[252,111987,111988,111990,111993,111996,111998],{"class":254,"line":2743},[252,111989,32087],{"class":258},[252,111991,111992],{"class":2102}," site_position",[252,111994,111995],{"class":262},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[252,111997,1438],{"class":311},[252,111999,112000],{"class":262},") -> np.ndarray:\n",[252,112002,112003,112005,112007],{"class":254,"line":2749},[252,112004,103536],{"class":262},[252,112006,308],{"class":258},[252,112008,112009],{"class":262}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[252,112011,112012,112014,112016,112018,112020],{"class":254,"line":2755},[252,112013,3240],{"class":258},[252,112015,103585],{"class":262},[252,112017,1173],{"class":258},[252,112019,4232],{"class":311},[252,112021,3878],{"class":262},[252,112023,112024,112026,112028,112030,112032,112035,112037,112039,112041,112043],{"class":254,"line":2760},[252,112025,103568],{"class":258},[252,112027,103571],{"class":311},[252,112029,263],{"class":262},[252,112031,315],{"class":258},[252,112033,112034],{"class":367},"\"site not found: ",[252,112036,1159],{"class":311},[252,112038,79949],{"class":262},[252,112040,1209],{"class":311},[252,112042,514],{"class":367},[252,112044,269],{"class":262},[252,112046,112047,112049],{"class":254,"line":8088},[252,112048,4229],{"class":258},[252,112050,112051],{"class":262}," data.site_xpos[site_id].copy()\n",[252,112053,112054],{"class":254,"line":8112},[252,112055,2539],{"emptyLinePlaceholder":181},[252,112057,112058],{"class":254,"line":8117},[252,112059,2539],{"emptyLinePlaceholder":181},[252,112061,112062,112064,112067],{"class":254,"line":8123},[252,112063,32087],{"class":258},[252,112065,112066],{"class":2102}," get_obs",[252,112068,112069],{"class":262},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[252,112071,112072,112075,112077,112080,112082],{"class":254,"line":8150},[252,112073,112074],{"class":262},"    tip ",[252,112076,308],{"class":258},[252,112078,112079],{"class":262}," site_position(model, data, ",[252,112081,111672],{"class":367},[252,112083,269],{"class":262},[252,112085,112086,112089,112091,112093,112096],{"class":254,"line":8155},[252,112087,112088],{"class":262},"    target ",[252,112090,308],{"class":258},[252,112092,112079],{"class":262},[252,112094,112095],{"class":367},"\"target\"",[252,112097,269],{"class":262},[252,112099,112100,112102],{"class":254,"line":8161},[252,112101,4229],{"class":258},[252,112103,112104],{"class":262}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[252,112106,112107],{"class":254,"line":8173},[252,112108,2539],{"emptyLinePlaceholder":181},[252,112110,112111],{"class":254,"line":8185},[252,112112,2539],{"emptyLinePlaceholder":181},[252,112114,112115,112117,112120,112123,112125],{"class":254,"line":8197},[252,112116,32087],{"class":258},[252,112118,112119],{"class":2102}," reward",[252,112121,112122],{"class":262},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[252,112124,302],{"class":311},[252,112126,3878],{"class":262},[252,112128,112129,112131,112133,112135,112137],{"class":254,"line":9856},[252,112130,112074],{"class":262},[252,112132,308],{"class":258},[252,112134,112079],{"class":262},[252,112136,111672],{"class":367},[252,112138,269],{"class":262},[252,112140,112141,112143,112145,112147,112149],{"class":254,"line":9881},[252,112142,112088],{"class":262},[252,112144,308],{"class":258},[252,112146,112079],{"class":262},[252,112148,112095],{"class":367},[252,112150,269],{"class":262},[252,112152,112153,112156,112158,112160,112162],{"class":254,"line":9904},[252,112154,112155],{"class":262},"    dist ",[252,112157,308],{"class":258},[252,112159,111737],{"class":262},[252,112161,795],{"class":258},[252,112163,111742],{"class":262},[252,112165,112166,112169,112171,112174,112176],{"class":254,"line":9928},[252,112167,112168],{"class":262},"    control_cost ",[252,112170,308],{"class":258},[252,112172,112173],{"class":311}," 0.01",[252,112175,6658],{"class":258},[252,112177,112178],{"class":262}," np.sum(np.square(data.ctrl))\n",[252,112180,112181,112183,112185,112187,112189,112191,112193],{"class":254,"line":9933},[252,112182,4229],{"class":258},[252,112184,109933],{"class":311},[252,112186,263],{"class":262},[252,112188,795],{"class":258},[252,112190,111732],{"class":262},[252,112192,795],{"class":258},[252,112194,112195],{"class":262}," control_cost)\n",[252,112197,112198],{"class":254,"line":9938},[252,112199,2539],{"emptyLinePlaceholder":181},[252,112201,112202],{"class":254,"line":9943},[252,112203,2539],{"emptyLinePlaceholder":181},[252,112205,112206,112208,112210,112212,112214],{"class":254,"line":9952},[252,112207,32087],{"class":258},[252,112209,2112],{"class":2102},[252,112211,101535],{"class":262},[252,112213,95824],{"class":311},[252,112215,3878],{"class":262},[252,112217,112218,112220,112222,112224,112226],{"class":254,"line":9957},[252,112219,101544],{"class":262},[252,112221,308],{"class":258},[252,112223,101549],{"class":262},[252,112225,101451],{"class":311},[252,112227,269],{"class":262},[252,112229,112230,112232,112234],{"class":254,"line":9963},[252,112231,101558],{"class":262},[252,112233,308],{"class":258},[252,112235,101563],{"class":262},[252,112237,112238,112240,112242],{"class":254,"line":9984},[252,112239,110289],{"class":262},[252,112241,308],{"class":258},[252,112243,104897],{"class":311},[252,112245,112246],{"class":254,"line":9990},[252,112247,2539],{"emptyLinePlaceholder":181},[252,112249,112250,112252,112254,112256,112258,112260,112262],{"class":254,"line":10004},[252,112251,3340],{"class":258},[252,112253,31756],{"class":262},[252,112255,26183],{"class":258},[252,112257,32583],{"class":311},[252,112259,263],{"class":262},[252,112261,65214],{"class":311},[252,112263,30926],{"class":262},[252,112265,112266],{"class":254,"line":10010},[252,112267,112268],{"class":262},"        mujoco.mj_forward(model, data)\n",[252,112270,112271,112274,112276,112278,112280],{"class":254,"line":10037},[252,112272,112273],{"class":262},"        tip ",[252,112275,308],{"class":258},[252,112277,112079],{"class":262},[252,112279,111672],{"class":367},[252,112281,269],{"class":262},[252,112283,112284,112287,112289,112291,112293],{"class":254,"line":10046},[252,112285,112286],{"class":262},"        target ",[252,112288,308],{"class":258},[252,112290,112079],{"class":262},[252,112292,112095],{"class":367},[252,112294,269],{"class":262},[252,112296,112297,112300,112302,112305,112307],{"class":254,"line":10052},[252,112298,112299],{"class":262},"        error ",[252,112301,308],{"class":258},[252,112303,112304],{"class":262}," target ",[252,112306,795],{"class":258},[252,112308,112309],{"class":262}," tip\n",[252,112311,112312],{"class":254,"line":10060},[252,112313,2539],{"emptyLinePlaceholder":181},[252,112315,112316,112318,112320,112322,112324,112327,112329,112331,112334,112336,112339,112341,112343,112345,112347],{"class":254,"line":10065},[252,112317,106753],{"class":262},[252,112319,454],{"class":311},[252,112321,4582],{"class":262},[252,112323,308],{"class":258},[252,112325,112326],{"class":262}," np.clip(",[252,112328,105396],{"class":311},[252,112330,6658],{"class":258},[252,112332,112333],{"class":262}," error[",[252,112335,340],{"class":311},[252,112337,112338],{"class":262},"], ",[252,112340,795],{"class":258},[252,112342,102540],{"class":311},[252,112344,12575],{"class":262},[252,112346,102540],{"class":311},[252,112348,269],{"class":262},[252,112350,112351,112353,112355,112357,112359,112361,112363,112365,112367,112369,112371,112373,112375,112377,112379],{"class":254,"line":16744},[252,112352,106753],{"class":262},[252,112354,480],{"class":311},[252,112356,4582],{"class":262},[252,112358,308],{"class":258},[252,112360,112326],{"class":262},[252,112362,105396],{"class":311},[252,112364,6658],{"class":258},[252,112366,112333],{"class":262},[252,112368,454],{"class":311},[252,112370,112338],{"class":262},[252,112372,795],{"class":258},[252,112374,102540],{"class":311},[252,112376,12575],{"class":262},[252,112378,102540],{"class":311},[252,112380,269],{"class":262},[252,112382,112383],{"class":254,"line":16750},[252,112384,2539],{"emptyLinePlaceholder":181},[252,112386,112387],{"class":254,"line":16773},[252,112388,101653],{"class":262},[252,112390,112391,112393,112395],{"class":254,"line":16779},[252,112392,110433],{"class":262},[252,112394,9617],{"class":258},[252,112396,112397],{"class":262}," reward(model, data)\n",[252,112399,112400],{"class":254,"line":16802},[252,112401,2539],{"emptyLinePlaceholder":181},[252,112403,112404,112406,112408,112410,112412,112414,112416],{"class":254,"line":16816},[252,112405,2636],{"class":258},[252,112407,31756],{"class":262},[252,112409,591],{"class":258},[252,112411,5894],{"class":311},[252,112413,101696],{"class":258},[252,112415,4232],{"class":311},[252,112417,3878],{"class":262},[252,112419,112420,112423,112425],{"class":254,"line":16836},[252,112421,112422],{"class":262},"            obs ",[252,112424,308],{"class":258},[252,112426,112427],{"class":262}," get_obs(model, data)\n",[252,112429,112430,112432,112434,112436],{"class":254,"line":16842},[252,112431,34790],{"class":311},[252,112433,263],{"class":262},[252,112435,110467],{"class":367},[252,112437,112438],{"class":262},", step)\n",[252,112440,112441,112443,112445,112448,112451,112453],{"class":254,"line":16853},[252,112442,34790],{"class":311},[252,112444,263],{"class":262},[252,112446,112447],{"class":367},"\"  tip:\"",[252,112449,112450],{"class":262},", np.round(tip, ",[252,112452,334],{"class":311},[252,112454,30637],{"class":262},[252,112456,112457,112459,112461,112464,112467,112469],{"class":254,"line":16876},[252,112458,34790],{"class":311},[252,112460,263],{"class":262},[252,112462,112463],{"class":367},"\"  target:\"",[252,112465,112466],{"class":262},", np.round(target, ",[252,112468,334],{"class":311},[252,112470,30637],{"class":262},[252,112472,112473,112475,112477,112480,112483,112485],{"class":254,"line":16898},[252,112474,34790],{"class":311},[252,112476,263],{"class":262},[252,112478,112479],{"class":367},"\"  ctrl:\"",[252,112481,112482],{"class":262},", np.round(data.ctrl.copy(), ",[252,112484,334],{"class":311},[252,112486,30637],{"class":262},[252,112488,112489,112491,112493,112496,112499,112501],{"class":254,"line":16903},[252,112490,34790],{"class":311},[252,112492,263],{"class":262},[252,112494,112495],{"class":367},"\"  obs_dim:\"",[252,112497,112498],{"class":262},", obs.shape[",[252,112500,454],{"class":311},[252,112502,4796],{"class":262},[252,112504,112505],{"class":254,"line":16909},[252,112506,2539],{"emptyLinePlaceholder":181},[252,112508,112509,112511,112513,112515,112517,112519,112521,112523],{"class":254,"line":16923},[252,112510,31439],{"class":311},[252,112512,263],{"class":262},[252,112514,110512],{"class":367},[252,112516,12575],{"class":262},[252,112518,32158],{"class":311},[252,112520,110519],{"class":262},[252,112522,334],{"class":311},[252,112524,30637],{"class":262},[252,112526,112527,112529,112531,112534,112537,112539,112541,112543],{"class":254,"line":16936},[252,112528,31439],{"class":311},[252,112530,263],{"class":262},[252,112532,112533],{"class":367},"\"final tip:\"",[252,112535,112536],{"class":262},", np.round(site_position(model, data, ",[252,112538,111672],{"class":367},[252,112540,110481],{"class":262},[252,112542,334],{"class":311},[252,112544,30637],{"class":262},[252,112546,112547,112549,112551,112554,112556,112558,112560,112562],{"class":254,"line":16941},[252,112548,31439],{"class":311},[252,112550,263],{"class":262},[252,112552,112553],{"class":367},"\"target:\"",[252,112555,112536],{"class":262},[252,112557,112095],{"class":367},[252,112559,110481],{"class":262},[252,112561,334],{"class":311},[252,112563,30637],{"class":262},[252,112565,112566],{"class":254,"line":16955},[252,112567,2539],{"emptyLinePlaceholder":181},[252,112569,112570],{"class":254,"line":16960},[252,112571,2539],{"emptyLinePlaceholder":181},[252,112573,112574,112576,112578,112580,112582],{"class":254,"line":16966},[252,112575,1670],{"class":258},[252,112577,31360],{"class":311},[252,112579,101696],{"class":258},[252,112581,101699],{"class":367},[252,112583,3878],{"class":262},[252,112585,112586],{"class":254,"line":16971},[252,112587,101706],{"class":262},[19,112589,103706],{},[244,112591,112593],{"className":23961,"code":112592,"language":23963,"meta":169,"style":169},"touch ch7_reacher.py\n",[22,112594,112595],{"__ignoreMap":169},[252,112596,112597,112599],{"class":254,"line":255},[252,112598,101420],{"class":2102},[252,112600,112601],{"class":367}," ch7_reacher.py\n",[19,112603,110580],{},[244,112605,112607],{"className":23961,"code":112606,"language":23963,"meta":169,"style":169},"python ch7_reacher.py\n",[22,112608,112609],{"__ignoreMap":169},[252,112610,112611,112613],{"class":254,"line":255},[252,112612,30520],{"class":2102},[252,112614,112601],{"class":367},[224,112616,101709],{"id":101709},[19,112618,112619],{},"读取 site 坐标：",[244,112621,112623],{"className":30518,"code":112622,"language":30520,"meta":169,"style":169},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[22,112624,112625],{"__ignoreMap":169},[252,112626,112627,112629,112631,112633,112635],{"class":254,"line":255},[252,112628,32087],{"class":258},[252,112630,111992],{"class":2102},[252,112632,111995],{"class":262},[252,112634,1438],{"class":311},[252,112636,112000],{"class":262},[19,112638,112639],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112641,110596],{},[244,112643,112645],{"className":30518,"code":112644,"language":30520,"meta":169,"style":169},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[22,112646,112647],{"__ignoreMap":169},[252,112648,112649,112651],{"class":254,"line":255},[252,112650,17186],{"class":258},[252,112652,112104],{"class":262},[19,112654,112655],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112657,109921],{},[244,112659,112661],{"className":30518,"code":112660,"language":30520,"meta":169,"style":169},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[22,112662,112663,112675,112688],{"__ignoreMap":169},[252,112664,112665,112667,112669,112671,112673],{"class":254,"line":255},[252,112666,111732],{"class":262},[252,112668,308],{"class":258},[252,112670,111737],{"class":262},[252,112672,795],{"class":258},[252,112674,111742],{"class":262},[252,112676,112677,112680,112682,112684,112686],{"class":254,"line":170},[252,112678,112679],{"class":262},"control_cost ",[252,112681,308],{"class":258},[252,112683,112173],{"class":311},[252,112685,6658],{"class":258},[252,112687,112178],{"class":262},[252,112689,112690,112692,112694,112696,112698,112700,112702],{"class":254,"line":1318},[252,112691,17186],{"class":258},[252,112693,109933],{"class":311},[252,112695,263],{"class":262},[252,112697,795],{"class":258},[252,112699,111732],{"class":262},[252,112701,795],{"class":258},[252,112703,112195],{"class":262},[19,112705,112706],{},"奖励由两部分组成：",[207,112708,112709,112714],{},[210,112710,112711,112713],{},[22,112712,111759],{},"：末端离目标越远，奖励越低。",[210,112715,112716,112719],{},[22,112717,112718],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112721,112722],{},"简单控制器：",[244,112724,112726],{"className":30518,"code":112725,"language":30520,"meta":169,"style":169},"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",[22,112727,112728,112741,112773],{"__ignoreMap":169},[252,112729,112730,112733,112735,112737,112739],{"class":254,"line":255},[252,112731,112732],{"class":262},"error ",[252,112734,308],{"class":258},[252,112736,112304],{"class":262},[252,112738,795],{"class":258},[252,112740,112309],{"class":262},[252,112742,112743,112745,112747,112749,112751,112753,112755,112757,112759,112761,112763,112765,112767,112769,112771],{"class":254,"line":170},[252,112744,106007],{"class":262},[252,112746,454],{"class":311},[252,112748,4582],{"class":262},[252,112750,308],{"class":258},[252,112752,112326],{"class":262},[252,112754,105396],{"class":311},[252,112756,6658],{"class":258},[252,112758,112333],{"class":262},[252,112760,340],{"class":311},[252,112762,112338],{"class":262},[252,112764,795],{"class":258},[252,112766,102540],{"class":311},[252,112768,12575],{"class":262},[252,112770,102540],{"class":311},[252,112772,269],{"class":262},[252,112774,112775,112777,112779,112781,112783,112785,112787,112789,112791,112793,112795,112797,112799,112801,112803],{"class":254,"line":1318},[252,112776,106007],{"class":262},[252,112778,480],{"class":311},[252,112780,4582],{"class":262},[252,112782,308],{"class":258},[252,112784,112326],{"class":262},[252,112786,105396],{"class":311},[252,112788,6658],{"class":258},[252,112790,112333],{"class":262},[252,112792,454],{"class":311},[252,112794,112338],{"class":262},[252,112796,795],{"class":258},[252,112798,102540],{"class":311},[252,112800,12575],{"class":262},[252,112802,102540],{"class":311},[252,112804,269],{"class":262},[19,112806,112807],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[224,112809,101845],{"id":101845},[244,112811,112812],{"className":30518,"code":112622,"language":30520,"meta":169,"style":169},[22,112813,112814],{"__ignoreMap":169},[252,112815,112816,112818,112820,112822,112824],{"class":254,"line":255},[252,112817,32087],{"class":258},[252,112819,111992],{"class":2102},[252,112821,111995],{"class":262},[252,112823,1438],{"class":311},[252,112825,112000],{"class":262},[19,112827,112828,112829,112831,112832,84,112834,28525],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[22,112830,79949],{}," 是 site 的名字，比如 ",[22,112833,111672],{},[22,112835,112095],{},[244,112837,112839],{"className":30518,"code":112838,"language":30520,"meta":169,"style":169},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[22,112840,112841],{"__ignoreMap":169},[252,112842,112843,112845,112847],{"class":254,"line":255},[252,112844,103770],{"class":262},[252,112846,308],{"class":258},[252,112848,112009],{"class":262},[19,112850,112851],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[244,112853,112855],{"className":30518,"code":112854,"language":30520,"meta":169,"style":169},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[22,112856,112857,112869],{"__ignoreMap":169},[252,112858,112859,112861,112863,112865,112867],{"class":254,"line":255},[252,112860,1670],{"class":258},[252,112862,103585],{"class":262},[252,112864,1173],{"class":258},[252,112866,4232],{"class":311},[252,112868,3878],{"class":262},[252,112870,112871,112873,112875,112877,112879,112881,112883,112885,112887,112889],{"class":254,"line":170},[252,112872,104031],{"class":258},[252,112874,103571],{"class":311},[252,112876,263],{"class":262},[252,112878,315],{"class":258},[252,112880,112034],{"class":367},[252,112882,1159],{"class":311},[252,112884,79949],{"class":262},[252,112886,1209],{"class":311},[252,112888,514],{"class":367},[252,112890,269],{"class":262},[19,112892,112893,112894,112897,112898,112900],{},"如果 site 没找到，就主动报错。",[22,112895,112896],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[22,112899,79949],{}," 的值放进字符串里。",[244,112902,112904],{"className":30518,"code":112903,"language":30520,"meta":169,"style":169},"return data.site_xpos[site_id].copy()\n",[22,112905,112906],{"__ignoreMap":169},[252,112907,112908,112910],{"class":254,"line":255},[252,112909,17186],{"class":258},[252,112911,112051],{"class":262},[19,112913,112914,112915,112917,112918,112921],{},"返回这个 site 的世界坐标。",[22,112916,103816],{}," 里的每一行都是一个 site 的 ",[22,112919,112920],{},"(x, y, z)"," 坐标。",[244,112923,112925],{"className":30518,"code":112924,"language":30520,"meta":169,"style":169},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[22,112926,112927],{"__ignoreMap":169},[252,112928,112929,112931,112933],{"class":254,"line":255},[252,112930,32087],{"class":258},[252,112932,112066],{"class":2102},[252,112934,112069],{"class":262},[19,112936,112937],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[244,112939,112941],{"className":30518,"code":112940,"language":30520,"meta":169,"style":169},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[22,112942,112943,112955],{"__ignoreMap":169},[252,112944,112945,112947,112949,112951,112953],{"class":254,"line":255},[252,112946,111704],{"class":262},[252,112948,308],{"class":258},[252,112950,112079],{"class":262},[252,112952,111672],{"class":367},[252,112954,269],{"class":262},[252,112956,112957,112959,112961,112963,112965],{"class":254,"line":170},[252,112958,111714],{"class":262},[252,112960,308],{"class":258},[252,112962,112079],{"class":262},[252,112964,112095],{"class":367},[252,112966,269],{"class":262},[19,112968,112969],{},"分别读取末端点和目标点的世界坐标。",[244,112971,112972],{"className":30518,"code":112644,"language":30520,"meta":169,"style":169},[22,112973,112974],{"__ignoreMap":169},[252,112975,112976,112978],{"class":254,"line":255},[252,112977,17186],{"class":258},[252,112979,112104],{"class":262},[19,112981,112982],{},"把四部分拼成一个观测数组：",[244,112984,112987],{"className":112985,"code":112986,"language":5327,"meta":169},[5325],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[22,112988,112986],{"__ignoreMap":169},[244,112990,112992],{"className":30518,"code":112991,"language":30520,"meta":169,"style":169},"dist = np.linalg.norm(tip - target)\n",[22,112993,112994],{"__ignoreMap":169},[252,112995,112996,112998,113000,113002,113004],{"class":254,"line":255},[252,112997,111732],{"class":262},[252,112999,308],{"class":258},[252,113001,111737],{"class":262},[252,113003,795],{"class":258},[252,113005,111742],{"class":262},[19,113007,113008,113009,113012,113013,113016],{},"计算 tip 到 target 的距离。",[22,113010,113011],{},"tip - target"," 得到一个三维向量，",[22,113014,113015],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113018,14773],{},[244,113020,113023],{"className":113021,"code":113022,"language":5327,"meta":169},[5325],"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",[22,113024,113022],{"__ignoreMap":169},[244,113026,113028],{"className":30518,"code":113027,"language":30520,"meta":169,"style":169},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[22,113029,113030],{"__ignoreMap":169},[252,113031,113032,113034,113036,113038,113040],{"class":254,"line":255},[252,113033,112679],{"class":262},[252,113035,308],{"class":258},[252,113037,112173],{"class":311},[252,113039,6658],{"class":258},[252,113041,112178],{"class":262},[19,113043,113044,113045,113048,113049,113052],{},"计算动作惩罚。",[22,113046,113047],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[22,113050,113051],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[244,113054,113056],{"className":30518,"code":113055,"language":30520,"meta":169,"style":169},"return float(-dist - control_cost)\n",[22,113057,113058],{"__ignoreMap":169},[252,113059,113060,113062,113064,113066,113068,113070,113072],{"class":254,"line":255},[252,113061,17186],{"class":258},[252,113063,109933],{"class":311},[252,113065,263],{"class":262},[252,113067,795],{"class":258},[252,113069,111732],{"class":262},[252,113071,795],{"class":258},[252,113073,112195],{"class":262},[19,113075,113076],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[244,113078,113079],{"className":30518,"code":110939,"language":30520,"meta":169,"style":169},[22,113080,113081],{"__ignoreMap":169},[252,113082,113083,113085,113087],{"class":254,"line":255},[252,113084,110946],{"class":262},[252,113086,308],{"class":258},[252,113088,104897],{"class":311},[19,113090,113091],{},"累计奖励变量，记录整个运行过程的总分。",[244,113093,113095],{"className":30518,"code":113094,"language":30520,"meta":169,"style":169},"for step in range(500):\n",[22,113096,113097],{"__ignoreMap":169},[252,113098,113099,113101,113103,113105,113107,113109,113111],{"class":254,"line":255},[252,113100,3164],{"class":258},[252,113102,31756],{"class":262},[252,113104,26183],{"class":258},[252,113106,32583],{"class":311},[252,113108,263],{"class":262},[252,113110,65214],{"class":311},[252,113112,30926],{"class":262},[19,113114,113115],{},"运行 500 个控制步。",[244,113117,113118],{"className":30518,"code":104679,"language":30520,"meta":169,"style":169},[22,113119,113120],{"__ignoreMap":169},[252,113121,113122],{"class":254,"line":255},[252,113123,104679],{"class":262},[19,113125,113126,113127,132,113129,113131],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[22,113128,103367],{},[22,113130,103370],{}," 是当前状态下的坐标。",[244,113133,113135],{"className":30518,"code":113134,"language":30520,"meta":169,"style":169},"error = target - tip\n",[22,113136,113137],{"__ignoreMap":169},[252,113138,113139,113141,113143,113145,113147],{"class":254,"line":255},[252,113140,112732],{"class":262},[252,113142,308],{"class":258},[252,113144,112304],{"class":262},[252,113146,795],{"class":258},[252,113148,112309],{"class":262},[19,113150,113151],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[244,113153,113155],{"className":30518,"code":113154,"language":30520,"meta":169,"style":169},"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",[22,113156,113157,113189],{"__ignoreMap":169},[252,113158,113159,113161,113163,113165,113167,113169,113171,113173,113175,113177,113179,113181,113183,113185,113187],{"class":254,"line":255},[252,113160,106007],{"class":262},[252,113162,454],{"class":311},[252,113164,4582],{"class":262},[252,113166,308],{"class":258},[252,113168,112326],{"class":262},[252,113170,105396],{"class":311},[252,113172,6658],{"class":258},[252,113174,112333],{"class":262},[252,113176,340],{"class":311},[252,113178,112338],{"class":262},[252,113180,795],{"class":258},[252,113182,102540],{"class":311},[252,113184,12575],{"class":262},[252,113186,102540],{"class":311},[252,113188,269],{"class":262},[252,113190,113191,113193,113195,113197,113199,113201,113203,113205,113207,113209,113211,113213,113215,113217,113219],{"class":254,"line":170},[252,113192,106007],{"class":262},[252,113194,480],{"class":311},[252,113196,4582],{"class":262},[252,113198,308],{"class":258},[252,113200,112326],{"class":262},[252,113202,105396],{"class":311},[252,113204,6658],{"class":258},[252,113206,112333],{"class":262},[252,113208,454],{"class":311},[252,113210,112338],{"class":262},[252,113212,795],{"class":258},[252,113214,102540],{"class":311},[252,113216,12575],{"class":262},[252,113218,102540],{"class":311},[252,113220,269],{"class":262},[19,113222,113223,113224,113227],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[22,113225,113226],{},"error -> ctrl -> step"," 的流程。",[244,113229,113230],{"className":30518,"code":104641,"language":30520,"meta":169,"style":169},[22,113231,113232],{"__ignoreMap":169},[252,113233,113234],{"class":254,"line":255},[252,113235,104641],{"class":262},[19,113237,113238],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[244,113240,113242],{"className":30518,"code":113241,"language":30520,"meta":169,"style":169},"obs = get_obs(model, data)\n",[22,113243,113244],{"__ignoreMap":169},[252,113245,113246,113248,113250],{"class":254,"line":255},[252,113247,110990],{"class":262},[252,113249,308],{"class":258},[252,113251,112427],{"class":262},[19,113253,113254,113255,113258],{},"读取最新观测。后面打印 ",[22,113256,113257],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113260,102453],{"id":102452},[19,113262,113263],{},"观测维度为:",[244,113265,113268],{"className":113266,"code":113267,"language":5327,"meta":169},[5325],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[22,113269,113267],{"__ignoreMap":169},[19,113271,113272],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113274,113275],{},"程序每 100 步打印：",[244,113277,113280],{"className":113278,"code":113279,"language":5327,"meta":169},[5325],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[22,113281,113279],{"__ignoreMap":169},[19,113283,113284,113285,113287],{},"如果控制有效，你应该看到最终 ",[22,113286,103367],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113289,102485],{"id":102484},[207,113291,113292,113295,113298,113304,113310,113317,113327],{},[210,113293,113294],{},"修改目标点位置。",[210,113296,113297],{},"重新运行，观察最终 tip 是否变化。",[210,113299,113300,113301,113303],{},"把 gravity 改成 ",[22,113302,102726],{},"，观察控制是否变差。",[210,113305,111317,113306,111321,113308,28525],{},[22,113307,102295],{},[22,113309,340],{},[210,113311,102548,113312,102551,113314,113316],{},[22,113313,110732],{},[22,113315,107443],{},"，观察机械臂是否更难移动。",[210,113318,102548,113319,82669,113321,102551,113323,113326],{},[22,113320,103370],{},[22,113322,104282],{},[22,113324,113325],{},"0.2 0 0.6","，观察 reward 和 final tip。",[210,113328,113329],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113331,102590],{"id":102589},[224,113333,113335],{"id":113334},"site-not-found",[22,113336,113337],{},"site not found",[19,113339,113340,113341,132,113344,28525],{},"检查 XML 中是否有 ",[22,113342,113343],{},"site name=\"tip\"",[22,113345,113346],{},"site name=\"target\"",[224,113348,113349],{"id":113349},"机械臂完全不动",[19,113351,102660],{},[207,113353,113354,113359,113362,113367],{},[210,113355,113356,113358],{},[22,113357,102295],{}," 是否为 2",[210,113360,113361],{},"actuator 是否引用正确 joint",[210,113363,113364,113366],{},[22,113365,101213],{}," 是否被赋值",[210,113368,113369,113370],{},"是否执行了 ",[22,113371,100823],{},[224,113373,113374],{"id":113374},"控制效果不好",[19,113376,113377],{},"正常。本章重点不是控制器最优，而是任务结构:",[244,113379,113382],{"className":113380,"code":113381,"language":5327,"meta":169},[5325],"obs → action → mj_step → reward → next_obs\n",[22,113383,113381],{"__ignoreMap":169},[224,113385,113387],{"id":113386},"tip-坐标不变化","tip 坐标不变化",[19,113389,102712],{},[207,113391,113392,113397,113405,113414],{},[210,113393,113394,113395,28525],{},"是否每步调用了 ",[22,113396,100823],{},[210,113398,113399,113400,132,113402,28525],{},"是否写入了 ",[22,113401,106262],{},[22,113403,113404],{},"data.ctrl[1]",[210,113406,113407,113408,475,113411,28525],{},"actuator 是否正确引用 ",[22,113409,113410],{},"joint1",[22,113412,113413],{},"joint2",[210,113415,113416],{},"控制输入是否太小。",[224,113418,113419],{"id":113419},"目标点不会动",[19,113421,113422],{},"本章的 target 是固定 site：",[244,113424,113426],{"className":53207,"code":113425,"language":53209,"meta":169,"style":169},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[22,113427,113428],{"__ignoreMap":169},[252,113429,113430,113432,113434,113436,113438,113440,113442,113444,113447],{"class":254,"line":255},[252,113431,1173],{"class":262},[252,113433,103346],{"class":51440},[252,113435,15060],{"class":2102},[252,113437,308],{"class":262},[252,113439,112095],{"class":367},[252,113441,101243],{"class":2102},[252,113443,308],{"class":262},[252,113445,113446],{"class":367},"\"0.5 0 0.4\"",[252,113448,113449],{"class":262}," ...\u002F>\n",[19,113451,113452,113453,113455],{},"它直接挂在 ",[22,113454,101978],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[224,113457,113458],{"id":113458},"机械臂不像真实机械臂",[19,113460,113461],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113463,102744],{"id":102743},[19,113465,113466],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113468,113469],{},"核心公式：",[244,113471,113474],{"className":113472,"code":113473,"language":5327,"meta":169},[5325],"distance = ||tip - target||\nreward = -distance - action_cost\n",[22,113475,113473],{"__ignoreMap":169},[19,113477,113478],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5266,113480,113481],{},"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":169,"searchDepth":170,"depth":170,"links":113483},[113484,113485,113486,113491,113495,113496,113497,113505],{"id":100784,"depth":170,"text":100785},{"id":100907,"depth":170,"text":100908},{"id":101181,"depth":170,"text":101182,"children":113487},[113488,113489,113490],{"id":111687,"depth":1318,"text":111688},{"id":111763,"depth":1318,"text":111763},{"id":111793,"depth":1318,"text":111794},{"id":101389,"depth":170,"text":101390,"children":113492},[113493,113494],{"id":101709,"depth":1318,"text":101709},{"id":101845,"depth":1318,"text":101845},{"id":102452,"depth":170,"text":102453},{"id":102484,"depth":170,"text":102485},{"id":102589,"depth":170,"text":102590,"children":113498},[113499,113500,113501,113502,113503,113504],{"id":113334,"depth":1318,"text":113337},{"id":113349,"depth":1318,"text":113349},{"id":113374,"depth":1318,"text":113374},{"id":113386,"depth":1318,"text":113387},{"id":113419,"depth":1318,"text":113419},{"id":113458,"depth":1318,"text":113458},{"id":102743,"depth":170,"text":102744},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111491,"description":169},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113512,"title":113513,"body":113514,"description":169,"extension":179,"meta":116976,"navigation":181,"path":116977,"seo":116978,"stem":116979,"__hash__":116980},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113515,"toc":116947},[113516,113519,113521,113524,113527,113552,113555,113561,113564,113570,113572,113574,113598,113600,113618,113620,113663,113665,113692,113694,113697,113749,113752,113758,113767,113770,113808,113811,113850,113853,113861,113868,113871,113877,113879,113933,113940,113985,113988,113992,114008,114018,114020,115281,115283,115295,115297,115308,115310,115313,115334,115337,115340,115373,115379,115382,115415,115418,115421,115462,115467,115481,115484,115497,115502,115525,115527,115542,115552,115567,115574,115594,115609,115627,115630,115647,115655,115671,115677,115709,115722,115754,115764,115799,115813,115859,115873,115915,115926,115939,115945,115978,115981,116008,116018,116058,116068,116085,116092,116110,116113,116154,116167,116182,116185,116208,116211,116223,116226,116245,116250,116271,116274,116289,116292,116326,116338,116353,116356,116381,116384,116403,116406,116438,116441,116465,116471,116501,116508,116521,116524,116526,116528,116534,116537,116540,116552,116555,116557,116611,116613,116617,116623,116632,116635,116642,116644,116667,116670,116674,116676,116694,116700,116702,116735,116738,116744,116748,116751,116771,116776,116780,116787,116807,116812,116816,116819,116839,116842,116928,116932,116935,116941,116944],[10,113517,113513],{"id":113518},"_8gymnasium-风格强化学习接口基础",[14,113520,100785],{"id":100784},[19,113522,113523],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113525,113526],{},"你将实现:",[244,113528,113530],{"className":30518,"code":113529,"language":30520,"meta":169,"style":169},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[22,113531,113532,113542],{"__ignoreMap":169},[252,113533,113534,113537,113539],{"class":254,"line":255},[252,113535,113536],{"class":262},"obs, info ",[252,113538,308],{"class":258},[252,113540,113541],{"class":262}," env.reset()\n",[252,113543,113544,113547,113549],{"class":254,"line":170},[252,113545,113546],{"class":262},"obs, reward, terminated, truncated, info ",[252,113548,308],{"class":258},[252,113550,113551],{"class":262}," env.step(action)\n",[19,113553,113554],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113556,113557,113558,113560],{},"前面章节的代码都是“脚本式”的：在 ",[22,113559,102432],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113562,113563],{},"可以先记住 Gymnasium 环境的核心交互：",[244,113565,113568],{"className":113566,"code":113567,"language":5327,"meta":169},[5325],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[22,113569,113567],{"__ignoreMap":169},[14,113571,100908],{"id":100907},[19,113573,100911],{},[244,113575,113576],{"className":23961,"code":104524,"language":23963,"meta":169,"style":169},[22,113577,113578],{"__ignoreMap":169},[252,113579,113580,113582,113584,113586,113588,113590,113592,113594,113596],{"class":254,"line":255},[252,113581,24716],{"class":2102},[252,113583,26455],{"class":367},[252,113585,23973],{"class":367},[252,113587,26540],{"class":311},[252,113589,104539],{"class":367},[252,113591,100936],{"class":367},[252,113593,102638],{"class":367},[252,113595,100952],{"class":367},[252,113597,104548],{"class":367},[19,113599,102955],{},[244,113601,113603],{"className":23961,"code":113602,"language":23963,"meta":169,"style":169},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[22,113604,113605],{"__ignoreMap":169},[252,113606,113607,113609,113611,113613,113615],{"class":254,"line":255},[252,113608,23970],{"class":2102},[252,113610,23973],{"class":367},[252,113612,101068],{"class":367},[252,113614,107847],{"class":367},[252,113616,113617],{"class":367}," gymnasium\n",[19,113619,102972],{},[244,113621,113623],{"className":23961,"code":113622,"language":23963,"meta":169,"style":169},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[22,113624,113625,113642,113651],{"__ignoreMap":169},[252,113626,113627,113629,113631,113633,113636,113638,113640],{"class":254,"line":255},[252,113628,30470],{"class":2102},[252,113630,29316],{"class":367},[252,113632,25255],{"class":311},[252,113634,113635],{"class":367}," mujoco-gym-api",[252,113637,101113],{"class":367},[252,113639,101116],{"class":311},[252,113641,101119],{"class":311},[252,113643,113644,113646,113648],{"class":254,"line":170},[252,113645,30470],{"class":2102},[252,113647,101126],{"class":367},[252,113649,113650],{"class":367}," mujoco-gym-api\n",[252,113652,113653,113655,113657,113659,113661],{"class":254,"line":1318},[252,113654,23970],{"class":2102},[252,113656,23973],{"class":367},[252,113658,101068],{"class":367},[252,113660,107847],{"class":367},[252,113662,113617],{"class":367},[19,113664,101142],{},[207,113666,113667,113677,113680,113686],{},[210,113668,113669,113670,113673,113674,28525],{},"本章使用 ",[22,113671,113672],{},"gymnasium","，不是旧版 ",[22,113675,113676],{},"gym",[210,113678,113679],{},"Gymnasium API 与旧 Gym API 有差异。",[210,113681,113682,113683,28525],{},"旧 Gym 常见返回值是 4 个: ",[22,113684,113685],{},"obs, reward, done, info",[210,113687,113688,113689,28525],{},"Gymnasium 返回值是 5 个: ",[22,113690,113691],{},"obs, reward, terminated, truncated, info",[14,113693,101182],{"id":101181},[19,113695,113696],{},"强化学习环境接口包含:",[400,113698,113699,113708],{},[403,113700,113701],{},[406,113702,113703,113706],{},[409,113704,113705],{"align":23875},"方法",[409,113707,102832],{"align":23875},[447,113709,113710,113720,113730,113740],{},[406,113711,113712,113717],{},[452,113713,113714],{"align":23875},[22,113715,113716],{},"reset()",[452,113718,113719],{"align":23875},"重置环境",[406,113721,113722,113727],{},[452,113723,113724],{"align":23875},[22,113725,113726],{},"step(action)",[452,113728,113729],{"align":23875},"执行动作",[406,113731,113732,113737],{},[452,113733,113734],{"align":23875},[22,113735,113736],{},"observation_space",[452,113738,113739],{"align":23875},"观测空间",[406,113741,113742,113747],{},[452,113743,113744],{"align":23875},[22,113745,113746],{},"action_space",[452,113748,23793],{"align":23875},[19,113750,113751],{},"一个最小环境需要完成:",[244,113753,113756],{"className":113754,"code":113755,"language":5327,"meta":169},[5325],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[22,113757,113755],{"__ignoreMap":169},[224,113759,113761,132,113764,104774],{"id":113760},"terminated-和-truncated-的区别",[22,113762,113763],{},"terminated",[22,113765,113766],{},"truncated",[19,113768,113769],{},"Gymnasium 把“结束”拆成两个概念：",[400,113771,113772,113782],{},[403,113773,113774],{},[406,113775,113776,113778,113780],{},[409,113777,104710],{"align":23875},[409,113779,100838],{"align":23875},[409,113781,21326],{"align":23875},[447,113783,113784,113796],{},[406,113785,113786,113790,113793],{},[452,113787,113788],{"align":23875},[22,113789,113763],{},[452,113791,113792],{"align":23875},"任务自然结束",[452,113794,113795],{"align":23875},"机械臂到达目标、机器人摔倒",[406,113797,113798,113802,113805],{},[452,113799,113800],{"align":23875},[22,113801,113766],{},[452,113803,113804],{"align":23875},"因外部限制截断",[452,113806,113807],{"align":23875},"达到最大步数、时间限制",[19,113809,113810],{},"本章中：",[244,113812,113814],{"className":30518,"code":113813,"language":30520,"meta":169,"style":169},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[22,113815,113816,113831],{"__ignoreMap":169},[252,113817,113818,113821,113823,113826,113828],{"class":254,"line":255},[252,113819,113820],{"class":262},"terminated ",[252,113822,308],{"class":258},[252,113824,113825],{"class":262}," dist ",[252,113827,1173],{"class":258},[252,113829,113830],{"class":311}," 0.05\n",[252,113832,113833,113836,113838,113840,113843,113845,113847],{"class":254,"line":170},[252,113834,113835],{"class":262},"truncated ",[252,113837,308],{"class":258},[252,113839,39013],{"class":311},[252,113841,113842],{"class":262},".steps ",[252,113844,1849],{"class":258},[252,113846,39013],{"class":311},[252,113848,113849],{"class":262},".max_steps\n",[19,113851,113852],{},"也就是：",[207,113854,113855,113858],{},[210,113856,113857],{},"末端距离目标小于 0.05，任务成功结束。",[210,113859,113860],{},"步数超过上限，episode 被截断。",[224,113862,113864,132,113866],{"id":113863},"observation_space-和-action_space",[22,113865,113736],{},[22,113867,113746],{},[19,113869,113870],{},"这两个对象告诉算法：",[244,113872,113875],{"className":113873,"code":113874,"language":5327,"meta":169},[5325],"观测长什么样\n动作允许多大\n",[22,113876,113874],{"__ignoreMap":169},[19,113878,14773],{},[244,113880,113882],{"className":30518,"code":113881,"language":30520,"meta":169,"style":169},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[22,113883,113884],{"__ignoreMap":169},[252,113885,113886,113888,113891,113893,113896,113899,113902,113904,113906,113909,113911,113913,113915,113917,113919,113921,113923,113926,113928,113930],{"class":254,"line":255},[252,113887,30963],{"class":311},[252,113889,113890],{"class":262},".action_space ",[252,113892,308],{"class":258},[252,113894,113895],{"class":262}," spaces.Box(",[252,113897,113898],{"class":5356},"low",[252,113900,113901],{"class":258},"=-",[252,113903,102540],{"class":311},[252,113905,12575],{"class":262},[252,113907,113908],{"class":5356},"high",[252,113910,308],{"class":258},[252,113912,102540],{"class":311},[252,113914,12575],{"class":262},[252,113916,96101],{"class":5356},[252,113918,308],{"class":258},[252,113920,263],{"class":262},[252,113922,340],{"class":311},[252,113924,113925],{"class":262},",), ",[252,113927,93638],{"class":5356},[252,113929,308],{"class":258},[252,113931,113932],{"class":262},"np.float32)\n",[19,113934,113935,113936,113939],{},"表示动作是 2 维数组，每个值都在 ",[22,113937,113938],{},"[-1, 1]"," 范围内。",[244,113941,113943],{"className":30518,"code":113942,"language":30520,"meta":169,"style":169},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[22,113944,113945],{"__ignoreMap":169},[252,113946,113947,113949,113952,113954,113956,113958,113960,113963,113965,113967,113969,113971,113973,113975,113977,113979,113981,113983],{"class":254,"line":255},[252,113948,30963],{"class":311},[252,113950,113951],{"class":262},".observation_space ",[252,113953,308],{"class":258},[252,113955,113895],{"class":262},[252,113957,113898],{"class":5356},[252,113959,113901],{"class":258},[252,113961,113962],{"class":262},"np.inf, ",[252,113964,113908],{"class":5356},[252,113966,308],{"class":258},[252,113968,113962],{"class":262},[252,113970,96101],{"class":5356},[252,113972,308],{"class":258},[252,113974,263],{"class":262},[252,113976,709],{"class":311},[252,113978,113925],{"class":262},[252,113980,93638],{"class":5356},[252,113982,308],{"class":258},[252,113984,113932],{"class":262},[19,113986,113987],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[224,113989,113991],{"id":113990},"frame_skip-是什么","frame_skip 是什么",[244,113993,113995],{"className":30518,"code":113994,"language":30520,"meta":169,"style":169},"self.frame_skip = 5\n",[22,113996,113997],{"__ignoreMap":169},[252,113998,113999,114001,114004,114006],{"class":254,"line":255},[252,114000,30963],{"class":311},[252,114002,114003],{"class":262},".frame_skip ",[252,114005,308],{"class":258},[252,114007,54567],{"class":311},[19,114009,114010,114011,114014,114015,114017],{},"表示外部调用一次 ",[22,114012,114013],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[22,114016,101352],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114019,101390],{"id":101389},[244,114021,114023],{"className":30518,"code":114022,"language":30520,"meta":169,"style":169},"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",[22,114024,114025,114037,114043,114053,114064,114068,114072,114080,114085,114089,114093,114097,114101,114105,114109,114113,114118,114122,114126,114130,114135,114139,114143,114147,114151,114155,114159,114163,114167,114171,114175,114179,114183,114187,114205,114220,114224,114237,114247,114262,114279,114283,114304,114323,114348,114362,114366,114376,114388,114398,114402,114444,114482,114486,114496,114512,114527,114546,114553,114557,114570,114585,114600,114613,114632,114648,114652,114693,114708,114723,114727,114766,114777,114790,114794,114804,114813,114817,114827,114842,114860,114864,114875,114892,114905,114909,114919,114923,114934,114945,114949,114963,114977,114993,114997,115010,115027,115042,115049,115053,115057,115069,115079,115097,115109,115121,115125,115133,115149,115158,115167,115175,115217,115230,115235,115239,115257,115261,115265,115277],{"__ignoreMap":169},[252,114026,114027,114029,114032,114034],{"class":254,"line":255},[252,114028,30532],{"class":258},[252,114030,114031],{"class":262}," gymnasium ",[252,114033,31523],{"class":258},[252,114035,114036],{"class":262}," gym\n",[252,114038,114039,114041],{"class":254,"line":170},[252,114040,30532],{"class":258},[252,114042,101438],{"class":262},[252,114044,114045,114047,114049,114051],{"class":254,"line":1318},[252,114046,30532],{"class":258},[252,114048,31520],{"class":262},[252,114050,31523],{"class":258},[252,114052,31526],{"class":262},[252,114054,114055,114057,114059,114061],{"class":254,"line":1333},[252,114056,30877],{"class":258},[252,114058,114031],{"class":262},[252,114060,30532],{"class":258},[252,114062,114063],{"class":262}," spaces\n",[252,114065,114066],{"class":254,"line":1339},[252,114067,2539],{"emptyLinePlaceholder":181},[252,114069,114070],{"class":254,"line":1353},[252,114071,2539],{"emptyLinePlaceholder":181},[252,114073,114074,114076,114078],{"class":254,"line":1359},[252,114075,101451],{"class":311},[252,114077,13704],{"class":258},[252,114079,101456],{"class":367},[252,114081,114082],{"class":254,"line":1450},[252,114083,114084],{"class":367},"\u003Cmujoco model=\"gym_reacher\">\n",[252,114086,114087],{"class":254,"line":1456},[252,114088,111874],{"class":367},[252,114090,114091],{"class":254,"line":1468},[252,114092,2539],{"emptyLinePlaceholder":181},[252,114094,114095],{"class":254,"line":1751},[252,114096,101475],{"class":367},[252,114098,114099],{"class":254,"line":1756},[252,114100,111892],{"class":367},[252,114102,114103],{"class":254,"line":1762},[252,114104,2539],{"emptyLinePlaceholder":181},[252,114106,114107],{"class":254,"line":1767},[252,114108,111901],{"class":367},[252,114110,114111],{"class":254,"line":1781},[252,114112,111906],{"class":367},[252,114114,114115],{"class":254,"line":1786},[252,114116,114117],{"class":367},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[252,114119,114120],{"class":254,"line":1792},[252,114121,2539],{"emptyLinePlaceholder":181},[252,114123,114124],{"class":254,"line":1813},[252,114125,111920],{"class":367},[252,114127,114128],{"class":254,"line":1818},[252,114129,111925],{"class":367},[252,114131,114132],{"class":254,"line":1832},[252,114133,114134],{"class":367},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[252,114136,114137],{"class":254,"line":1837},[252,114138,111935],{"class":367},[252,114140,114141],{"class":254,"line":1866},[252,114142,106574],{"class":367},[252,114144,114145],{"class":254,"line":1871},[252,114146,101504],{"class":367},[252,114148,114149],{"class":254,"line":1888},[252,114150,101509],{"class":367},[252,114152,114153],{"class":254,"line":1893},[252,114154,2539],{"emptyLinePlaceholder":181},[252,114156,114157],{"class":254,"line":1898},[252,114158,106591],{"class":367},[252,114160,114161],{"class":254,"line":1903},[252,114162,111960],{"class":367},[252,114164,114165],{"class":254,"line":1917},[252,114166,111965],{"class":367},[252,114168,114169],{"class":254,"line":1922},[252,114170,106601],{"class":367},[252,114172,114173],{"class":254,"line":2716},[252,114174,101514],{"class":367},[252,114176,114177],{"class":254,"line":2730},[252,114178,95836],{"class":367},[252,114180,114181],{"class":254,"line":2738},[252,114182,2539],{"emptyLinePlaceholder":181},[252,114184,114185],{"class":254,"line":2743},[252,114186,2539],{"emptyLinePlaceholder":181},[252,114188,114189,114191,114194,114196,114198,114200,114203],{"class":254,"line":2749},[252,114190,14834],{"class":258},[252,114192,114193],{"class":2102}," ReacherEnv",[252,114195,263],{"class":262},[252,114197,113676],{"class":2102},[252,114199,821],{"class":262},[252,114201,114202],{"class":2102},"Env",[252,114204,30926],{"class":262},[252,114206,114207,114210,114212,114214,114217],{"class":254,"line":2755},[252,114208,114209],{"class":262},"    metadata ",[252,114211,308],{"class":258},[252,114213,4587],{"class":262},[252,114215,114216],{"class":367},"\"render_modes\"",[252,114218,114219],{"class":262},": []}\n",[252,114221,114222],{"class":254,"line":2760},[252,114223,2539],{"emptyLinePlaceholder":181},[252,114225,114226,114228,114230,114233,114235],{"class":254,"line":8088},[252,114227,30941],{"class":258},[252,114229,30944],{"class":311},[252,114231,114232],{"class":262},"(self) -> ",[252,114234,95824],{"class":311},[252,114236,3878],{"class":262},[252,114238,114239,114241,114243,114245],{"class":254,"line":8112},[252,114240,30957],{"class":311},[252,114242,17401],{"class":262},[252,114244,30969],{"class":311},[252,114246,2115],{"class":262},[252,114248,114249,114251,114254,114256,114258,114260],{"class":254,"line":8117},[252,114250,30985],{"class":311},[252,114252,114253],{"class":262},".model ",[252,114255,308],{"class":258},[252,114257,101549],{"class":262},[252,114259,101451],{"class":311},[252,114261,269],{"class":262},[252,114263,114264,114266,114269,114271,114274,114276],{"class":254,"line":8123},[252,114265,30985],{"class":311},[252,114267,114268],{"class":262},".data ",[252,114270,308],{"class":258},[252,114272,114273],{"class":262}," mujoco.MjData(",[252,114275,30963],{"class":311},[252,114277,114278],{"class":262},".model)\n",[252,114280,114281],{"class":254,"line":8150},[252,114282,2539],{"emptyLinePlaceholder":181},[252,114284,114285,114287,114290,114292,114295,114297,114300,114302],{"class":254,"line":8155},[252,114286,30985],{"class":311},[252,114288,114289],{"class":262},".tip_site_id ",[252,114291,308],{"class":258},[252,114293,114294],{"class":262}," mujoco.mj_name2id(",[252,114296,30963],{"class":311},[252,114298,114299],{"class":262},".model, mujoco.mjtObj.mjOBJ_SITE, ",[252,114301,111672],{"class":367},[252,114303,269],{"class":262},[252,114305,114306,114308,114311,114313,114315,114317,114319,114321],{"class":254,"line":8161},[252,114307,30985],{"class":311},[252,114309,114310],{"class":262},".target_site_id ",[252,114312,308],{"class":258},[252,114314,114294],{"class":262},[252,114316,30963],{"class":311},[252,114318,114299],{"class":262},[252,114320,112095],{"class":367},[252,114322,269],{"class":262},[252,114324,114325,114327,114329,114331,114333,114335,114338,114340,114342,114344,114346],{"class":254,"line":8173},[252,114326,2636],{"class":258},[252,114328,39013],{"class":311},[252,114330,114289],{"class":262},[252,114332,1173],{"class":258},[252,114334,4232],{"class":311},[252,114336,114337],{"class":258}," or",[252,114339,39013],{"class":311},[252,114341,114310],{"class":262},[252,114343,1173],{"class":258},[252,114345,4232],{"class":311},[252,114347,3878],{"class":262},[252,114349,114350,114353,114355,114357,114360],{"class":254,"line":8185},[252,114351,114352],{"class":258},"            raise",[252,114354,103571],{"class":311},[252,114356,263],{"class":262},[252,114358,114359],{"class":367},"\"required sites not found\"",[252,114361,269],{"class":262},[252,114363,114364],{"class":254,"line":8197},[252,114365,2539],{"emptyLinePlaceholder":181},[252,114367,114368,114370,114372,114374],{"class":254,"line":9856},[252,114369,30985],{"class":311},[252,114371,114003],{"class":262},[252,114373,308],{"class":258},[252,114375,54567],{"class":311},[252,114377,114378,114380,114383,114385],{"class":254,"line":9881},[252,114379,30985],{"class":311},[252,114381,114382],{"class":262},".max_steps ",[252,114384,308],{"class":258},[252,114386,114387],{"class":311}," 200\n",[252,114389,114390,114392,114394,114396],{"class":254,"line":9904},[252,114391,30985],{"class":311},[252,114393,113842],{"class":262},[252,114395,308],{"class":258},[252,114397,47473],{"class":311},[252,114399,114400],{"class":254,"line":9928},[252,114401,2539],{"emptyLinePlaceholder":181},[252,114403,114404,114406,114408,114410,114412,114414,114416,114418,114420,114422,114424,114426,114428,114430,114432,114434,114436,114438,114440,114442],{"class":254,"line":9933},[252,114405,30985],{"class":311},[252,114407,113890],{"class":262},[252,114409,308],{"class":258},[252,114411,113895],{"class":262},[252,114413,113898],{"class":5356},[252,114415,113901],{"class":258},[252,114417,102540],{"class":311},[252,114419,12575],{"class":262},[252,114421,113908],{"class":5356},[252,114423,308],{"class":258},[252,114425,102540],{"class":311},[252,114427,12575],{"class":262},[252,114429,96101],{"class":5356},[252,114431,308],{"class":258},[252,114433,263],{"class":262},[252,114435,340],{"class":311},[252,114437,113925],{"class":262},[252,114439,93638],{"class":5356},[252,114441,308],{"class":258},[252,114443,113932],{"class":262},[252,114445,114446,114448,114450,114452,114454,114456,114458,114460,114462,114464,114466,114468,114470,114472,114474,114476,114478,114480],{"class":254,"line":9938},[252,114447,30985],{"class":311},[252,114449,113951],{"class":262},[252,114451,308],{"class":258},[252,114453,113895],{"class":262},[252,114455,113898],{"class":5356},[252,114457,113901],{"class":258},[252,114459,113962],{"class":262},[252,114461,113908],{"class":5356},[252,114463,308],{"class":258},[252,114465,113962],{"class":262},[252,114467,96101],{"class":5356},[252,114469,308],{"class":258},[252,114471,263],{"class":262},[252,114473,709],{"class":311},[252,114475,113925],{"class":262},[252,114477,93638],{"class":5356},[252,114479,308],{"class":258},[252,114481,113932],{"class":262},[252,114483,114484],{"class":254,"line":9943},[252,114485,2539],{"emptyLinePlaceholder":181},[252,114487,114488,114490,114493],{"class":254,"line":9952},[252,114489,30941],{"class":258},[252,114491,114492],{"class":2102}," _get_obs",[252,114494,114495],{"class":262},"(self) -> np.ndarray:\n",[252,114497,114498,114500,114502,114504,114507,114509],{"class":254,"line":9957},[252,114499,112273],{"class":262},[252,114501,308],{"class":258},[252,114503,39013],{"class":311},[252,114505,114506],{"class":262},".data.site_xpos[",[252,114508,30963],{"class":311},[252,114510,114511],{"class":262},".tip_site_id].copy()\n",[252,114513,114514,114516,114518,114520,114522,114524],{"class":254,"line":9963},[252,114515,112286],{"class":262},[252,114517,308],{"class":258},[252,114519,39013],{"class":311},[252,114521,114506],{"class":262},[252,114523,30963],{"class":311},[252,114525,114526],{"class":262},".target_site_id].copy()\n",[252,114528,114529,114531,114533,114536,114538,114541,114543],{"class":254,"line":9984},[252,114530,110318],{"class":262},[252,114532,308],{"class":258},[252,114534,114535],{"class":262}," np.concatenate([",[252,114537,30963],{"class":311},[252,114539,114540],{"class":262},".data.qpos.copy(), ",[252,114542,30963],{"class":311},[252,114544,114545],{"class":262},".data.qvel.copy(), tip, target])\n",[252,114547,114548,114550],{"class":254,"line":9990},[252,114549,14892],{"class":258},[252,114551,114552],{"class":262}," obs.astype(np.float32)\n",[252,114554,114555],{"class":254,"line":10004},[252,114556,2539],{"emptyLinePlaceholder":181},[252,114558,114559,114561,114564,114566,114568],{"class":254,"line":10010},[252,114560,30941],{"class":258},[252,114562,114563],{"class":2102}," _get_reward",[252,114565,114232],{"class":262},[252,114567,302],{"class":311},[252,114569,3878],{"class":262},[252,114571,114572,114574,114576,114578,114580,114582],{"class":254,"line":10037},[252,114573,112273],{"class":262},[252,114575,308],{"class":258},[252,114577,39013],{"class":311},[252,114579,114506],{"class":262},[252,114581,30963],{"class":311},[252,114583,114584],{"class":262},".tip_site_id]\n",[252,114586,114587,114589,114591,114593,114595,114597],{"class":254,"line":10046},[252,114588,112286],{"class":262},[252,114590,308],{"class":258},[252,114592,39013],{"class":311},[252,114594,114506],{"class":262},[252,114596,30963],{"class":311},[252,114598,114599],{"class":262},".target_site_id]\n",[252,114601,114602,114605,114607,114609,114611],{"class":254,"line":10052},[252,114603,114604],{"class":262},"        dist ",[252,114606,308],{"class":258},[252,114608,111737],{"class":262},[252,114610,795],{"class":258},[252,114612,111742],{"class":262},[252,114614,114615,114618,114620,114622,114624,114627,114629],{"class":254,"line":10060},[252,114616,114617],{"class":262},"        control_cost ",[252,114619,308],{"class":258},[252,114621,112173],{"class":311},[252,114623,6658],{"class":258},[252,114625,114626],{"class":262}," np.sum(np.square(",[252,114628,30963],{"class":311},[252,114630,114631],{"class":262},".data.ctrl))\n",[252,114633,114634,114636,114638,114640,114642,114644,114646],{"class":254,"line":10065},[252,114635,14892],{"class":258},[252,114637,109933],{"class":311},[252,114639,263],{"class":262},[252,114641,795],{"class":258},[252,114643,111732],{"class":262},[252,114645,795],{"class":258},[252,114647,112195],{"class":262},[252,114649,114650],{"class":254,"line":16744},[252,114651,2539],{"emptyLinePlaceholder":181},[252,114653,114654,114656,114659,114662,114664,114667,114669,114671,114673,114675,114677,114680,114683,114685,114687,114689,114691],{"class":254,"line":16750},[252,114655,30941],{"class":258},[252,114657,114658],{"class":2102}," reset",[252,114660,114661],{"class":262},"(self, ",[252,114663,718],{"class":258},[252,114665,114666],{"class":262},", seed: ",[252,114668,266],{"class":311},[252,114670,25249],{"class":258},[252,114672,39073],{"class":311},[252,114674,13704],{"class":258},[252,114676,39073],{"class":311},[252,114678,114679],{"class":262},", options: ",[252,114681,114682],{"class":311},"dict",[252,114684,25249],{"class":258},[252,114686,39073],{"class":311},[252,114688,13704],{"class":258},[252,114690,39073],{"class":311},[252,114692,30926],{"class":262},[252,114694,114695,114697,114700,114703,114705],{"class":254,"line":16773},[252,114696,30957],{"class":311},[252,114698,114699],{"class":262},"().reset(",[252,114701,114702],{"class":5356},"seed",[252,114704,308],{"class":258},[252,114706,114707],{"class":262},"seed)\n",[252,114709,114710,114713,114715,114718,114720],{"class":254,"line":16779},[252,114711,114712],{"class":262},"        mujoco.mj_resetData(",[252,114714,30963],{"class":311},[252,114716,114717],{"class":262},".model, ",[252,114719,30963],{"class":311},[252,114721,114722],{"class":262},".data)\n",[252,114724,114725],{"class":254,"line":16802},[252,114726,2539],{"emptyLinePlaceholder":181},[252,114728,114729,114731,114734,114736,114738,114741,114743,114745,114747,114749,114751,114753,114755,114757,114759,114761,114763],{"class":254,"line":16816},[252,114730,30985],{"class":311},[252,114732,114733],{"class":262},".data.qpos[:] ",[252,114735,308],{"class":258},[252,114737,39013],{"class":311},[252,114739,114740],{"class":262},".np_random.uniform(",[252,114742,113898],{"class":5356},[252,114744,113901],{"class":258},[252,114746,86348],{"class":311},[252,114748,12575],{"class":262},[252,114750,113908],{"class":5356},[252,114752,308],{"class":258},[252,114754,86348],{"class":311},[252,114756,12575],{"class":262},[252,114758,31636],{"class":5356},[252,114760,308],{"class":258},[252,114762,30963],{"class":311},[252,114764,114765],{"class":262},".model.nq)\n",[252,114767,114768,114770,114773,114775],{"class":254,"line":16836},[252,114769,30985],{"class":311},[252,114771,114772],{"class":262},".data.qvel[:] ",[252,114774,308],{"class":258},[252,114776,104897],{"class":311},[252,114778,114779,114782,114784,114786,114788],{"class":254,"line":16842},[252,114780,114781],{"class":262},"        mujoco.mj_forward(",[252,114783,30963],{"class":311},[252,114785,114717],{"class":262},[252,114787,30963],{"class":311},[252,114789,114722],{"class":262},[252,114791,114792],{"class":254,"line":16853},[252,114793,2539],{"emptyLinePlaceholder":181},[252,114795,114796,114798,114800,114802],{"class":254,"line":16876},[252,114797,30985],{"class":311},[252,114799,113842],{"class":262},[252,114801,308],{"class":258},[252,114803,47473],{"class":311},[252,114805,114806,114808,114810],{"class":254,"line":16898},[252,114807,14892],{"class":258},[252,114809,39013],{"class":311},[252,114811,114812],{"class":262},"._get_obs(), {}\n",[252,114814,114815],{"class":254,"line":16903},[252,114816,2539],{"emptyLinePlaceholder":181},[252,114818,114819,114821,114824],{"class":254,"line":16909},[252,114820,30941],{"class":258},[252,114822,114823],{"class":2102}," step",[252,114825,114826],{"class":262},"(self, action):\n",[252,114828,114829,114831,114833,114836,114838,114840],{"class":254,"line":16923},[252,114830,110358],{"class":262},[252,114832,308],{"class":258},[252,114834,114835],{"class":262}," np.asarray(action, ",[252,114837,93638],{"class":5356},[252,114839,308],{"class":258},[252,114841,113932],{"class":262},[252,114843,114844,114846,114848,114850,114852,114855,114857],{"class":254,"line":16936},[252,114845,110358],{"class":262},[252,114847,308],{"class":258},[252,114849,107583],{"class":262},[252,114851,30963],{"class":311},[252,114853,114854],{"class":262},".action_space.low, ",[252,114856,30963],{"class":311},[252,114858,114859],{"class":262},".action_space.high)\n",[252,114861,114862],{"class":254,"line":16941},[252,114863,2539],{"emptyLinePlaceholder":181},[252,114865,114866,114868,114871,114873],{"class":254,"line":16955},[252,114867,30985],{"class":311},[252,114869,114870],{"class":262},".data.ctrl[:] ",[252,114872,308],{"class":258},[252,114874,107606],{"class":262},[252,114876,114877,114879,114881,114883,114885,114887,114889],{"class":254,"line":16960},[252,114878,3542],{"class":258},[252,114880,101638],{"class":262},[252,114882,26183],{"class":258},[252,114884,32583],{"class":311},[252,114886,263],{"class":262},[252,114888,30963],{"class":311},[252,114890,114891],{"class":262},".frame_skip):\n",[252,114893,114894,114897,114899,114901,114903],{"class":254,"line":16966},[252,114895,114896],{"class":262},"            mujoco.mj_step(",[252,114898,30963],{"class":311},[252,114900,114717],{"class":262},[252,114902,30963],{"class":311},[252,114904,114722],{"class":262},[252,114906,114907],{"class":254,"line":16971},[252,114908,2539],{"emptyLinePlaceholder":181},[252,114910,114911,114913,114915,114917],{"class":254,"line":16985},[252,114912,30985],{"class":311},[252,114914,113842],{"class":262},[252,114916,9617],{"class":258},[252,114918,55839],{"class":311},[252,114920,114921],{"class":254,"line":16990},[252,114922,2539],{"emptyLinePlaceholder":181},[252,114924,114925,114927,114929,114931],{"class":254,"line":16995},[252,114926,110318],{"class":262},[252,114928,308],{"class":258},[252,114930,39013],{"class":311},[252,114932,114933],{"class":262},"._get_obs()\n",[252,114935,114936,114938,114940,114942],{"class":254,"line":17009},[252,114937,110423],{"class":262},[252,114939,308],{"class":258},[252,114941,39013],{"class":311},[252,114943,114944],{"class":262},"._get_reward()\n",[252,114946,114947],{"class":254,"line":17021},[252,114948,2539],{"emptyLinePlaceholder":181},[252,114950,114951,114953,114955,114957,114959,114961],{"class":254,"line":17026},[252,114952,112273],{"class":262},[252,114954,308],{"class":258},[252,114956,39013],{"class":311},[252,114958,114506],{"class":262},[252,114960,30963],{"class":311},[252,114962,114584],{"class":262},[252,114964,114965,114967,114969,114971,114973,114975],{"class":254,"line":17039},[252,114966,112286],{"class":262},[252,114968,308],{"class":258},[252,114970,39013],{"class":311},[252,114972,114506],{"class":262},[252,114974,30963],{"class":311},[252,114976,114599],{"class":262},[252,114978,114979,114981,114983,114985,114988,114990],{"class":254,"line":17044},[252,114980,114604],{"class":262},[252,114982,308],{"class":258},[252,114984,109933],{"class":311},[252,114986,114987],{"class":262},"(np.linalg.norm(tip ",[252,114989,795],{"class":258},[252,114991,114992],{"class":262}," target))\n",[252,114994,114995],{"class":254,"line":17049},[252,114996,2539],{"emptyLinePlaceholder":181},[252,114998,114999,115002,115004,115006,115008],{"class":254,"line":17054},[252,115000,115001],{"class":262},"        terminated ",[252,115003,308],{"class":258},[252,115005,113825],{"class":262},[252,115007,1173],{"class":258},[252,115009,113830],{"class":311},[252,115011,115012,115015,115017,115019,115021,115023,115025],{"class":254,"line":17067},[252,115013,115014],{"class":262},"        truncated ",[252,115016,308],{"class":258},[252,115018,39013],{"class":311},[252,115020,113842],{"class":262},[252,115022,1849],{"class":258},[252,115024,39013],{"class":311},[252,115026,113849],{"class":262},[252,115028,115029,115032,115034,115036,115039],{"class":254,"line":17072},[252,115030,115031],{"class":262},"        info ",[252,115033,308],{"class":258},[252,115035,4587],{"class":262},[252,115037,115038],{"class":367},"\"distance\"",[252,115040,115041],{"class":262},": dist}\n",[252,115043,115044,115046],{"class":254,"line":32773},[252,115045,14892],{"class":258},[252,115047,115048],{"class":262}," obs, reward, terminated, truncated, info\n",[252,115050,115051],{"class":254,"line":32779},[252,115052,2539],{"emptyLinePlaceholder":181},[252,115054,115055],{"class":254,"line":32785},[252,115056,2539],{"emptyLinePlaceholder":181},[252,115058,115059,115061,115063,115065,115067],{"class":254,"line":32791},[252,115060,32087],{"class":258},[252,115062,2112],{"class":2102},[252,115064,101535],{"class":262},[252,115066,95824],{"class":311},[252,115068,3878],{"class":262},[252,115070,115071,115074,115076],{"class":254,"line":32797},[252,115072,115073],{"class":262},"    env ",[252,115075,308],{"class":258},[252,115077,115078],{"class":262}," ReacherEnv()\n",[252,115080,115081,115084,115086,115089,115091,115093,115095],{"class":254,"line":32808},[252,115082,115083],{"class":262},"    obs, info ",[252,115085,308],{"class":258},[252,115087,115088],{"class":262}," env.reset(",[252,115090,114702],{"class":5356},[252,115092,308],{"class":258},[252,115094,454],{"class":311},[252,115096,269],{"class":262},[252,115098,115099,115101,115103,115106],{"class":254,"line":32814},[252,115100,31439],{"class":311},[252,115102,263],{"class":262},[252,115104,115105],{"class":367},"\"initial obs shape:\"",[252,115107,115108],{"class":262},", obs.shape)\n",[252,115110,115111,115113,115115,115118],{"class":254,"line":32834},[252,115112,31439],{"class":311},[252,115114,263],{"class":262},[252,115116,115117],{"class":367},"\"initial info:\"",[252,115119,115120],{"class":262},", info)\n",[252,115122,115123],{"class":254,"line":32840},[252,115124,2539],{"emptyLinePlaceholder":181},[252,115126,115127,115129,115131],{"class":254,"line":32851},[252,115128,110289],{"class":262},[252,115130,308],{"class":258},[252,115132,104897],{"class":311},[252,115134,115135,115137,115139,115141,115143,115145,115147],{"class":254,"line":32857},[252,115136,3340],{"class":258},[252,115138,31756],{"class":262},[252,115140,26183],{"class":258},[252,115142,32583],{"class":311},[252,115144,263],{"class":262},[252,115146,963],{"class":311},[252,115148,30926],{"class":262},[252,115150,115151,115153,115155],{"class":254,"line":32863},[252,115152,110358],{"class":262},[252,115154,308],{"class":258},[252,115156,115157],{"class":262}," env.action_space.sample()\n",[252,115159,115160,115163,115165],{"class":254,"line":32869},[252,115161,115162],{"class":262},"        obs, reward, terminated, truncated, info ",[252,115164,308],{"class":258},[252,115166,113551],{"class":262},[252,115168,115169,115171,115173],{"class":254,"line":32875},[252,115170,110433],{"class":262},[252,115172,9617],{"class":258},[252,115174,110438],{"class":262},[252,115176,115177,115179,115181,115183,115185,115188,115190,115192,115195,115197,115199,115202,115204,115206,115209,115211,115213,115215],{"class":254,"line":32881},[252,115178,32591],{"class":311},[252,115180,263],{"class":262},[252,115182,110467],{"class":367},[252,115184,110470],{"class":262},[252,115186,115187],{"class":367},"\"reward:\"",[252,115189,12575],{"class":262},[252,115191,32158],{"class":311},[252,115193,115194],{"class":262},"(reward, ",[252,115196,334],{"class":311},[252,115198,110481],{"class":262},[252,115200,115201],{"class":367},"\"distance:\"",[252,115203,12575],{"class":262},[252,115205,32158],{"class":311},[252,115207,115208],{"class":262},"(info[",[252,115210,115038],{"class":367},[252,115212,112338],{"class":262},[252,115214,334],{"class":311},[252,115216,30637],{"class":262},[252,115218,115219,115221,115224,115227],{"class":254,"line":32887},[252,115220,2636],{"class":258},[252,115222,115223],{"class":262}," terminated ",[252,115225,115226],{"class":258},"or",[252,115228,115229],{"class":262}," truncated:\n",[252,115231,115232],{"class":254,"line":32893},[252,115233,115234],{"class":258},"            break\n",[252,115236,115237],{"class":254,"line":32913},[252,115238,2539],{"emptyLinePlaceholder":181},[252,115240,115241,115243,115245,115247,115249,115251,115253,115255],{"class":254,"line":32919},[252,115242,31439],{"class":311},[252,115244,263],{"class":262},[252,115246,110512],{"class":367},[252,115248,12575],{"class":262},[252,115250,32158],{"class":311},[252,115252,110519],{"class":262},[252,115254,334],{"class":311},[252,115256,30637],{"class":262},[252,115258,115259],{"class":254,"line":32935},[252,115260,2539],{"emptyLinePlaceholder":181},[252,115262,115263],{"class":254,"line":32941},[252,115264,2539],{"emptyLinePlaceholder":181},[252,115266,115267,115269,115271,115273,115275],{"class":254,"line":32955},[252,115268,1670],{"class":258},[252,115270,31360],{"class":311},[252,115272,101696],{"class":258},[252,115274,101699],{"class":367},[252,115276,3878],{"class":262},[252,115278,115279],{"class":254,"line":32961},[252,115280,101706],{"class":262},[19,115282,103706],{},[244,115284,115286],{"className":23961,"code":115285,"language":23963,"meta":169,"style":169},"touch ch8_gym_env.py\n",[22,115287,115288],{"__ignoreMap":169},[252,115289,115290,115292],{"class":254,"line":255},[252,115291,101420],{"class":2102},[252,115293,115294],{"class":367}," ch8_gym_env.py\n",[19,115296,110580],{},[244,115298,115300],{"className":23961,"code":115299,"language":23963,"meta":169,"style":169},"python ch8_gym_env.py\n",[22,115301,115302],{"__ignoreMap":169},[252,115303,115304,115306],{"class":254,"line":255},[252,115305,30520],{"class":2102},[252,115307,115294],{"class":367},[224,115309,101709],{"id":101709},[19,115311,115312],{},"继承 Gymnasium 环境：",[244,115314,115316],{"className":30518,"code":115315,"language":30520,"meta":169,"style":169},"class ReacherEnv(gym.Env):\n",[22,115317,115318],{"__ignoreMap":169},[252,115319,115320,115322,115324,115326,115328,115330,115332],{"class":254,"line":255},[252,115321,14834],{"class":258},[252,115323,114193],{"class":2102},[252,115325,263],{"class":262},[252,115327,113676],{"class":2102},[252,115329,821],{"class":262},[252,115331,114202],{"class":2102},[252,115333,30926],{"class":262},[19,115335,115336],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115338,115339],{},"初始化模型：",[244,115341,115343],{"className":30518,"code":115342,"language":30520,"meta":169,"style":169},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[22,115344,115345,115359],{"__ignoreMap":169},[252,115346,115347,115349,115351,115353,115355,115357],{"class":254,"line":255},[252,115348,30963],{"class":311},[252,115350,114253],{"class":262},[252,115352,308],{"class":258},[252,115354,101549],{"class":262},[252,115356,101451],{"class":311},[252,115358,269],{"class":262},[252,115360,115361,115363,115365,115367,115369,115371],{"class":254,"line":170},[252,115362,30963],{"class":311},[252,115364,114268],{"class":262},[252,115366,308],{"class":258},[252,115368,114273],{"class":262},[252,115370,30963],{"class":311},[252,115372,114278],{"class":262},[19,115374,115375,115376,115378],{},"这和前面章节一样，只是现在放到了类的 ",[22,115377,30969],{}," 里。",[19,115380,115381],{},"缓存 site ID：",[244,115383,115385],{"className":30518,"code":115384,"language":30520,"meta":169,"style":169},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[22,115386,115387,115401],{"__ignoreMap":169},[252,115388,115389,115391,115393,115395,115397,115399],{"class":254,"line":255},[252,115390,30963],{"class":311},[252,115392,114289],{"class":262},[252,115394,308],{"class":258},[252,115396,114294],{"class":262},[252,115398,89692],{"class":311},[252,115400,269],{"class":262},[252,115402,115403,115405,115407,115409,115411,115413],{"class":254,"line":170},[252,115404,30963],{"class":311},[252,115406,114310],{"class":262},[252,115408,308],{"class":258},[252,115410,114294],{"class":262},[252,115412,89692],{"class":311},[252,115414,269],{"class":262},[19,115416,115417],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115419,115420],{},"reset：",[244,115422,115424],{"className":30518,"code":115423,"language":30520,"meta":169,"style":169},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[22,115425,115426],{"__ignoreMap":169},[252,115427,115428,115430,115432,115434,115436,115438,115440,115442,115444,115446,115448,115450,115452,115454,115456,115458,115460],{"class":254,"line":255},[252,115429,32087],{"class":258},[252,115431,114658],{"class":2102},[252,115433,114661],{"class":262},[252,115435,718],{"class":258},[252,115437,114666],{"class":262},[252,115439,266],{"class":311},[252,115441,25249],{"class":258},[252,115443,39073],{"class":311},[252,115445,13704],{"class":258},[252,115447,39073],{"class":311},[252,115449,114679],{"class":262},[252,115451,114682],{"class":311},[252,115453,25249],{"class":258},[252,115455,39073],{"class":311},[252,115457,13704],{"class":258},[252,115459,39073],{"class":311},[252,115461,30926],{"class":262},[19,115463,115464,115466],{},[22,115465,70196],{}," 做四件事：",[207,115468,115469,115472,115475,115478],{},[210,115470,115471],{},"设置随机种子。",[210,115473,115474],{},"重置 MuJoCo data。",[210,115476,115477],{},"随机初始化关节角。",[210,115479,115480],{},"返回初始观测和 info。",[19,115482,115483],{},"step：",[244,115485,115487],{"className":30518,"code":115486,"language":30520,"meta":169,"style":169},"def step(self, action):\n",[22,115488,115489],{"__ignoreMap":169},[252,115490,115491,115493,115495],{"class":254,"line":255},[252,115492,32087],{"class":258},[252,115494,114823],{"class":2102},[252,115496,114826],{"class":262},[19,115498,115499,115501],{},[22,115500,107270],{}," 做六件事：",[207,115503,115504,115507,115513,115516,115519,115522],{},[210,115505,115506],{},"检查并裁剪 action。",[210,115508,115509,115510,28525],{},"写入 ",[22,115511,115512],{},"self.data.ctrl",[210,115514,115515],{},"连续推进若干个 MuJoCo 物理步。",[210,115517,115518],{},"计算新观测。",[210,115520,115521],{},"计算奖励和结束条件。",[210,115523,115524],{},"返回 Gymnasium 标准五元组。",[224,115526,101845],{"id":101845},[244,115528,115530],{"className":30518,"code":115529,"language":30520,"meta":169,"style":169},"import gymnasium as gym\n",[22,115531,115532],{"__ignoreMap":169},[252,115533,115534,115536,115538,115540],{"class":254,"line":255},[252,115535,30532],{"class":258},[252,115537,114031],{"class":262},[252,115539,31523],{"class":258},[252,115541,114036],{"class":262},[19,115543,115544,115545,115547,115548,115551],{},"导入 Gymnasium，并起别名 ",[22,115546,113676],{},"。后面写 ",[22,115549,115550],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[244,115553,115555],{"className":30518,"code":115554,"language":30520,"meta":169,"style":169},"from gymnasium import spaces\n",[22,115556,115557],{"__ignoreMap":169},[252,115558,115559,115561,115563,115565],{"class":254,"line":255},[252,115560,30877],{"class":258},[252,115562,114031],{"class":262},[252,115564,30532],{"class":258},[252,115566,114063],{"class":262},[19,115568,115569,115570,115573],{},"导入空间定义工具。",[22,115571,115572],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[244,115575,115576],{"className":30518,"code":115315,"language":30520,"meta":169,"style":169},[22,115577,115578],{"__ignoreMap":169},[252,115579,115580,115582,115584,115586,115588,115590,115592],{"class":254,"line":255},[252,115581,14834],{"class":258},[252,115583,114193],{"class":2102},[252,115585,263],{"class":262},[252,115587,113676],{"class":2102},[252,115589,821],{"class":262},[252,115591,114202],{"class":2102},[252,115593,30926],{"class":262},[19,115595,115596,115597,115600,115601,115603,115604,132,115606,115608],{},"定义一个类，名字叫 ",[22,115598,115599],{},"ReacherEnv","。括号里的 ",[22,115602,115550],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[22,115605,70196],{},[22,115607,107270],{}," 这两个核心方法。",[244,115610,115612],{"className":30518,"code":115611,"language":30520,"meta":169,"style":169},"metadata = {\"render_modes\": []}\n",[22,115613,115614],{"__ignoreMap":169},[252,115615,115616,115619,115621,115623,115625],{"class":254,"line":255},[252,115617,115618],{"class":262},"metadata ",[252,115620,308],{"class":258},[252,115622,4587],{"class":262},[252,115624,114216],{"class":367},[252,115626,114219],{"class":262},[19,115628,115629],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[244,115631,115633],{"className":30518,"code":115632,"language":30520,"meta":169,"style":169},"def __init__(self) -> None:\n",[22,115634,115635],{"__ignoreMap":169},[252,115636,115637,115639,115641,115643,115645],{"class":254,"line":255},[252,115638,32087],{"class":258},[252,115640,30944],{"class":311},[252,115642,114232],{"class":262},[252,115644,95824],{"class":311},[252,115646,3878],{"class":262},[19,115648,115649,115651,115652,28525],{},[22,115650,30969],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[22,115653,115654],{},"env = ReacherEnv()",[244,115656,115658],{"className":30518,"code":115657,"language":30520,"meta":169,"style":169},"super().__init__()\n",[22,115659,115660],{"__ignoreMap":169},[252,115661,115662,115665,115667,115669],{"class":254,"line":255},[252,115663,115664],{"class":311},"super",[252,115666,17401],{"class":262},[252,115668,30969],{"class":311},[252,115670,2115],{"class":262},[19,115672,115673,115674,115676],{},"调用父类 ",[22,115675,115550],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[244,115678,115679],{"className":30518,"code":115342,"language":30520,"meta":169,"style":169},[22,115680,115681,115695],{"__ignoreMap":169},[252,115682,115683,115685,115687,115689,115691,115693],{"class":254,"line":255},[252,115684,30963],{"class":311},[252,115686,114253],{"class":262},[252,115688,308],{"class":258},[252,115690,101549],{"class":262},[252,115692,101451],{"class":311},[252,115694,269],{"class":262},[252,115696,115697,115699,115701,115703,115705,115707],{"class":254,"line":170},[252,115698,30963],{"class":311},[252,115700,114268],{"class":262},[252,115702,308],{"class":258},[252,115704,114273],{"class":262},[252,115706,30963],{"class":311},[252,115708,114278],{"class":262},[19,115710,115711,115712,115714,115715,132,115718,115721],{},"把 MuJoCo 模型和状态保存到 ",[22,115713,30963],{}," 上。",[22,115716,115717],{},"self.model",[22,115719,115720],{},"self.data"," 表示这个环境对象自己的模型和状态。",[244,115723,115724],{"className":30518,"code":115384,"language":30520,"meta":169,"style":169},[22,115725,115726,115740],{"__ignoreMap":169},[252,115727,115728,115730,115732,115734,115736,115738],{"class":254,"line":255},[252,115729,30963],{"class":311},[252,115731,114289],{"class":262},[252,115733,308],{"class":258},[252,115735,114294],{"class":262},[252,115737,89692],{"class":311},[252,115739,269],{"class":262},[252,115741,115742,115744,115746,115748,115750,115752],{"class":254,"line":170},[252,115743,30963],{"class":311},[252,115745,114310],{"class":262},[252,115747,308],{"class":258},[252,115749,114294],{"class":262},[252,115751,89692],{"class":311},[252,115753,269],{"class":262},[19,115755,115756,115757,132,115760,115763],{},"提前查好 tip 和 target 的 site ID。这样 ",[22,115758,115759],{},"_get_obs",[22,115761,115762],{},"_get_reward"," 里就不用每次按名字查找。",[244,115765,115767],{"className":30518,"code":115766,"language":30520,"meta":169,"style":169},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[22,115768,115769,115779,115789],{"__ignoreMap":169},[252,115770,115771,115773,115775,115777],{"class":254,"line":255},[252,115772,30963],{"class":311},[252,115774,114003],{"class":262},[252,115776,308],{"class":258},[252,115778,54567],{"class":311},[252,115780,115781,115783,115785,115787],{"class":254,"line":170},[252,115782,30963],{"class":311},[252,115784,114382],{"class":262},[252,115786,308],{"class":258},[252,115788,114387],{"class":311},[252,115790,115791,115793,115795,115797],{"class":254,"line":1318},[252,115792,30963],{"class":311},[252,115794,113842],{"class":262},[252,115796,308],{"class":258},[252,115798,47473],{"class":311},[19,115800,115801,115804,115805,115808,115809,115812],{},[22,115802,115803],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[22,115806,115807],{},"max_steps"," 是一个 episode 最多运行多少步。",[22,115810,115811],{},"steps"," 记录当前 episode 已经走了多少步。",[244,115814,115815],{"className":30518,"code":113881,"language":30520,"meta":169,"style":169},[22,115816,115817],{"__ignoreMap":169},[252,115818,115819,115821,115823,115825,115827,115829,115831,115833,115835,115837,115839,115841,115843,115845,115847,115849,115851,115853,115855,115857],{"class":254,"line":255},[252,115820,30963],{"class":311},[252,115822,113890],{"class":262},[252,115824,308],{"class":258},[252,115826,113895],{"class":262},[252,115828,113898],{"class":5356},[252,115830,113901],{"class":258},[252,115832,102540],{"class":311},[252,115834,12575],{"class":262},[252,115836,113908],{"class":5356},[252,115838,308],{"class":258},[252,115840,102540],{"class":311},[252,115842,12575],{"class":262},[252,115844,96101],{"class":5356},[252,115846,308],{"class":258},[252,115848,263],{"class":262},[252,115850,340],{"class":311},[252,115852,113925],{"class":262},[252,115854,93638],{"class":5356},[252,115856,308],{"class":258},[252,115858,113932],{"class":262},[19,115860,115861,115862,115865,115866,132,115869,115872],{},"定义动作空间。",[22,115863,115864],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[22,115867,115868],{},"low=-1.0",[22,115870,115871],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[244,115874,115875],{"className":30518,"code":113942,"language":30520,"meta":169,"style":169},[22,115876,115877],{"__ignoreMap":169},[252,115878,115879,115881,115883,115885,115887,115889,115891,115893,115895,115897,115899,115901,115903,115905,115907,115909,115911,115913],{"class":254,"line":255},[252,115880,30963],{"class":311},[252,115882,113951],{"class":262},[252,115884,308],{"class":258},[252,115886,113895],{"class":262},[252,115888,113898],{"class":5356},[252,115890,113901],{"class":258},[252,115892,113962],{"class":262},[252,115894,113908],{"class":5356},[252,115896,308],{"class":258},[252,115898,113962],{"class":262},[252,115900,96101],{"class":5356},[252,115902,308],{"class":258},[252,115904,263],{"class":262},[252,115906,709],{"class":311},[252,115908,113925],{"class":262},[252,115910,93638],{"class":5356},[252,115912,308],{"class":258},[252,115914,113932],{"class":262},[19,115916,115917,115918,115921,115922,115925],{},"定义观测空间。",[22,115919,115920],{},"shape=(10,)"," 表示观测是 10 个数。",[22,115923,115924],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[244,115927,115929],{"className":30518,"code":115928,"language":30520,"meta":169,"style":169},"def _get_obs(self) -> np.ndarray:\n",[22,115930,115931],{"__ignoreMap":169},[252,115932,115933,115935,115937],{"class":254,"line":255},[252,115934,32087],{"class":258},[252,115936,114492],{"class":2102},[252,115938,114495],{"class":262},[19,115940,115941,115942,115944],{},"定义内部函数，用来生成观测。函数名前面的 ",[22,115943,1255],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[244,115946,115948],{"className":30518,"code":115947,"language":30520,"meta":169,"style":169},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[22,115949,115950,115964],{"__ignoreMap":169},[252,115951,115952,115954,115956,115958,115960,115962],{"class":254,"line":255},[252,115953,111704],{"class":262},[252,115955,308],{"class":258},[252,115957,39013],{"class":311},[252,115959,114506],{"class":262},[252,115961,30963],{"class":311},[252,115963,114511],{"class":262},[252,115965,115966,115968,115970,115972,115974,115976],{"class":254,"line":170},[252,115967,111714],{"class":262},[252,115969,308],{"class":258},[252,115971,39013],{"class":311},[252,115973,114506],{"class":262},[252,115975,30963],{"class":311},[252,115977,114526],{"class":262},[19,115979,115980],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[244,115982,115984],{"className":30518,"code":115983,"language":30520,"meta":169,"style":169},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[22,115985,115986,116002],{"__ignoreMap":169},[252,115987,115988,115990,115992,115994,115996,115998,116000],{"class":254,"line":255},[252,115989,110990],{"class":262},[252,115991,308],{"class":258},[252,115993,114535],{"class":262},[252,115995,30963],{"class":311},[252,115997,114540],{"class":262},[252,115999,30963],{"class":311},[252,116001,114545],{"class":262},[252,116003,116004,116006],{"class":254,"line":170},[252,116005,17186],{"class":258},[252,116007,114552],{"class":262},[19,116009,116010,116011,116014,116015,116017],{},"拼接观测，并转换成 ",[22,116012,116013],{},"float32","。很多强化学习库默认使用 ",[22,116016,116013],{},"，所以这里主动转换。",[244,116019,116020],{"className":30518,"code":115423,"language":30520,"meta":169,"style":169},[22,116021,116022],{"__ignoreMap":169},[252,116023,116024,116026,116028,116030,116032,116034,116036,116038,116040,116042,116044,116046,116048,116050,116052,116054,116056],{"class":254,"line":255},[252,116025,32087],{"class":258},[252,116027,114658],{"class":2102},[252,116029,114661],{"class":262},[252,116031,718],{"class":258},[252,116033,114666],{"class":262},[252,116035,266],{"class":311},[252,116037,25249],{"class":258},[252,116039,39073],{"class":311},[252,116041,13704],{"class":258},[252,116043,39073],{"class":311},[252,116045,114679],{"class":262},[252,116047,114682],{"class":311},[252,116049,25249],{"class":258},[252,116051,39073],{"class":311},[252,116053,13704],{"class":258},[252,116055,39073],{"class":311},[252,116057,30926],{"class":262},[19,116059,116060,116061,116063,116064,116067],{},"定义 reset。",[22,116062,114702],{}," 用来控制随机数，保证实验可以复现。",[22,116065,116066],{},"options"," 用来接收额外配置，本章暂时不用。",[244,116069,116071],{"className":30518,"code":116070,"language":30520,"meta":169,"style":169},"super().reset(seed=seed)\n",[22,116072,116073],{"__ignoreMap":169},[252,116074,116075,116077,116079,116081,116083],{"class":254,"line":255},[252,116076,115664],{"class":311},[252,116078,114699],{"class":262},[252,116080,114702],{"class":5356},[252,116082,308],{"class":258},[252,116084,114707],{"class":262},[19,116086,116087,116088,116091],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[22,116089,116090],{},"self.np_random"," 生成可复现的随机数。",[244,116093,116095],{"className":30518,"code":116094,"language":30520,"meta":169,"style":169},"mujoco.mj_resetData(self.model, self.data)\n",[22,116096,116097],{"__ignoreMap":169},[252,116098,116099,116102,116104,116106,116108],{"class":254,"line":255},[252,116100,116101],{"class":262},"mujoco.mj_resetData(",[252,116103,30963],{"class":311},[252,116105,114717],{"class":262},[252,116107,30963],{"class":311},[252,116109,114722],{"class":262},[19,116111,116112],{},"把 MuJoCo 状态重置到默认状态。",[244,116114,116116],{"className":30518,"code":116115,"language":30520,"meta":169,"style":169},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[22,116117,116118],{"__ignoreMap":169},[252,116119,116120,116122,116124,116126,116128,116130,116132,116134,116136,116138,116140,116142,116144,116146,116148,116150,116152],{"class":254,"line":255},[252,116121,30963],{"class":311},[252,116123,114733],{"class":262},[252,116125,308],{"class":258},[252,116127,39013],{"class":311},[252,116129,114740],{"class":262},[252,116131,113898],{"class":5356},[252,116133,113901],{"class":258},[252,116135,86348],{"class":311},[252,116137,12575],{"class":262},[252,116139,113908],{"class":5356},[252,116141,308],{"class":258},[252,116143,86348],{"class":311},[252,116145,12575],{"class":262},[252,116147,31636],{"class":5356},[252,116149,308],{"class":258},[252,116151,30963],{"class":311},[252,116153,114765],{"class":262},[19,116155,115477,116156,116159,116160,116163,116164,116166],{},[22,116157,116158],{},"[:]"," 表示修改整个数组。",[22,116161,116162],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[22,116165,102287],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[244,116168,116170],{"className":30518,"code":116169,"language":30520,"meta":169,"style":169},"self.data.qvel[:] = 0.0\n",[22,116171,116172],{"__ignoreMap":169},[252,116173,116174,116176,116178,116180],{"class":254,"line":255},[252,116175,30963],{"class":311},[252,116177,114772],{"class":262},[252,116179,308],{"class":258},[252,116181,104897],{"class":311},[19,116183,116184],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[244,116186,116188],{"className":30518,"code":116187,"language":30520,"meta":169,"style":169},"self.steps = 0\nreturn self._get_obs(), {}\n",[22,116189,116190,116200],{"__ignoreMap":169},[252,116191,116192,116194,116196,116198],{"class":254,"line":255},[252,116193,30963],{"class":311},[252,116195,113842],{"class":262},[252,116197,308],{"class":258},[252,116199,47473],{"class":311},[252,116201,116202,116204,116206],{"class":254,"line":170},[252,116203,17186],{"class":258},[252,116205,39013],{"class":311},[252,116207,114812],{"class":262},[19,116209,116210],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[244,116212,116213],{"className":30518,"code":115486,"language":30520,"meta":169,"style":169},[22,116214,116215],{"__ignoreMap":169},[252,116216,116217,116219,116221],{"class":254,"line":255},[252,116218,32087],{"class":258},[252,116220,114823],{"class":2102},[252,116222,114826],{"class":262},[19,116224,116225],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[244,116227,116229],{"className":30518,"code":116228,"language":30520,"meta":169,"style":169},"action = np.asarray(action, dtype=np.float32)\n",[22,116230,116231],{"__ignoreMap":169},[252,116232,116233,116235,116237,116239,116241,116243],{"class":254,"line":255},[252,116234,107578],{"class":262},[252,116236,308],{"class":258},[252,116238,114835],{"class":262},[252,116240,93638],{"class":5356},[252,116242,308],{"class":258},[252,116244,113932],{"class":262},[19,116246,116247,116248,28525],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[22,116249,116013],{},[244,116251,116253],{"className":30518,"code":116252,"language":30520,"meta":169,"style":169},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[22,116254,116255],{"__ignoreMap":169},[252,116256,116257,116259,116261,116263,116265,116267,116269],{"class":254,"line":255},[252,116258,107578],{"class":262},[252,116260,308],{"class":258},[252,116262,107583],{"class":262},[252,116264,30963],{"class":311},[252,116266,114854],{"class":262},[252,116268,30963],{"class":311},[252,116270,114859],{"class":262},[19,116272,116273],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[244,116275,116277],{"className":30518,"code":116276,"language":30520,"meta":169,"style":169},"self.data.ctrl[:] = action\n",[22,116278,116279],{"__ignoreMap":169},[252,116280,116281,116283,116285,116287],{"class":254,"line":255},[252,116282,30963],{"class":311},[252,116284,114870],{"class":262},[252,116286,308],{"class":258},[252,116288,107606],{"class":262},[19,116290,116291],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[244,116293,116295],{"className":30518,"code":116294,"language":30520,"meta":169,"style":169},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[22,116296,116297,116313],{"__ignoreMap":169},[252,116298,116299,116301,116303,116305,116307,116309,116311],{"class":254,"line":255},[252,116300,3164],{"class":258},[252,116302,101638],{"class":262},[252,116304,26183],{"class":258},[252,116306,32583],{"class":311},[252,116308,263],{"class":262},[252,116310,30963],{"class":311},[252,116312,114891],{"class":262},[252,116314,116315,116318,116320,116322,116324],{"class":254,"line":170},[252,116316,116317],{"class":262},"    mujoco.mj_step(",[252,116319,30963],{"class":311},[252,116321,114717],{"class":262},[252,116323,30963],{"class":311},[252,116325,114722],{"class":262},[19,116327,116328,116329,116332,116333,116335,116336,28525],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[22,116330,116331],{},"frame_skip=5","，所以外部调用一次 ",[22,116334,114013],{},"，内部实际执行 5 次 ",[22,116337,101352],{},[244,116339,116341],{"className":30518,"code":116340,"language":30520,"meta":169,"style":169},"self.steps += 1\n",[22,116342,116343],{"__ignoreMap":169},[252,116344,116345,116347,116349,116351],{"class":254,"line":255},[252,116346,30963],{"class":311},[252,116348,113842],{"class":262},[252,116350,9617],{"class":258},[252,116352,55839],{"class":311},[19,116354,116355],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[244,116357,116359],{"className":30518,"code":116358,"language":30520,"meta":169,"style":169},"obs = self._get_obs()\nreward = self._get_reward()\n",[22,116360,116361,116371],{"__ignoreMap":169},[252,116362,116363,116365,116367,116369],{"class":254,"line":255},[252,116364,110990],{"class":262},[252,116366,308],{"class":258},[252,116368,39013],{"class":311},[252,116370,114933],{"class":262},[252,116372,116373,116375,116377,116379],{"class":254,"line":170},[252,116374,111141],{"class":262},[252,116376,308],{"class":258},[252,116378,39013],{"class":311},[252,116380,114944],{"class":262},[19,116382,116383],{},"计算新的观测和奖励。",[244,116385,116387],{"className":30518,"code":116386,"language":30520,"meta":169,"style":169},"dist = float(np.linalg.norm(tip - target))\n",[22,116388,116389],{"__ignoreMap":169},[252,116390,116391,116393,116395,116397,116399,116401],{"class":254,"line":255},[252,116392,111732],{"class":262},[252,116394,308],{"class":258},[252,116396,109933],{"class":311},[252,116398,114987],{"class":262},[252,116400,795],{"class":258},[252,116402,114992],{"class":262},[19,116404,116405],{},"计算末端到目标的距离，并转换成 Python float。",[244,116407,116408],{"className":30518,"code":113813,"language":30520,"meta":169,"style":169},[22,116409,116410,116422],{"__ignoreMap":169},[252,116411,116412,116414,116416,116418,116420],{"class":254,"line":255},[252,116413,113820],{"class":262},[252,116415,308],{"class":258},[252,116417,113825],{"class":262},[252,116419,1173],{"class":258},[252,116421,113830],{"class":311},[252,116423,116424,116426,116428,116430,116432,116434,116436],{"class":254,"line":170},[252,116425,113835],{"class":262},[252,116427,308],{"class":258},[252,116429,39013],{"class":311},[252,116431,113842],{"class":262},[252,116433,1849],{"class":258},[252,116435,39013],{"class":311},[252,116437,113849],{"class":262},[19,116439,116440],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[244,116442,116444],{"className":30518,"code":116443,"language":30520,"meta":169,"style":169},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[22,116445,116446,116459],{"__ignoreMap":169},[252,116447,116448,116451,116453,116455,116457],{"class":254,"line":255},[252,116449,116450],{"class":262},"info ",[252,116452,308],{"class":258},[252,116454,4587],{"class":262},[252,116456,115038],{"class":367},[252,116458,115041],{"class":262},[252,116460,116461,116463],{"class":254,"line":170},[252,116462,17186],{"class":258},[252,116464,115048],{"class":262},[19,116466,116467,116470],{},[22,116468,116469],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[244,116472,116474],{"className":30518,"code":116473,"language":30520,"meta":169,"style":169},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[22,116475,116476,116485],{"__ignoreMap":169},[252,116477,116478,116481,116483],{"class":254,"line":255},[252,116479,116480],{"class":262},"env ",[252,116482,308],{"class":258},[252,116484,115078],{"class":262},[252,116486,116487,116489,116491,116493,116495,116497,116499],{"class":254,"line":170},[252,116488,113536],{"class":262},[252,116490,308],{"class":258},[252,116492,115088],{"class":262},[252,116494,114702],{"class":5356},[252,116496,308],{"class":258},[252,116498,454],{"class":311},[252,116500,269],{"class":262},[19,116502,116503,116504,116507],{},"创建环境并重置。",[22,116505,116506],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[244,116509,116511],{"className":30518,"code":116510,"language":30520,"meta":169,"style":169},"action = env.action_space.sample()\n",[22,116512,116513],{"__ignoreMap":169},[252,116514,116515,116517,116519],{"class":254,"line":255},[252,116516,107578],{"class":262},[252,116518,308],{"class":258},[252,116520,115157],{"class":262},[19,116522,116523],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116525,102453],{"id":102452},[19,116527,105620],{},[244,116529,116532],{"className":116530,"code":116531,"language":5327,"meta":169},[5325],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[22,116533,116531],{"__ignoreMap":169},[19,116535,116536],{},"这个环境已经具备强化学习环境的基本结构。",[19,116538,116539],{},"主函数里使用随机动作：",[244,116541,116542],{"className":30518,"code":116510,"language":30520,"meta":169,"style":169},[22,116543,116544],{"__ignoreMap":169},[252,116545,116546,116548,116550],{"class":254,"line":255},[252,116547,107578],{"class":262},[252,116549,308],{"class":258},[252,116551,115157],{"class":262},[19,116553,116554],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116556,102485],{"id":102484},[207,116558,116559,116562,116568,116577,116586,116595,116601],{},[210,116560,116561],{},"运行程序。",[210,116563,116564,116565,28525],{},"确认 ",[22,116566,116567],{},"obs.shape == (10,)",[210,116569,111317,116570,116573,116574,28525],{},[22,116571,116572],{},"env.action_space","，应类似 ",[22,116575,116576],{},"Box(-1.0, 1.0, (2,), float32)",[210,116578,105721,116579,116582,116583,28525],{},[22,116580,116581],{},"self.max_steps = 10","，确认环境会更快 ",[22,116584,116585],{},"truncated=True",[210,116587,102548,116588,102551,116591,116594],{},[22,116589,116590],{},"terminated = dist \u003C 0.05",[22,116592,116593],{},"dist \u003C 0.2","，观察是否更容易结束。",[210,116596,102548,116597,116600],{},[22,116598,116599],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[210,116602,116603,116604,116606,116607,116610],{},"在 ",[22,116605,116469],{}," 里加入 ",[22,116608,116609],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116612,102590],{"id":102589},[224,116614,116616],{"id":116615},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116618,116619,116620,116622],{},"Gymnasium 的 ",[22,116621,107270],{}," 返回 5 个值:",[244,116624,116626],{"className":30518,"code":116625,"language":30520,"meta":169,"style":169},"obs, reward, terminated, truncated, info\n",[22,116627,116628],{"__ignoreMap":169},[252,116629,116630],{"class":254,"line":255},[252,116631,116625],{"class":262},[19,116633,116634],{},"不是旧 Gym 的 4 个值。",[224,116636,116638,116641],{"id":116637},"datactrl-action-维度错误",[22,116639,116640],{},"data.ctrl[:] = action"," 维度错误",[19,116643,102660],{},[244,116645,116647],{"className":30518,"code":116646,"language":30520,"meta":169,"style":169},"print(self.model.nu)\nprint(action.shape)\n",[22,116648,116649,116660],{"__ignoreMap":169},[252,116650,116651,116653,116655,116657],{"class":254,"line":255},[252,116652,30555],{"class":311},[252,116654,263],{"class":262},[252,116656,30963],{"class":311},[252,116658,116659],{"class":262},".model.nu)\n",[252,116661,116662,116664],{"class":254,"line":170},[252,116663,30555],{"class":311},[252,116665,116666],{"class":262},"(action.shape)\n",[19,116668,116669],{},"两者必须匹配。",[224,116671,116673],{"id":116672},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116675,102599],{},[244,116677,116679],{"className":30518,"code":116678,"language":30520,"meta":169,"style":169},"mujoco.mj_forward(self.model, self.data)\n",[22,116680,116681],{"__ignoreMap":169},[252,116682,116683,116686,116688,116690,116692],{"class":254,"line":255},[252,116684,116685],{"class":262},"mujoco.mj_forward(",[252,116687,30963],{"class":311},[252,116689,114717],{"class":262},[252,116691,30963],{"class":311},[252,116693,114722],{"class":262},[224,116695,116697,116699],{"id":116696},"observation_space-维度和-obs-不一致",[22,116698,113736],{}," 维度和 obs 不一致",[19,116701,102712],{},[244,116703,116705],{"className":30518,"code":116704,"language":30520,"meta":169,"style":169},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[22,116706,116707,116717,116724],{"__ignoreMap":169},[252,116708,116709,116711,116713,116715],{"class":254,"line":255},[252,116710,110990],{"class":262},[252,116712,308],{"class":258},[252,116714,39013],{"class":311},[252,116716,114933],{"class":262},[252,116718,116719,116721],{"class":254,"line":170},[252,116720,30555],{"class":311},[252,116722,116723],{"class":262},"(obs.shape)\n",[252,116725,116726,116728,116730,116732],{"class":254,"line":1318},[252,116727,30555],{"class":311},[252,116729,263],{"class":262},[252,116731,30963],{"class":311},[252,116733,116734],{"class":262},".observation_space.shape)\n",[19,116736,116737],{},"两者必须一致。本章观测是：",[244,116739,116742],{"className":116740,"code":116741,"language":5327,"meta":169},[5325],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[22,116743,116741],{"__ignoreMap":169},[224,116745,116747],{"id":116746},"action-超过范围","action 超过范围",[19,116749,116750],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[244,116752,116753],{"className":30518,"code":116252,"language":30520,"meta":169,"style":169},[22,116754,116755],{"__ignoreMap":169},[252,116756,116757,116759,116761,116763,116765,116767,116769],{"class":254,"line":255},[252,116758,107578],{"class":262},[252,116760,308],{"class":258},[252,116762,107583],{"class":262},[252,116764,30963],{"class":311},[252,116766,114854],{"class":262},[252,116768,30963],{"class":311},[252,116770,114859],{"class":262},[19,116772,116773,116774,28525],{},"这能避免无效动作直接写入 ",[22,116775,101213],{},[224,116777,116779],{"id":116778},"忘记返回-info","忘记返回 info",[19,116781,116619,116782,132,116784,116786],{},[22,116783,70196],{},[22,116785,107270],{}," 都会返回 info：",[244,116788,116789],{"className":30518,"code":113529,"language":30520,"meta":169,"style":169},[22,116790,116791,116799],{"__ignoreMap":169},[252,116792,116793,116795,116797],{"class":254,"line":255},[252,116794,113536],{"class":262},[252,116796,308],{"class":258},[252,116798,113541],{"class":262},[252,116800,116801,116803,116805],{"class":254,"line":170},[252,116802,113546],{"class":262},[252,116804,308],{"class":258},[252,116806,113551],{"class":262},[19,116808,116809,116810,28525],{},"即使暂时没有额外信息，也返回 ",[22,116811,32599],{},[14,116813,116815],{"id":116814},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,116817,116818],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[207,116820,116821,116824,116827,116830,116833,116836],{},[210,116822,116823],{},"更稳定的 reward。",[210,116825,116826],{},"合理的 episode 长度。",[210,116828,116829],{},"可重复的随机目标采样。",[210,116831,116832],{},"render 接口。",[210,116834,116835],{},"环境注册代码。",[210,116837,116838],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,116840,116841],{},"如果只是自己写训练循环，最小形式是：",[244,116843,116845],{"className":30518,"code":116844,"language":30520,"meta":169,"style":169},"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",[22,116846,116847,116855,116871,116875,116891,116900,116909,116919],{"__ignoreMap":169},[252,116848,116849,116851,116853],{"class":254,"line":255},[252,116850,116480],{"class":262},[252,116852,308],{"class":258},[252,116854,115078],{"class":262},[252,116856,116857,116859,116861,116863,116865,116867,116869],{"class":254,"line":170},[252,116858,113536],{"class":262},[252,116860,308],{"class":258},[252,116862,115088],{"class":262},[252,116864,114702],{"class":5356},[252,116866,308],{"class":258},[252,116868,454],{"class":311},[252,116870,269],{"class":262},[252,116872,116873],{"class":254,"line":1318},[252,116874,2539],{"emptyLinePlaceholder":181},[252,116876,116877,116879,116881,116883,116885,116887,116889],{"class":254,"line":1333},[252,116878,3164],{"class":258},[252,116880,101638],{"class":262},[252,116882,26183],{"class":258},[252,116884,32583],{"class":311},[252,116886,263],{"class":262},[252,116888,6550],{"class":311},[252,116890,30926],{"class":262},[252,116892,116893,116896,116898],{"class":254,"line":1339},[252,116894,116895],{"class":262},"    action ",[252,116897,308],{"class":258},[252,116899,115157],{"class":262},[252,116901,116902,116905,116907],{"class":254,"line":1353},[252,116903,116904],{"class":262},"    obs, reward, terminated, truncated, info ",[252,116906,308],{"class":258},[252,116908,113551],{"class":262},[252,116910,116911,116913,116915,116917],{"class":254,"line":1359},[252,116912,3240],{"class":258},[252,116914,115223],{"class":262},[252,116916,115226],{"class":258},[252,116918,115229],{"class":262},[252,116920,116921,116924,116926],{"class":254,"line":1450},[252,116922,116923],{"class":262},"        obs, info ",[252,116925,308],{"class":258},[252,116927,113541],{"class":262},[14,116929,116931],{"id":116930},"_9本章小结","9.本章小结",[19,116933,116934],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[244,116936,116939],{"className":116937,"code":116938,"language":5327,"meta":169},[5325],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[22,116940,116938],{"__ignoreMap":169},[19,116942,116943],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5266,116945,116946],{},"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":169,"searchDepth":170,"depth":170,"links":116948},[116949,116950,116951,116958,116962,116963,116964,116974,116975],{"id":100784,"depth":170,"text":100785},{"id":100907,"depth":170,"text":100908},{"id":101181,"depth":170,"text":101182,"children":116952},[116953,116955,116957],{"id":113760,"depth":1318,"text":116954},"terminated 和 truncated 的区别",{"id":113863,"depth":1318,"text":116956},"observation_space 和 action_space",{"id":113990,"depth":1318,"text":113991},{"id":101389,"depth":170,"text":101390,"children":116959},[116960,116961],{"id":101709,"depth":1318,"text":101709},{"id":101845,"depth":1318,"text":101845},{"id":102452,"depth":170,"text":102453},{"id":102484,"depth":170,"text":102485},{"id":102589,"depth":170,"text":102590,"children":116965},[116966,116967,116969,116970,116972,116973],{"id":116615,"depth":1318,"text":116616},{"id":116637,"depth":1318,"text":116968},"data.ctrl[:] = action 维度错误",{"id":116672,"depth":1318,"text":116673},{"id":116696,"depth":1318,"text":116971},"observation_space 维度和 obs 不一致",{"id":116746,"depth":1318,"text":116747},{"id":116778,"depth":1318,"text":116779},{"id":116814,"depth":170,"text":116815},{"id":116930,"depth":170,"text":116931},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113513,"description":169},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116982,"title":116983,"body":116984,"description":117407,"extension":179,"meta":117408,"navigation":181,"path":117409,"seo":117410,"stem":117411,"__hash__":117412},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116985,"toc":117397},[116986,116990,116993,116996,117016,117022,117028,117038,117041,117044,117064,117067,117071,117074,117080,117083,117097,117100,117103,117177,117180,117186,117189,117212,117215,117265,117268,117274,117277,117280,117283,117302,117305,117311,117314,117317,117320,117340,117343,117346,117349,117394],[10,116987,116989],{"id":116988},"mujoco-学习","MuJoCo 学习",[19,116991,116992],{},"初版",[19,116994,116995],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[207,116997,116998,117001,117004,117013],{},[210,116999,117000],{},"MuJoCo 模型文件在描述什么。",[210,117002,117003],{},"Python 代码怎样读取和推进仿真。",[210,117005,117006,475,117008,475,117010,117012],{},[22,117007,104166],{},[22,117009,104496],{},[22,117011,104499],{}," 这些数组为什么重要。",[210,117014,117015],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117017,117018,117019,117021],{},"默认环境为 Fedora 44、Python >= 3.10、",[22,117020,101164],{}," 官方 Python bindings。",[19,117023,117024,117025,117027],{},"注意：本文禁止使用 ",[22,117026,101150],{},"。所有示例均使用：",[244,117029,117030],{"className":30518,"code":101715,"language":30520,"meta":169,"style":169},[22,117031,117032],{"__ignoreMap":169},[252,117033,117034,117036],{"class":254,"line":255},[252,117035,30532],{"class":258},[252,117037,101438],{"class":262},[14,117039,117040],{"id":117040},"适合谁阅读",[19,117042,117043],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[207,117045,117046,117049,117052,117055],{},[210,117047,117048],{},"没学过 MuJoCo，只会一点 Python。",[210,117050,117051],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[210,117053,117054],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[210,117056,117057,117058,117060,117061,117063],{},"以前接触过 ",[22,117059,101150],{},"，现在想迁移到官方 ",[22,117062,101158],{}," Python bindings。",[19,117065,117066],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117068,117070],{"id":117069},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117072,117073],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[244,117075,117078],{"className":117076,"code":117077,"language":5327,"meta":169},[5325],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[22,117079,117077],{"__ignoreMap":169},[19,117081,117082],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[207,117084,117085,117088,117091,117094],{},[210,117086,117087],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[210,117089,117090],{},"快速测试控制算法，不必一开始就上真实机器人。",[210,117092,117093],{},"生成强化学习环境。",[210,117095,117096],{},"采集状态、动作、图像、奖励等训练数据。",[14,117098,117099],{"id":117099},"学习前的心智模型",[19,117101,117102],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[400,117104,117105,117117],{},[403,117106,117107],{},[406,117108,117109,117112,117115],{},[409,117110,117111],{"align":23875},"部分",[409,117113,117114],{"align":23875},"负责什么",[409,117116,21326],{"align":23875},[447,117118,117119,117130,117142,117154,117166],{},[406,117120,117121,117124,117127],{},[452,117122,117123],{"align":23875},"MJCF XML",[452,117125,117126],{"align":23875},"定义世界和机器人结构",[452,117128,117129],{"align":23875},"地面、盒子、关节、电机、摄像头",[406,117131,117132,117136,117139],{},[452,117133,117134],{"align":23875},[22,117135,100847],{},[452,117137,117138],{"align":23875},"编译后的静态模型",[452,117140,117141],{"align":23875},"有几个关节、有几个电机、时间步长是多少",[406,117143,117144,117148,117151],{},[452,117145,117146],{"align":23875},[22,117147,100857],{},[452,117149,117150],{"align":23875},"运行中的动态状态",[452,117152,117153],{"align":23875},"当前时间、位置、速度、电机输入",[406,117155,117156,117160,117163],{},[452,117157,117158],{"align":23875},[22,117159,101352],{},[452,117161,117162],{"align":23875},"推进一步物理仿真",[452,117164,117165],{"align":23875},"根据重力、力、碰撞更新状态",[406,117167,117168,117171,117174],{},[452,117169,117170],{"align":23875},"Viewer \u002F Renderer",[452,117172,117173],{"align":23875},"把仿真显示出来",[452,117175,117176],{"align":23875},"打开窗口或保存图片",[19,117178,117179],{},"一句话总结：",[244,117181,117184],{"className":117182,"code":117183,"language":5327,"meta":169},[5325],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[22,117185,117183],{"__ignoreMap":169},[19,117187,117188],{},"参考来源：",[1270,117190,117191,117198,117205],{},[210,117192,117193,117194],{},"MuJoCo Python 官方文档：",[501,117195,117196],{"href":117196,"rel":117197},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24004],[210,117199,117200,117201],{},"MuJoCo XML Reference：",[501,117202,117203],{"href":117203,"rel":117204},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24004],[210,117206,117207,117208],{},"MuJoCo Overview：",[501,117209,117210],{"href":117210,"rel":117211},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24004],[14,117213,117214],{"id":117214},"章节目录",[207,117216,117217,117223,117229,117235,117241,117247,117253,117259],{},[210,117218,117219],{},[501,117220,117222],{"href":117221},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[210,117224,117225],{},[501,117226,117228],{"href":117227},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[210,117230,117231],{},[501,117232,117234],{"href":117233},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[210,117236,117237],{},[501,117238,117240],{"href":117239},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[210,117242,117243],{},[501,117244,117246],{"href":117245},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[210,117248,117249],{},[501,117250,117252],{"href":117251},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[210,117254,117255],{},[501,117256,117258],{"href":117257},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[210,117260,117261],{},[501,117262,117264],{"href":117263},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117266,117267],{"id":117267},"推荐学习路线",[244,117269,117272],{"className":117270,"code":117271,"language":5327,"meta":169},[5325],"环境安装\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",[22,117273,117271],{"__ignoreMap":169},[19,117275,117276],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117278,117279],{"id":117279},"建议的目录结构",[19,117281,117282],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[244,117284,117286],{"className":23961,"code":117285,"language":23963,"meta":169,"style":169},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[22,117287,117288,117296],{"__ignoreMap":169},[252,117289,117290,117292,117294],{"class":254,"line":255},[252,117291,101403],{"class":2102},[252,117293,29356],{"class":311},[252,117295,101408],{"class":367},[252,117297,117298,117300],{"class":254,"line":170},[252,117299,101413],{"class":311},[252,117301,101408],{"class":367},[19,117303,117304],{},"每一章的代码都单独保存：",[244,117306,117309],{"className":117307,"code":117308,"language":5327,"meta":169},[5325],"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",[22,117310,117308],{"__ignoreMap":169},[19,117312,117313],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117315,117316],{"id":117316},"学习方法",[19,117318,117319],{},"每章建议按这个顺序操作：",[207,117321,117322,117325,117328,117331,117334,117337],{},[210,117323,117324],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[210,117326,117327],{},"复制最小可运行代码，保存成指定文件。",[210,117329,117330],{},"运行代码，确认没有报错。",[210,117332,117333],{},"对照“运行结果说明”理解输出。",[210,117335,117336],{},"做“验证步骤”，主动改一两个参数。",[210,117338,117339],{},"遇到报错先看“常见错误与解决方案”。",[19,117341,117342],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117344,117345],{"id":117345},"全局排错顺序",[19,117347,117348],{},"遇到问题时，按下面顺序查：",[207,117350,117351,117357,117363,117368,117371,117374,117381,117391],{},[210,117352,117353,117354],{},"Python 环境是否激活：",[22,117355,117356],{},"which python",[210,117358,117359,117360],{},"MuJoCo 是否能导入：",[22,117361,117362],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[210,117364,117365,117366],{},"是否误装了 ",[22,117367,101150],{},[210,117369,117370],{},"XML 标签是否闭合、属性是否拼写正确",[210,117372,117373],{},"actuator 引用的 joint 名字是否存在",[210,117375,117376,117378,117379],{},[22,117377,101213],{}," 的长度是否等于 ",[22,117380,102295],{},[210,117382,105721,117383,84,117385,117387,117388],{},[22,117384,104166],{},[22,117386,104496],{}," 后是否调用了 ",[22,117389,117390],{},"mujoco.mj_forward",[210,117392,117393],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5266,117395,117396],{},"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":169,"searchDepth":170,"depth":170,"links":117398},[117399,117400,117401,117402,117403,117404,117405,117406],{"id":117040,"depth":170,"text":117040},{"id":117069,"depth":170,"text":117070},{"id":117099,"depth":170,"text":117099},{"id":117214,"depth":170,"text":117214},{"id":117267,"depth":170,"text":117267},{"id":117279,"depth":170,"text":117279},{"id":117316,"depth":170,"text":117316},{"id":117345,"depth":170,"text":117345},"仿真搭建。",{"category":23517},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116983,"description":117407},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117414,"title":117415,"body":117416,"description":178,"extension":179,"meta":117871,"navigation":181,"path":117872,"seo":117873,"stem":117874,"__hash__":117875},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117417,"toc":117869},[117418,117421,117424,117430,117866],[10,117419,117415],{"id":117420},"_1-最常用的基本操作更新",[19,117422,117423],{},"装linux系统教程：",[19,117425,117426],{},[501,117427,117428],{"href":117428,"rel":117429},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24004],[244,117431,117435],{"className":117432,"code":117433,"language":117434,"meta":169,"style":169},"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",[22,117436,117437,117442,117447,117456,117461,117470,117475,117495,117500,117511,117516,117525,117530,117558,117563,117582,117587,117606,117610,117615,117631,117635,117640,117670,117674,117679,117695,117699,117704,117719,117723,117728,117744,117748,117753,117765,117777,117781,117786,117803,117807,117812,117830,117834,117839,117848,117852,117857],{"__ignoreMap":169},[252,117438,117439],{"class":254,"line":255},[252,117440,117441],{"class":321},"#更新相关的知识\n",[252,117443,117444],{"class":254,"line":170},[252,117445,117446],{"class":321},"# 更新软件包列表（从服务器获取最新软件信息）\n",[252,117448,117449,117451,117454],{"class":254,"line":1318},[252,117450,24716],{"class":2102},[252,117452,117453],{"class":367}," apt",[252,117455,26382],{"class":367},[252,117457,117458],{"class":254,"line":1333},[252,117459,117460],{"class":321},"# 升级所有可更新的软件包（不删除旧包）\n",[252,117462,117463,117465,117467],{"class":254,"line":1339},[252,117464,24716],{"class":2102},[252,117466,117453],{"class":367},[252,117468,117469],{"class":367}," upgrade\n",[252,117471,117472],{"class":254,"line":1353},[252,117473,117474],{"class":321},"#更新和升级软件包\n",[252,117476,117477,117479,117481,117484,117486,117488,117490,117493],{"class":254,"line":1359},[252,117478,24716],{"class":2102},[252,117480,117453],{"class":367},[252,117482,117483],{"class":367}," update",[252,117485,26330],{"class":262},[252,117487,24716],{"class":2102},[252,117489,117453],{"class":367},[252,117491,117492],{"class":367}," upgrade",[252,117494,101119],{"class":311},[252,117496,117497],{"class":254,"line":1450},[252,117498,117499],{"class":321},"#列出可更新的软件包及版本信息\n",[252,117501,117502,117505,117508],{"class":254,"line":1456},[252,117503,117504],{"class":2102},"apt",[252,117506,117507],{"class":367}," list",[252,117509,117510],{"class":311}," --upgradable\n",[252,117512,117513],{"class":254,"line":1468},[252,117514,117515],{"class":321},"#彻底升级（处理依赖关系，可能删除旧包）\n",[252,117517,117518,117520,117522],{"class":254,"line":1751},[252,117519,24716],{"class":2102},[252,117521,117453],{"class":367},[252,117523,117524],{"class":367}," full-upgrade\n",[252,117526,117527],{"class":254,"line":1756},[252,117528,117529],{"class":321},"#设置指定版本\n",[252,117531,117532,117534,117536,117538,117540,117543,117545,117547,117549,117551,117554,117556],{"class":254,"line":1762},[252,117533,24716],{"class":2102},[252,117535,117453],{"class":367},[252,117537,23973],{"class":367},[252,117539,29042],{"class":258},[252,117541,117542],{"class":367},"package_nam",[252,117544,337],{"class":262},[252,117546,1223],{"class":258},[252,117548,308],{"class":367},[252,117550,1173],{"class":258},[252,117552,117553],{"class":367},"version_numbe",[252,117555,933],{"class":262},[252,117557,51447],{"class":258},[252,117559,117560],{"class":254,"line":1767},[252,117561,117562],{"class":321},"#只安装软件包不升级\n",[252,117564,117565,117567,117569,117571,117573,117575,117577,117579],{"class":254,"line":1781},[252,117566,24716],{"class":2102},[252,117568,117453],{"class":367},[252,117570,23973],{"class":367},[252,117572,29042],{"class":258},[252,117574,117542],{"class":367},[252,117576,337],{"class":262},[252,117578,1223],{"class":258},[252,117580,117581],{"class":311}," --no-upgrade\n",[252,117583,117584],{"class":254,"line":1786},[252,117585,117586],{"class":321},"#只升级，不存在就不安装\n",[252,117588,117589,117591,117593,117595,117597,117599,117601,117603],{"class":254,"line":1792},[252,117590,24716],{"class":2102},[252,117592,117453],{"class":367},[252,117594,23973],{"class":367},[252,117596,29042],{"class":258},[252,117598,117542],{"class":367},[252,117600,337],{"class":262},[252,117602,1223],{"class":258},[252,117604,117605],{"class":311}," --only-upgrade\n",[252,117607,117608],{"class":254,"line":1813},[252,117609,2539],{"emptyLinePlaceholder":181},[252,117611,117612],{"class":254,"line":1818},[252,117613,117614],{"class":321},"#安装指定的软件命令\n",[252,117616,117617,117619,117621,117623,117625,117627,117629],{"class":254,"line":1832},[252,117618,24716],{"class":2102},[252,117620,117453],{"class":367},[252,117622,23973],{"class":367},[252,117624,29042],{"class":258},[252,117626,117542],{"class":367},[252,117628,337],{"class":262},[252,117630,51447],{"class":258},[252,117632,117633],{"class":254,"line":1837},[252,117634,2539],{"emptyLinePlaceholder":181},[252,117636,117637],{"class":254,"line":1866},[252,117638,117639],{"class":321},"#安装多个软件包\n",[252,117641,117642,117644,117646,117648,117650,117653,117656,117658,117660,117663,117665,117667],{"class":254,"line":1871},[252,117643,24716],{"class":2102},[252,117645,117453],{"class":367},[252,117647,23973],{"class":367},[252,117649,29042],{"class":258},[252,117651,117652],{"class":367},"package_",[252,117654,117655],{"class":258},"1>",[252,117657,29042],{"class":258},[252,117659,117652],{"class":367},[252,117661,117662],{"class":258},"2>",[252,117664,29042],{"class":258},[252,117666,117652],{"class":367},[252,117668,117669],{"class":258},"3>\n",[252,117671,117672],{"class":254,"line":1888},[252,117673,2539],{"emptyLinePlaceholder":181},[252,117675,117676],{"class":254,"line":1893},[252,117677,117678],{"class":321},"#更新指定的软件命令\n",[252,117680,117681,117683,117685,117687,117689,117691,117693],{"class":254,"line":1898},[252,117682,24716],{"class":2102},[252,117684,117453],{"class":367},[252,117686,117483],{"class":367},[252,117688,29042],{"class":258},[252,117690,117542],{"class":367},[252,117692,337],{"class":262},[252,117694,51447],{"class":258},[252,117696,117697],{"class":254,"line":1903},[252,117698,2539],{"emptyLinePlaceholder":181},[252,117700,117701],{"class":254,"line":1917},[252,117702,117703],{"class":321},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[252,117705,117706,117708,117711,117713,117715,117717],{"class":254,"line":1922},[252,117707,117504],{"class":2102},[252,117709,117710],{"class":367}," show",[252,117712,29042],{"class":258},[252,117714,117542],{"class":367},[252,117716,337],{"class":262},[252,117718,51447],{"class":258},[252,117720,117721],{"class":254,"line":2716},[252,117722,2539],{"emptyLinePlaceholder":181},[252,117724,117725],{"class":254,"line":2730},[252,117726,117727],{"class":321},"#删除软件包命令\n",[252,117729,117730,117732,117734,117736,117738,117740,117742],{"class":254,"line":2738},[252,117731,24716],{"class":2102},[252,117733,117453],{"class":367},[252,117735,26219],{"class":367},[252,117737,29042],{"class":258},[252,117739,117542],{"class":367},[252,117741,337],{"class":262},[252,117743,51447],{"class":258},[252,117745,117746],{"class":254,"line":2743},[252,117747,2539],{"emptyLinePlaceholder":181},[252,117749,117750],{"class":254,"line":2749},[252,117751,117752],{"class":321},"# 清理旧版本和缓存（释放磁盘空间）\n",[252,117754,117755,117757,117759,117762],{"class":254,"line":2755},[252,117756,24716],{"class":2102},[252,117758,117453],{"class":367},[252,117760,117761],{"class":367}," autoremove",[252,117763,117764],{"class":321},"  # 删除不再需要的依赖和库文件\n",[252,117766,117767,117769,117771,117774],{"class":254,"line":2760},[252,117768,24716],{"class":2102},[252,117770,117453],{"class":367},[252,117772,117773],{"class":367}," clean",[252,117775,117776],{"class":321},"       # 清理下载的缓存包\n",[252,117778,117779],{"class":254,"line":8088},[252,117780,2539],{"emptyLinePlaceholder":181},[252,117782,117783],{"class":254,"line":8112},[252,117784,117785],{"class":321},"#移除软件包及配置文件\n",[252,117787,117788,117790,117792,117795,117797,117799,117801],{"class":254,"line":8117},[252,117789,24716],{"class":2102},[252,117791,117453],{"class":367},[252,117793,117794],{"class":367}," purge",[252,117796,29042],{"class":258},[252,117798,117542],{"class":367},[252,117800,337],{"class":262},[252,117802,51447],{"class":258},[252,117804,117805],{"class":254,"line":8123},[252,117806,2539],{"emptyLinePlaceholder":181},[252,117808,117809],{"class":254,"line":8150},[252,117810,117811],{"class":321},"#查找软件包命令\n",[252,117813,117814,117816,117818,117821,117823,117826,117828],{"class":254,"line":8155},[252,117815,24716],{"class":2102},[252,117817,117453],{"class":367},[252,117819,117820],{"class":367}," search",[252,117822,29042],{"class":258},[252,117824,117825],{"class":367},"keywor",[252,117827,577],{"class":262},[252,117829,51447],{"class":258},[252,117831,117832],{"class":254,"line":8161},[252,117833,2539],{"emptyLinePlaceholder":181},[252,117835,117836],{"class":254,"line":8173},[252,117837,117838],{"class":321},"#列出所有已安装的包\n",[252,117840,117841,117843,117845],{"class":254,"line":8185},[252,117842,117504],{"class":2102},[252,117844,117507],{"class":367},[252,117846,117847],{"class":311}," --installed\n",[252,117849,117850],{"class":254,"line":8197},[252,117851,2539],{"emptyLinePlaceholder":181},[252,117853,117854],{"class":254,"line":9856},[252,117855,117856],{"class":321},"#列出所有已安装的包的版本信息\n",[252,117858,117859,117861,117863],{"class":254,"line":9881},[252,117860,117504],{"class":2102},[252,117862,117507],{"class":367},[252,117864,117865],{"class":311}," --all-versions\n",[5266,117867,117868],{},"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":169,"searchDepth":170,"depth":170,"links":117870},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117415,"description":178},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117877,"title":117878,"body":117879,"description":178,"extension":179,"meta":118620,"navigation":181,"path":118621,"seo":118622,"stem":118623,"__hash__":118624},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117880,"toc":118607},[117881,117884,117888,117891,117897,117901,117905,117911,117916,117921,117926,117931,117936,117939,117942,117945,117948,117952,117955,117960,117963,117968,117971,117976,117983,117986,117989,117992,117995,117998,118009,118013,118017,118022,118027,118031,118036,118040,118045,118049,118053,118058,118061,118106,118111,118115,118119,118124,118130,118135,118145,118150,118160,118165,118170,118197,118201,118204,118209,118212,118237,118241,118246,118249,118254,118259,118279,118284,118287,118302,118306,118359,118362,118367,118371,118374,118389,118392,118395,118400,118404,118408,118411,118415,118419,118422,118427,118432,118436,118443,118451,118454,118461,118466,118471,118474,118479,118486,118491,118498,118502,118504,118509,118513,118516,118519,118524,118527,118532,118535,118540,118545,118550,118554,118559,118563,118604],[10,117882,117878],{"id":117883},"_2-linux装机教程",[14,117885,117887],{"id":117886},"_21-实体机","2.1 实体机",[19,117889,117890],{},"使用清华源：（Ubuntu24.04）",[19,117892,117893],{},[501,117894,117895],{"href":117895,"rel":117896},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24004],[14,117898,117900],{"id":117899},"_22-普通虚拟机","2.2 普通虚拟机",[224,117902,117904],{"id":117903},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,117906,117907],{},[501,117908,117909],{"href":117909,"rel":117910},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24004],[19,117912,117913],{},[1601,117914],{"alt":169,"src":117915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,117917,117918],{},[1601,117919],{"alt":169,"src":117920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,117922,117923],{},[1601,117924],{"alt":169,"src":117925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,117927,117928],{},[1601,117929],{"alt":169,"src":117930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,117932,117933],{},[1601,117934],{"alt":169,"src":117935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,117937,117938],{},"内存4G（4096MB）；",[19,117940,117941],{},"CPU给4个核；",[19,117943,117944],{},"硬盘动态分配60G；",[19,117946,117947],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[224,117949,117951],{"id":117950},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,117953,117954],{},"按照1.1的步骤下载Ubuntu",[19,117956,117957],{},[1601,117958],{"alt":169,"src":117959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,117961,117962],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,117964,117965],{},[1601,117966],{"alt":169,"src":117967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,117969,117970],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,117972,117973],{},[1601,117974],{"alt":169,"src":117975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,117977,117978,117979,117982],{},"选择“正常安装”(找不到都用Alt+F7)， ",[412,117980,117981],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,117984,117985],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,117987,117988],{},"将改动写入磁盘吗 继续",[19,117990,117991],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,117993,117994],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,117996,117997],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,117999,118000,118001,118004,118005,118008],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[412,118002,118003],{},"除了"," 选不发送系统信息与不升级之外， ",[412,118006,118007],{},"其它"," 都跳过或前进）",[224,118010,118012],{"id":118011},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22137,118014,118016],{"id":118015},"_2231-全屏","2.2.3.1 全屏",[19,118018,118019],{},[1601,118020],{"alt":169,"src":118021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118023,118024],{},[1601,118025],{"alt":169,"src":118026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22137,118028,118030],{"id":118029},"_2232-文件交换","2.2.3.2 文件交换",[19,118032,118033],{},[1601,118034],{"alt":169,"src":118035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22137,118037,118039],{"id":118038},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118041,118042],{},[1601,118043],{"alt":169,"src":118044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118046,118048],{"id":118047},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[224,118050,118052],{"id":118051},"_231-简介与优缺点","2.3.1 简介与优缺点",[207,118054,118055],{},[210,118056,118057],{},"什么情况下推荐？",[19,118059,118060],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[207,118062,118063],{"start":170},[210,118064,118065,118066],{},"优缺点：",[207,118067,118068,118098],{},[210,118069,118070,118071],{},"优点：",[207,118072,118073,118076,118083,118086,118089,118092,118095],{},[210,118074,118075],{},"WSL2是最好的Linux发行版;(bushi)",[210,118077,118078,118079,118082],{},"性能损耗极低。且比在Windows上跑深度性能 ",[412,118080,118081],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[210,118084,118085],{},"非常方便调用USB设备，可以USB直通;",[210,118087,118088],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[210,118090,118091],{},"非常方便Win与WSL2互相传文件等协同操作;",[210,118093,118094],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[210,118096,118097],{},"非常方便使用Windows的VScode远程开发;",[210,118099,118100,118101],{},"缺点：",[207,118102,118103],{},[210,118104,118105],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118107,118108],{},[1601,118109],{"alt":169,"src":118110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[224,118112,118114],{"id":118113},"_232-安装教程","2.3.2 安装教程",[22137,118116,118118],{"id":118117},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[207,118120,118121],{},[210,118122,118123],{},"方法一(图形界面)",[19,118125,118126,118127,24758],{},"用Win+R输入",[22,118128,118129],{},"appwiz.cpl",[19,118131,118132],{},[1601,118133],{"alt":169,"src":118134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118136,118137,118138,118141,118142,26613],{},"点击OK进入 ",[412,118139,118140],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[412,118143,118144],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118146,118147],{},[1601,118148],{"alt":169,"src":118149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118151,118152,118153,132,118156,118159],{},"选择 ",[412,118154,118155],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[412,118157,118158],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118161,118162],{},[1601,118163],{"alt":169,"src":118164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[207,118166,118167],{"start":170},[210,118168,118169],{},"方法二(命令行)",[244,118171,118175],{"className":118172,"code":118173,"language":118174,"meta":169,"style":169},"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",[22,118176,118177,118182,118187,118192],{"__ignoreMap":169},[252,118178,118179],{"class":254,"line":255},[252,118180,118181],{},"# 开启 Linux 子系统\n",[252,118183,118184],{"class":254,"line":170},[252,118185,118186],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[252,118188,118189],{"class":254,"line":1318},[252,118190,118191],{},"# 开启虚拟机平台\n",[252,118193,118194],{"class":254,"line":1333},[252,118195,118196],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22137,118198,118200],{"id":118199},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118202,118203],{},"用管理员权限打开powershell",[19,118205,118206],{},[1601,118207],{"alt":169,"src":118208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118210,118211],{},"升级WSL并设置默认版本为WSL2",[244,118213,118215],{"className":118172,"code":118214,"language":118174,"meta":169,"style":169},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[22,118216,118217,118222,118227,118232],{"__ignoreMap":169},[252,118218,118219],{"class":254,"line":255},[252,118220,118221],{},"# 更新 wsl\n",[252,118223,118224],{"class":254,"line":170},[252,118225,118226],{},"wsl --update\n",[252,118228,118229],{"class":254,"line":1318},[252,118230,118231],{},"# 将 wsl 版本设置为 wsl2\n",[252,118233,118234],{"class":254,"line":1333},[252,118235,118236],{},"wsl --set-default-version 2\n",[22137,118238,118240],{"id":118239},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[207,118242,118243],{},[210,118244,118245],{},"方式一(商店下载)",[19,118247,118248],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118250,118251],{},[1601,118252],{"alt":169,"src":118253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[207,118255,118256],{"start":170},[210,118257,118258],{},"方式二(命令行安装)",[244,118260,118262],{"className":118172,"code":118261,"language":118174,"meta":169,"style":169},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[22,118263,118264,118269,118274],{"__ignoreMap":169},[252,118265,118266],{"class":254,"line":255},[252,118267,118268],{},"# 列出可安装的 Linux 版本\n",[252,118270,118271],{"class":254,"line":170},[252,118272,118273],{},"#（需要科学手段）\n",[252,118275,118276],{"class":254,"line":1318},[252,118277,118278],{},"wsl --list --online\n",[19,118280,118281],{},[1601,118282],{"alt":169,"src":118283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118285,118286],{},"选择对应发行版并安装",[244,118288,118290],{"className":118172,"code":118289,"language":118174,"meta":169,"style":169},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[22,118291,118292,118297],{"__ignoreMap":169},[252,118293,118294],{"class":254,"line":255},[252,118295,118296],{},"# Ubuntu安装完毕后需要重启系统\n",[252,118298,118299],{"class":254,"line":170},[252,118300,118301],{},"wsl --install -d Ubuntu-24.04\n",[22137,118303,118305],{"id":118304},"_2324-查看系统状态","2.3.2.4 查看系统状态",[244,118307,118309],{"className":118172,"code":118308,"language":118174,"meta":169,"style":169},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[22,118310,118311,118316,118321,118326,118331,118335,118339,118344,118349,118354],{"__ignoreMap":169},[252,118312,118313],{"class":254,"line":255},[252,118314,118315],{},"# 查看 wsl\n",[252,118317,118318],{"class":254,"line":170},[252,118319,118320],{},"wsl -l\n",[252,118322,118323],{"class":254,"line":1318},[252,118324,118325],{},"# 查看 wsl 运行版本或模式\n",[252,118327,118328],{"class":254,"line":1333},[252,118329,118330],{},"wsl -l -v\n",[252,118332,118333],{"class":254,"line":1339},[252,118334,2539],{"emptyLinePlaceholder":181},[252,118336,118337],{"class":254,"line":1353},[252,118338,2539],{"emptyLinePlaceholder":181},[252,118340,118341],{"class":254,"line":1359},[252,118342,118343],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[252,118345,118346],{"class":254,"line":1450},[252,118347,118348],{},"wsl --set-version \u003Cdistro> 2\n",[252,118350,118351],{"class":254,"line":1456},[252,118352,118353],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[252,118355,118356],{"class":254,"line":1468},[252,118357,118358],{},"wsl --unregister \u003Cdistro>\n",[19,118360,118361],{},"输出Version为2即正常",[19,118363,118364],{},[1601,118365],{"alt":169,"src":118366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22137,118368,118370],{"id":118369},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118372,118373],{},"直接在Powershell里输入wsl命令进入子系统",[244,118375,118377],{"className":118172,"code":118376,"language":118174,"meta":169,"style":169},"# 进入子系统\nwsl\n",[22,118378,118379,118384],{"__ignoreMap":169},[252,118380,118381],{"class":254,"line":255},[252,118382,118383],{},"# 进入子系统\n",[252,118385,118386],{"class":254,"line":170},[252,118387,118388],{},"wsl\n",[19,118390,118391],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118393,118394],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118396,118397],{},[1601,118398],{"alt":169,"src":118399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[224,118401,118403],{"id":118402},"_233-配置各种环境","2.3.3 配置各种环境",[22137,118405,118407],{"id":118406},"_2331-换源","2.3.3.1 换源",[19,118409,118410],{},"(同实体机LINUX，往下找教程)",[22137,118412,118414],{"id":118413},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23049,118416,118418],{"id":118417},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118420,118421],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118423,118424],{},[1601,118425],{"alt":169,"src":118426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118428,118429],{},[1601,118430],{"alt":169,"src":118431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23049,118433,118435],{"id":118434},"_23322-cuda","2.3.3.2.2 CUDA",[19,118437,118438,118439],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[501,118440,118441],{"href":118441,"rel":118442},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24004],[19,118444,118445,118448],{},[1601,118446],{"alt":169,"src":118447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1601,118449],{"alt":169,"src":118450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118452,118453],{},"在下方的网站，选择合适的版本。",[19,118455,118456,118457],{},"WSL2 专属 CUDA 指南：",[501,118458,118459],{"href":118459,"rel":118460},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24004],[19,118462,118463],{},[412,118464,118465],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118467,118468],{},[1601,118469],{"alt":169,"src":118470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118472,118473],{},"挨行敲一遍",[19,118475,118476],{},[1601,118477],{"alt":169,"src":118478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118480,118481,118482,118485],{},"敲完后，输入",[22,118483,118484],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118487,118488],{},[1601,118489],{"alt":169,"src":118490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118492,118493,118494,118497],{},"（请详看下方教程的",[412,118495,118496],{},"安装CUDA的配置环境来看","如何配置环境）",[23049,118499,118501],{"id":118500},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118503,118410],{},[19,118505,118506],{},[1601,118507],{"alt":169,"src":118508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22137,118510,118512],{"id":118511},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118514,118515],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118517,118518],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118520,118521],{},[1601,118522],{"alt":169,"src":118523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118525,118526],{},"连接WSL2",[19,118528,118529],{},[1601,118530],{"alt":169,"src":118531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118533,118534],{},"远程开发成功。",[19,118536,118537],{},[1601,118538],{"alt":169,"src":118539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118541,118542],{},[1601,118543],{"alt":169,"src":118544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118546,118547],{},[1601,118548],{"alt":169,"src":118549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22137,118551,118553],{"id":118552},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118555,118556],{},[1601,118557],{"alt":169,"src":118558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22137,118560,118562],{"id":118561},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[244,118564,118566],{"className":117432,"code":118565,"language":117434,"meta":169,"style":169},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[22,118567,118568,118576,118584,118595,118599],{"__ignoreMap":169},[252,118569,118570,118572,118574],{"class":254,"line":255},[252,118571,24716],{"class":2102},[252,118573,117453],{"class":367},[252,118575,26382],{"class":367},[252,118577,118578,118580,118582],{"class":254,"line":170},[252,118579,24716],{"class":2102},[252,118581,117453],{"class":367},[252,118583,117469],{"class":367},[252,118585,118586,118588,118590,118592],{"class":254,"line":1318},[252,118587,24716],{"class":2102},[252,118589,117453],{"class":367},[252,118591,23973],{"class":367},[252,118593,118594],{"class":367}," mesa-utils\n",[252,118596,118597],{"class":254,"line":1333},[252,118598,2539],{"emptyLinePlaceholder":181},[252,118600,118601],{"class":254,"line":1339},[252,118602,118603],{"class":321},"#然后重启wsl2即可\n",[5266,118605,118606],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":169,"searchDepth":170,"depth":170,"links":118608},[118609,118610,118615],{"id":117886,"depth":170,"text":117887},{"id":117899,"depth":170,"text":117900,"children":118611},[118612,118613,118614],{"id":117903,"depth":1318,"text":117904},{"id":117950,"depth":1318,"text":117951},{"id":118011,"depth":1318,"text":118012},{"id":118047,"depth":170,"text":118048,"children":118616},[118617,118618,118619],{"id":118051,"depth":1318,"text":118052},{"id":118113,"depth":1318,"text":118114},{"id":118402,"depth":1318,"text":118403},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117878,"description":178},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118626,"title":118627,"body":118628,"description":178,"extension":179,"meta":121564,"navigation":181,"path":121565,"seo":121566,"stem":121567,"__hash__":121568},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118629,"toc":121536},[118630,118633,118637,118643,118647,118653,118657,118845,118848,118853,118857,118861,118864,118867,118873,118878,118881,118884,118889,118922,118927,118931,119008,119011,119016,119020,119023,119062,119065,119074,119092,119097,119104,119221,119226,119229,119256,119261,119265,119274,119324,119331,119335,119338,119352,119359,119393,119398,119402,119425,119428,119433,119437,119440,119443,119446,119488,119492,119495,119498,119539,119543,119547,119550,119555,119560,119563,119586,119589,119597,119602,119605,119610,119615,119618,119623,119627,119632,119655,119660,119722,119730,119735,119740,119743,119748,119751,119756,119761,119779,119784,119790,119795,119809,119813,119816,119819,119822,119865,119868,119873,119974,119977,119982,119986,119990,120027,120031,120035,120039,120085,120089,120134,120138,120145,120153,120208,120211,120288,120291,120314,120318,120321,120326,120331,120339,120342,120347,120352,120357,120360,120365,120374,120377,120382,120385,120456,120461,120464,120469,120472,120477,120480,120485,120488,120493,120498,120501,120576,120579,120592,120597,120600,120614,120617,120646,120651,120680,120683,120688,120692,120697,120706,120709,120714,120717,120722,120725,120728,120733,120736,120741,120746,120749,120754,120757,120882,120887,120917,120920,120925,120930,120947,120950,120993,120996,121023,121028,121041,121184,121188,121193,121207,121210,121261,121264,121294,121297,121313,121318,121332,121335,121402,121407,121416,121421,121424,121436,121441,121448,121472,121475,121480,121483,121502,121507,121514,121526,121533],[10,118631,118627],{"id":118632},"_3-安装必备配置",[14,118634,118636],{"id":118635},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[244,118638,118641],{"className":118639,"code":118640,"language":5327},[5325],"  打开下方网站（注意，该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",[22,118642,118640],{"__ignoreMap":169},[224,118644,118646],{"id":118645},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[244,118648,118651],{"className":118649,"code":118650,"language":5327},[5325],"  输入以下命令\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",[22,118652,118650],{"__ignoreMap":169},[224,118654,118656],{"id":118655},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[244,118658,118662],{"className":118659,"code":118660,"language":118661,"meta":169,"style":169},"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",[22,118663,118664,118672,118683,118695,118709,118713,118723,118728,118732,118736,118741,118745,118757,118761,118766,118770,118781,118785,118801,118805,118816,118820,118825,118829,118837],{"__ignoreMap":169},[252,118665,118666,118668,118670],{"class":254,"line":255},[252,118667,24716],{"class":2102},[252,118669,117453],{"class":367},[252,118671,26382],{"class":367},[252,118673,118674,118676,118678,118680],{"class":254,"line":170},[252,118675,24716],{"class":2102},[252,118677,117453],{"class":367},[252,118679,23973],{"class":367},[252,118681,118682],{"class":367}," vim\n",[252,118684,118685,118687,118690,118692],{"class":254,"line":1318},[252,118686,24716],{"class":2102},[252,118688,118689],{"class":367}," rm",[252,118691,25465],{"class":311},[252,118693,118694],{"class":367}," \u002Fetc\u002Fapt\u002Fsources.list\n",[252,118696,118697,118699,118701,118703,118706],{"class":254,"line":1333},[252,118698,24716],{"class":2102},[252,118700,118689],{"class":367},[252,118702,25465],{"class":311},[252,118704,118705],{"class":367}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[252,118707,118708],{"class":311},"**\n",[252,118710,118711],{"class":254,"line":1339},[252,118712,2539],{"emptyLinePlaceholder":181},[252,118714,118715,118717,118720],{"class":254,"line":1353},[252,118716,24716],{"class":2102},[252,118718,118719],{"class":367}," vim",[252,118721,118722],{"class":367}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[252,118724,118725],{"class":254,"line":1359},[252,118726,118727],{"class":367},"```\n",[252,118729,118730],{"class":254,"line":1450},[252,118731,2539],{"emptyLinePlaceholder":181},[252,118733,118734],{"class":254,"line":1456},[252,118735,2539],{"emptyLinePlaceholder":181},[252,118737,118738],{"class":254,"line":1468},[252,118739,118740],{"class":2102},"选择好Ubuntu版本后，复制下方的内容。\n",[252,118742,118743],{"class":254,"line":1751},[252,118744,2539],{"emptyLinePlaceholder":181},[252,118746,118747,118749,118752,118755],{"class":254,"line":1756},[252,118748,489],{"class":258},[252,118750,118751],{"class":367},"[](",[252,118753,118754],{"class":2102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[252,118756,269],{"class":367},[252,118758,118759],{"class":254,"line":1762},[252,118760,2539],{"emptyLinePlaceholder":181},[252,118762,118763],{"class":254,"line":1767},[252,118764,118765],{"class":2102},"粘贴进去\n",[252,118767,118768],{"class":254,"line":1781},[252,118769,2539],{"emptyLinePlaceholder":181},[252,118771,118772,118774,118776,118779],{"class":254,"line":1786},[252,118773,489],{"class":258},[252,118775,118751],{"class":367},[252,118777,118778],{"class":2102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[252,118780,269],{"class":367},[252,118782,118783],{"class":254,"line":1792},[252,118784,2539],{"emptyLinePlaceholder":181},[252,118786,118787,118790,118793,118796,118798],{"class":254,"line":1813},[252,118788,118789],{"class":2102},"按一下ESC，然后英文冒号，输入",[252,118791,118792],{"class":367}," `",[252,118794,118795],{"class":2102},":wq!",[252,118797,1235],{"class":367},[252,118799,118800],{"class":2102},"然后回车\n",[252,118802,118803],{"class":254,"line":1818},[252,118804,2539],{"emptyLinePlaceholder":181},[252,118806,118807,118809,118811,118814],{"class":254,"line":1832},[252,118808,489],{"class":258},[252,118810,118751],{"class":367},[252,118812,118813],{"class":2102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[252,118815,269],{"class":367},[252,118817,118818],{"class":254,"line":1837},[252,118819,2539],{"emptyLinePlaceholder":181},[252,118821,118822],{"class":254,"line":1866},[252,118823,118824],{"class":2102},"输入以下命令\n",[252,118826,118827],{"class":254,"line":1871},[252,118828,2539],{"emptyLinePlaceholder":181},[252,118830,118831,118834],{"class":254,"line":1888},[252,118832,118833],{"class":367},"```",[252,118835,118836],{"class":2102},"Bash\n",[252,118838,118839,118841,118843],{"class":254,"line":1893},[252,118840,24716],{"class":2102},[252,118842,117453],{"class":367},[252,118844,26382],{"class":367},[19,118846,118847],{},"这里被替换成对应学校则成功",[19,118849,118850],{},[1601,118851],{"alt":169,"src":118852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118854,118856],{"id":118855},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[224,118858,118860],{"id":118859},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,118862,118863],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,118865,118866],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,118868,118869],{},[501,118870,118871],{"href":118871,"rel":118872},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24004],[19,118874,118875],{},[1601,118876],{"alt":169,"src":118877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,118879,118880],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,118882,118883],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,118885,118886],{},[1601,118887],{"alt":169,"src":118888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[244,118890,118892],{"className":117432,"code":118891,"language":117434,"meta":169,"style":169},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[22,118893,118894,118899,118906,118911],{"__ignoreMap":169},[252,118895,118896],{"class":254,"line":255},[252,118897,118898],{"class":321},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[252,118900,118901,118903],{"class":254,"line":170},[252,118902,101413],{"class":311},[252,118904,118905],{"class":367}," ~\u002FDownloads\n",[252,118907,118908],{"class":254,"line":1318},[252,118909,118910],{"class":321},"#下方chrome安装包名不一定是这个，根据名字来看\n",[252,118912,118913,118915,118917,118919],{"class":254,"line":1333},[252,118914,24716],{"class":2102},[252,118916,117453],{"class":367},[252,118918,23973],{"class":367},[252,118920,118921],{"class":367}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,118923,118924],{},[1601,118925],{"alt":169,"src":118926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[224,118928,118930],{"id":118929},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[244,118932,118934],{"className":117432,"code":118933,"language":117434,"meta":169,"style":169},"# 老版\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",[22,118935,118936,118941,118949,118960,118965,118969,118974,118984,118992,119003],{"__ignoreMap":169},[252,118937,118938],{"class":254,"line":255},[252,118939,118940],{"class":321},"# 老版\n",[252,118942,118943,118945,118947],{"class":254,"line":170},[252,118944,24716],{"class":2102},[252,118946,117453],{"class":367},[252,118948,26382],{"class":367},[252,118950,118951,118953,118955,118957],{"class":254,"line":1318},[252,118952,24716],{"class":2102},[252,118954,117453],{"class":367},[252,118956,23973],{"class":367},[252,118958,118959],{"class":367}," neofetch\n",[252,118961,118962],{"class":254,"line":1333},[252,118963,118964],{"class":2102},"neofetch\n",[252,118966,118967],{"class":254,"line":1339},[252,118968,2539],{"emptyLinePlaceholder":181},[252,118970,118971],{"class":254,"line":1353},[252,118972,118973],{"class":321},"# 新版\n",[252,118975,118976,118978,118981],{"class":254,"line":1359},[252,118977,24716],{"class":2102},[252,118979,118980],{"class":367}," add-apt-repository",[252,118982,118983],{"class":367}," ppa:zhangsongcui3371\u002Ffastfetch\n",[252,118985,118986,118988,118990],{"class":254,"line":1450},[252,118987,24716],{"class":2102},[252,118989,117453],{"class":367},[252,118991,26382],{"class":367},[252,118993,118994,118996,118998,119000],{"class":254,"line":1456},[252,118995,24716],{"class":2102},[252,118997,117453],{"class":367},[252,118999,23973],{"class":367},[252,119001,119002],{"class":367}," fastfetch\n",[252,119004,119005],{"class":254,"line":1468},[252,119006,119007],{"class":2102},"fastfetch\n",[19,119009,119010],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119012,119013],{},[1601,119014],{"alt":169,"src":119015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[224,119017,119019],{"id":119018},"_323-移除snap应用","3.2.3 移除snap应用",[19,119021,119022],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[244,119024,119026],{"className":117432,"code":119025,"language":117434,"meta":169,"style":169},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[22,119027,119028,119040,119051],{"__ignoreMap":169},[252,119029,119030,119032,119034,119037],{"class":254,"line":255},[252,119031,24716],{"class":2102},[252,119033,26653],{"class":367},[252,119035,119036],{"class":367}," disable",[252,119038,119039],{"class":367}," snapd.service\n",[252,119041,119042,119044,119046,119048],{"class":254,"line":170},[252,119043,24716],{"class":2102},[252,119045,26653],{"class":367},[252,119047,119036],{"class":367},[252,119049,119050],{"class":367}," snapd.socket\n",[252,119052,119053,119055,119057,119059],{"class":254,"line":1318},[252,119054,24716],{"class":2102},[252,119056,26653],{"class":367},[252,119058,119036],{"class":367},[252,119060,119061],{"class":367}," snapd.seeded.service\n",[19,119063,119064],{},"然后查看snap应用列表",[19,119066,119067,119068,119073],{},"根据你安装的选择不同（最小安装或普通安装），有",[501,119069,119072],{"href":119070,"rel":119071},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24004],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[244,119075,119077],{"className":117432,"code":119076,"language":117434,"meta":169,"style":169},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[22,119078,119079,119084],{"__ignoreMap":169},[252,119080,119081],{"class":254,"line":255},[252,119082,119083],{"class":321},"# 查询当前系统上snap安装了哪些app\n",[252,119085,119086,119089],{"class":254,"line":170},[252,119087,119088],{"class":2102},"snap",[252,119090,119091],{"class":367}," list\n",[19,119093,119094],{},[1601,119095],{"alt":169,"src":119096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119098,119099,119100,119103],{},"卸载掉图中所有应用，按照 ",[412,119101,119102],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[244,119105,119107],{"className":117432,"code":119106,"language":117434,"meta":169,"style":169},"#移除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",[22,119108,119109,119114,119126,119131,119142,119147,119158,119163,119174,119179,119183,119188,119199,119210],{"__ignoreMap":169},[252,119110,119111],{"class":254,"line":255},[252,119112,119113],{"class":321},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[252,119115,119116,119118,119121,119123],{"class":254,"line":170},[252,119117,24716],{"class":2102},[252,119119,119120],{"class":367}," snap",[252,119122,26219],{"class":367},[252,119124,119125],{"class":367}," snap-store\n",[252,119127,119128],{"class":254,"line":1318},[252,119129,119130],{"class":321},"#移除firefox浏览器\n",[252,119132,119133,119135,119137,119139],{"class":254,"line":1333},[252,119134,24716],{"class":2102},[252,119136,119120],{"class":367},[252,119138,26219],{"class":367},[252,119140,119141],{"class":367}," firefox\n",[252,119143,119144],{"class":254,"line":1339},[252,119145,119146],{"class":321},"#移除gnome-42-2204\n",[252,119148,119149,119151,119153,119155],{"class":254,"line":1353},[252,119150,24716],{"class":2102},[252,119152,119120],{"class":367},[252,119154,26219],{"class":367},[252,119156,119157],{"class":367}," gnome-42-2204\n",[252,119159,119160],{"class":254,"line":1359},[252,119161,119162],{"class":321},"#移除gtk-common-themes\n",[252,119164,119165,119167,119169,119171],{"class":254,"line":1450},[252,119166,24716],{"class":2102},[252,119168,119120],{"class":367},[252,119170,26219],{"class":367},[252,119172,119173],{"class":367}," gtk-common-themes\n",[252,119175,119176],{"class":254,"line":1456},[252,119177,119178],{"class":321},"#移除其它...\n",[252,119180,119181],{"class":254,"line":1468},[252,119182,2813],{"class":262},[252,119184,119185],{"class":254,"line":1751},[252,119186,119187],{"class":321},"#移除core22,bare以及snapd\n",[252,119189,119190,119192,119194,119196],{"class":254,"line":1756},[252,119191,24716],{"class":2102},[252,119193,119120],{"class":367},[252,119195,26219],{"class":367},[252,119197,119198],{"class":367}," core22\n",[252,119200,119201,119203,119205,119207],{"class":254,"line":1762},[252,119202,24716],{"class":2102},[252,119204,119120],{"class":367},[252,119206,26219],{"class":367},[252,119208,119209],{"class":367}," bare\n",[252,119211,119212,119214,119216,119218],{"class":254,"line":1767},[252,119213,24716],{"class":2102},[252,119215,119120],{"class":367},[252,119217,26219],{"class":367},[252,119219,119220],{"class":367}," snapd\n",[19,119222,119223],{},[1601,119224],{"alt":169,"src":119225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119227,119228],{},"输入以下命令查看是否还有snap包",[244,119230,119232],{"className":117432,"code":119231,"language":117434,"meta":169,"style":169},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[22,119233,119234,119240,119244,119248,119252],{"__ignoreMap":169},[252,119235,119236,119238],{"class":254,"line":255},[252,119237,119088],{"class":2102},[252,119239,119091],{"class":367},[252,119241,119242],{"class":254,"line":170},[252,119243,118940],{"class":321},[252,119245,119246],{"class":254,"line":1318},[252,119247,118964],{"class":2102},[252,119249,119250],{"class":254,"line":1333},[252,119251,118973],{"class":321},[252,119253,119254],{"class":254,"line":1339},[252,119255,119007],{"class":2102},[19,119257,119258],{},[1601,119259],{"alt":169,"src":119260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[224,119262,119264],{"id":119263},"_324-移除snap","3.2.4 移除snap",[19,119266,119267,119268,119273],{},"在删除掉",[501,119269,119272],{"href":119270,"rel":119271},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24004],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[244,119275,119277],{"className":117432,"code":119276,"language":117434,"meta":169,"style":169}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[22,119278,119279,119284,119297,119302,119313],{"__ignoreMap":169},[252,119280,119281],{"class":254,"line":255},[252,119282,119283],{"class":321}," #使用apt移除掉snap\n",[252,119285,119286,119288,119290,119292,119295],{"class":254,"line":170},[252,119287,24716],{"class":2102},[252,119289,117453],{"class":367},[252,119291,117761],{"class":367},[252,119293,119294],{"class":311}," --purge",[252,119296,119220],{"class":367},[252,119298,119299],{"class":254,"line":1318},[252,119300,119301],{"class":321},"#移除snapd的一些目录\n",[252,119303,119304,119306,119308,119310],{"class":254,"line":1333},[252,119305,24716],{"class":2102},[252,119307,118689],{"class":367},[252,119309,25465],{"class":311},[252,119311,119312],{"class":367}," \u002Fvar\u002Fcache\u002Fsnapd\n",[252,119314,119315,119317,119319,119321],{"class":254,"line":1339},[252,119316,24716],{"class":2102},[252,119318,118689],{"class":367},[252,119320,25465],{"class":311},[252,119322,119323],{"class":367}," ~\u002Fsnap\n",[19,119325,119326,119327,119330],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[22,119328,119329],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[224,119332,119334],{"id":119333},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119336,119337],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[244,119339,119341],{"className":117432,"code":119340,"language":117434,"meta":169,"style":169},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[22,119342,119343],{"__ignoreMap":169},[252,119344,119345,119347,119349],{"class":254,"line":255},[252,119346,24716],{"class":2102},[252,119348,118719],{"class":367},[252,119350,119351],{"class":367}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119353,119354,119355,119358],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[22,119356,119357],{},":wq"," 回车",[244,119360,119362],{"className":117432,"code":119361,"language":117434,"meta":169,"style":169},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[22,119363,119364,119371,119385],{"__ignoreMap":169},[252,119365,119366,119369],{"class":254,"line":255},[252,119367,119368],{"class":2102},"Package:",[252,119370,119220],{"class":367},[252,119372,119373,119376,119379,119382],{"class":254,"line":170},[252,119374,119375],{"class":2102},"Pin:",[252,119377,119378],{"class":367}," release",[252,119380,119381],{"class":367}," a=",[252,119383,119384],{"class":311},"*\n",[252,119386,119387,119390],{"class":254,"line":1318},[252,119388,119389],{"class":2102},"Pin-Priority:",[252,119391,119392],{"class":311}," -10\n",[19,119394,119395],{},[1601,119396],{"alt":169,"src":119397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[224,119399,119401],{"id":119400},"_326-测试是否成功","3.2.6 测试是否成功",[244,119403,119405],{"className":117432,"code":119404,"language":117434,"meta":169,"style":169},"sudo apt update\nsudo apt install firefox\n",[22,119406,119407,119415],{"__ignoreMap":169},[252,119408,119409,119411,119413],{"class":254,"line":255},[252,119410,24716],{"class":2102},[252,119412,117453],{"class":367},[252,119414,26382],{"class":367},[252,119416,119417,119419,119421,119423],{"class":254,"line":170},[252,119418,24716],{"class":2102},[252,119420,117453],{"class":367},[252,119422,23973],{"class":367},[252,119424,119141],{"class":367},[19,119426,119427],{},"这里提示snapd无法被安装，就证明成功了",[19,119429,119430],{},[1601,119431],{"alt":169,"src":119432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[224,119434,119436],{"id":119435},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119438,119439],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119441,119442],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119444,119445],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[244,119447,119449],{"className":117432,"code":119448,"language":117434,"meta":169,"style":169},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[22,119450,119451,119456,119465,119470,119478],{"__ignoreMap":169},[252,119452,119453],{"class":254,"line":255},[252,119454,119455],{"class":321},"# 添加Mozilla提供的源\n",[252,119457,119458,119460,119462],{"class":254,"line":170},[252,119459,24716],{"class":2102},[252,119461,118980],{"class":367},[252,119463,119464],{"class":367}," ppa:mozillateam\u002Fppa\n",[252,119466,119467],{"class":254,"line":1318},[252,119468,119469],{"class":321},"# 安装Firefox\n",[252,119471,119472,119474,119476],{"class":254,"line":1333},[252,119473,24716],{"class":2102},[252,119475,117453],{"class":367},[252,119477,26382],{"class":367},[252,119479,119480,119482,119484,119486],{"class":254,"line":1339},[252,119481,24716],{"class":2102},[252,119483,117453],{"class":367},[252,119485,23973],{"class":367},[252,119487,119141],{"class":367},[224,119489,119491],{"id":119490},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119493,119494],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119496,119497],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[244,119499,119501],{"className":117432,"code":119500,"language":117434,"meta":169,"style":169},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[22,119502,119503,119508,119518,119526,119530],{"__ignoreMap":169},[252,119504,119505],{"class":254,"line":255},[252,119506,119507],{"class":321},"#删掉禁止安装snap的配置文件\n",[252,119509,119510,119512,119514,119516],{"class":254,"line":170},[252,119511,24716],{"class":2102},[252,119513,118689],{"class":367},[252,119515,25465],{"class":311},[252,119517,119351],{"class":367},[252,119519,119520,119522,119524],{"class":254,"line":1318},[252,119521,24716],{"class":2102},[252,119523,117453],{"class":367},[252,119525,26382],{"class":367},[252,119527,119528],{"class":254,"line":1333},[252,119529,2539],{"emptyLinePlaceholder":181},[252,119531,119532,119534,119536],{"class":254,"line":1339},[252,119533,24716],{"class":2102},[252,119535,117453],{"class":367},[252,119537,119538],{"class":367}," dist-update\n",[14,119540,119542],{"id":119541},"_33-中文输入法","3.3 中文输入法",[224,119544,119546],{"id":119545},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119548,119549],{},"官网下载搜狗输入法",[19,119551,119552],{},[1601,119553],{"alt":169,"src":119554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119556,119557],{},[1601,119558],{"alt":169,"src":119559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119561,119562],{},"打开终端输入如下",[244,119564,119566],{"className":117432,"code":119565,"language":117434,"meta":169,"style":169},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[22,119567,119568,119575],{"__ignoreMap":169},[252,119569,119570,119572],{"class":254,"line":255},[252,119571,101413],{"class":311},[252,119573,119574],{"class":367}," ~\u002FDownloads\u002F\n",[252,119576,119577,119579,119581,119583],{"class":254,"line":170},[252,119578,24716],{"class":2102},[252,119580,117453],{"class":367},[252,119582,23973],{"class":367},[252,119584,119585],{"class":367}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119587,119588],{},"打开Fcitx",[19,119590,119591,119594],{},[1601,119592],{"alt":169,"src":119593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1601,119595],{"alt":169,"src":119596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119598,119599],{},[1601,119600],{"alt":169,"src":119601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119603,119604],{},"添加搜狗输入法",[19,119606,119607],{},[1601,119608],{"alt":169,"src":119609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119611,119612],{},[1601,119613],{"alt":169,"src":119614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119616,119617],{},"将搜狗输入法设置为唯一输入法",[19,119619,119620],{},[1601,119621],{"alt":169,"src":119622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[224,119624,119626],{"id":119625},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[207,119628,119629],{},[210,119630,119631],{},"卸载旧输入法",[244,119633,119635],{"className":118659,"code":119634,"language":118661,"meta":169,"style":169},"sudo apt purge fcitx* ibus*\n",[22,119636,119637],{"__ignoreMap":169},[252,119638,119639,119641,119643,119645,119648,119650,119653],{"class":254,"line":255},[252,119640,24716],{"class":2102},[252,119642,117453],{"class":367},[252,119644,117794],{"class":367},[252,119646,119647],{"class":367}," fcitx",[252,119649,718],{"class":311},[252,119651,119652],{"class":367}," ibus",[252,119654,119384],{"class":311},[207,119656,119657],{"start":170},[210,119658,119659],{},"安装Fcitx5",[244,119661,119663],{"className":117432,"code":119662,"language":117434,"meta":169,"style":169},"# 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",[22,119664,119665,119670,119684,119688,119693,119702,119710],{"__ignoreMap":169},[252,119666,119667],{"class":254,"line":255},[252,119668,119669],{"class":321},"# Ubuntu22.04及以上、Debian12及以上\n",[252,119671,119672,119674,119676,119678,119681],{"class":254,"line":170},[252,119673,24716],{"class":2102},[252,119675,117453],{"class":367},[252,119677,23973],{"class":367},[252,119679,119680],{"class":367}," fcitx5",[252,119682,119683],{"class":367}," fcitx5-chinese-addons\n",[252,119685,119686],{"class":254,"line":1318},[252,119687,2539],{"emptyLinePlaceholder":181},[252,119689,119690],{"class":254,"line":1333},[252,119691,119692],{"class":321},"# Ubuntu20.04\n",[252,119694,119695,119697,119699],{"class":254,"line":1339},[252,119696,24716],{"class":2102},[252,119698,118980],{"class":367},[252,119700,119701],{"class":367}," ppa:zhsj\u002Ffcitx5\n",[252,119703,119704,119706,119708],{"class":254,"line":1353},[252,119705,24716],{"class":2102},[252,119707,117453],{"class":367},[252,119709,26382],{"class":367},[252,119711,119712,119714,119716,119718,119720],{"class":254,"line":1359},[252,119713,24716],{"class":2102},[252,119715,117453],{"class":367},[252,119717,23973],{"class":367},[252,119719,119680],{"class":367},[252,119721,119683],{"class":367},[207,119723,119724,119727],{"start":1318},[210,119725,119726],{},"Reboot System",[210,119728,119729],{},"启动Fcitx5",[19,119731,119732],{},[1601,119733],{"alt":169,"src":119734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[207,119736,119737],{"start":1339},[210,119738,119739],{},"修改一些设置",[19,119741,119742],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119744,119745],{},[1601,119746],{"alt":169,"src":119747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119749,119750],{},"添加快捷键以便于更好切换中英文",[19,119752,119753],{},[1601,119754],{"alt":169,"src":119755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[207,119757,119758],{"start":1353},[210,119759,119760],{},"重启",[244,119762,119764],{"className":118659,"code":119763,"language":118661,"meta":169,"style":169},"sudo shutdown -r now\n",[22,119765,119766],{"__ignoreMap":169},[252,119767,119768,119770,119773,119776],{"class":254,"line":255},[252,119769,24716],{"class":2102},[252,119771,119772],{"class":367}," shutdown",[252,119774,119775],{"class":311}," -r",[252,119777,119778],{"class":367}," now\n",[207,119780,119781],{"start":1359},[210,119782,119783],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,119785,119786],{},[501,119787,119788],{"href":119788,"rel":119789},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24004],[207,119791,119792],{"start":1450},[210,119793,119794],{},"再重启",[244,119796,119797],{"className":118659,"code":119763,"language":118661,"meta":169,"style":169},[22,119798,119799],{"__ignoreMap":169},[252,119800,119801,119803,119805,119807],{"class":254,"line":255},[252,119802,24716],{"class":2102},[252,119804,119772],{"class":367},[252,119806,119775],{"class":311},[252,119808,119778],{"class":367},[14,119810,119812],{"id":119811},"_34-pip3源替换","3.4 pip3源替换",[19,119814,119815],{},"非Debian系发行版需要做。",[19,119817,119818],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,119820,119821],{},"使用dnf的系统也可能不用做。",[244,119823,119825],{"className":117432,"code":119824,"language":117434,"meta":169,"style":169},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[22,119826,119827,119832,119839,119844,119849],{"__ignoreMap":169},[252,119828,119829],{"class":254,"line":255},[252,119830,119831],{"class":321},"# 检查是否已安装 pip\n",[252,119833,119834,119837],{"class":254,"line":170},[252,119835,119836],{"class":2102},"pip3",[252,119838,26433],{"class":311},[252,119840,119841],{"class":254,"line":1318},[252,119842,119843],{"class":321},"# 如果未安装，先安装 pip3（见下方）\n",[252,119845,119846],{"class":254,"line":1333},[252,119847,119848],{"class":321},"# 配置 pip 使用清华源\n",[252,119850,119851,119853,119856,119859,119862],{"class":254,"line":1339},[252,119852,119836],{"class":2102},[252,119854,119855],{"class":367}," config",[252,119857,119858],{"class":367}," set",[252,119860,119861],{"class":367}," global.index-url",[252,119863,119864],{"class":367}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,119866,119867],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,119869,119870],{},[1601,119871],{"alt":169,"src":119872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[244,119874,119876],{"className":117432,"code":119875,"language":117434,"meta":169,"style":169},"#安装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",[22,119877,119878,119883,119891,119902,119906,119911,119930,119934,119939,119951,119955,119960],{"__ignoreMap":169},[252,119879,119880],{"class":254,"line":255},[252,119881,119882],{"class":321},"#安装pip3\n",[252,119884,119885,119887,119889],{"class":254,"line":170},[252,119886,24716],{"class":2102},[252,119888,117453],{"class":367},[252,119890,26382],{"class":367},[252,119892,119893,119895,119897,119899],{"class":254,"line":1318},[252,119894,24716],{"class":2102},[252,119896,26216],{"class":367},[252,119898,23973],{"class":367},[252,119900,119901],{"class":367}," python3-pip\n",[252,119903,119904],{"class":254,"line":1333},[252,119905,2539],{"emptyLinePlaceholder":181},[252,119907,119908],{"class":254,"line":1339},[252,119909,119910],{"class":321},"#更新pip3\n",[252,119912,119913,119915,119917,119919,119921,119923,119926,119928],{"class":254,"line":1353},[252,119914,101017],{"class":2102},[252,119916,101020],{"class":311},[252,119918,101043],{"class":367},[252,119920,23973],{"class":367},[252,119922,26570],{"class":311},[252,119924,119925],{"class":367}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[252,119927,101048],{"class":311},[252,119929,101051],{"class":367},[252,119931,119932],{"class":254,"line":1359},[252,119933,2539],{"emptyLinePlaceholder":181},[252,119935,119936],{"class":254,"line":1450},[252,119937,119938],{"class":321},"#设置pip源为清华源\n",[252,119940,119941,119943,119945,119947,119949],{"class":254,"line":1456},[252,119942,119836],{"class":2102},[252,119944,119855],{"class":367},[252,119946,119858],{"class":367},[252,119948,119861],{"class":367},[252,119950,119864],{"class":367},[252,119952,119953],{"class":254,"line":1468},[252,119954,2539],{"emptyLinePlaceholder":181},[252,119956,119957],{"class":254,"line":1751},[252,119958,119959],{"class":321},"#测试\n",[252,119961,119962,119964,119966,119968,119970,119972],{"class":254,"line":1756},[252,119963,101017],{"class":2102},[252,119965,101020],{"class":311},[252,119967,101043],{"class":367},[252,119969,23973],{"class":367},[252,119971,101048],{"class":311},[252,119973,101051],{"class":367},[19,119975,119976],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,119978,119979],{},[1601,119980],{"alt":169,"src":119981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,119983,119985],{"id":119984},"_35-显卡驱动安装","3.5 显卡驱动安装",[224,119987,119989],{"id":119988},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[244,119991,119993],{"className":118659,"code":119992,"language":118661,"meta":169,"style":169},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[22,119994,119995,120000,120015,120020],{"__ignoreMap":169},[252,119996,119997],{"class":254,"line":255},[252,119998,119999],{"class":321},"# 如果是使用apt安装的驱动\n",[252,120001,120002,120004,120006,120008,120010,120013],{"class":254,"line":170},[252,120003,24716],{"class":2102},[252,120005,26216],{"class":367},[252,120007,26219],{"class":367},[252,120009,119294],{"class":311},[252,120011,120012],{"class":367}," nvidia",[252,120014,119384],{"class":311},[252,120016,120017],{"class":254,"line":1318},[252,120018,120019],{"class":321},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[252,120021,120022,120024],{"class":254,"line":1333},[252,120023,24716],{"class":2102},[252,120025,120026],{"class":367}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[224,120028,120030],{"id":120029},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22137,120032,120034],{"id":120033},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23049,120036,120038],{"id":120037},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[244,120040,120042],{"className":118659,"code":120041,"language":118661,"meta":169,"style":169},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[22,120043,120044,120049,120060,120065,120075,120080],{"__ignoreMap":169},[252,120045,120046],{"class":254,"line":255},[252,120047,120048],{"class":321},"# 安装英伟达驱动\n",[252,120050,120051,120053,120055,120057],{"class":254,"line":170},[252,120052,24716],{"class":2102},[252,120054,117453],{"class":367},[252,120056,23973],{"class":367},[252,120058,120059],{"class":367}," nvidia-driver-版本号\n",[252,120061,120062],{"class":254,"line":1318},[252,120063,120064],{"class":321},"# 重启 \n",[252,120066,120067,120069,120071,120073],{"class":254,"line":1333},[252,120068,24716],{"class":2102},[252,120070,119772],{"class":367},[252,120072,119775],{"class":311},[252,120074,119778],{"class":367},[252,120076,120077],{"class":254,"line":1339},[252,120078,120079],{"class":321},"# 检查驱动是否安装成功\n",[252,120081,120082],{"class":254,"line":1353},[252,120083,120084],{"class":2102},"nvidia-smi\n",[23049,120086,120088],{"id":120087},"_35212-debian","3.5.2.1.2 Debian",[244,120090,120092],{"className":118659,"code":120091,"language":118661,"meta":169,"style":169},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[22,120093,120094,120098,120112,120116,120126,120130],{"__ignoreMap":169},[252,120095,120096],{"class":254,"line":255},[252,120097,120048],{"class":321},[252,120099,120100,120102,120104,120106,120109],{"class":254,"line":170},[252,120101,24716],{"class":2102},[252,120103,117453],{"class":367},[252,120105,23973],{"class":367},[252,120107,120108],{"class":367}," nvidia-driver",[252,120110,120111],{"class":367}," nvidia-settings\n",[252,120113,120114],{"class":254,"line":1318},[252,120115,120064],{"class":321},[252,120117,120118,120120,120122,120124],{"class":254,"line":1333},[252,120119,24716],{"class":2102},[252,120121,119772],{"class":367},[252,120123,119775],{"class":311},[252,120125,119778],{"class":367},[252,120127,120128],{"class":254,"line":1339},[252,120129,120079],{"class":321},[252,120131,120132],{"class":254,"line":1353},[252,120133,120084],{"class":2102},[22137,120135,120137],{"id":120136},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120139,120140,120141,120144],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[412,120142,120143],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120146,120147,120148],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23692,120149,120150],{},[412,120151,120152],{},"（也可以不禁用桌面环境，直接进行下一步。）",[244,120154,120156],{"className":118659,"code":120155,"language":118661,"meta":169,"style":169},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[22,120157,120158,120163,120173,120178,120191,120196],{"__ignoreMap":169},[252,120159,120160],{"class":254,"line":255},[252,120161,120162],{"class":321},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[252,120164,120165,120167,120170],{"class":254,"line":170},[252,120166,24716],{"class":2102},[252,120168,120169],{"class":367}," telinit",[252,120171,120172],{"class":311}," 3\n",[252,120174,120175],{"class":254,"line":1318},[252,120176,120177],{"class":321},"# ubuntu 使用下方命令\n",[252,120179,120180,120182,120185,120188],{"class":254,"line":1333},[252,120181,24716],{"class":2102},[252,120183,120184],{"class":367}," service",[252,120186,120187],{"class":367}," lightdm",[252,120189,120190],{"class":367}," stop\n",[252,120192,120193],{"class":254,"line":1339},[252,120194,120195],{"class":321},"# Fedora 使用下方命令\n",[252,120197,120198,120200,120202,120205],{"class":254,"line":1353},[252,120199,24716],{"class":2102},[252,120201,26653],{"class":367},[252,120203,120204],{"class":367}," isolate",[252,120206,120207],{"class":367}," multi-user.target\n",[19,120209,120210],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[244,120212,120214],{"className":118659,"code":120213,"language":118661,"meta":169,"style":169},"# 编译环境+准备工作\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",[22,120215,120216,120221,120232,120237,120244,120249,120261,120266,120273,120278],{"__ignoreMap":169},[252,120217,120218],{"class":254,"line":255},[252,120219,120220],{"class":321},"# 编译环境+准备工作\n",[252,120222,120223,120225,120227,120229],{"class":254,"line":170},[252,120224,24716],{"class":2102},[252,120226,117453],{"class":367},[252,120228,23973],{"class":367},[252,120230,120231],{"class":367}," build-essential\n",[252,120233,120234],{"class":254,"line":1318},[252,120235,120236],{"class":321},"# 进入到.run目录中\n",[252,120238,120239,120241],{"class":254,"line":1333},[252,120240,101413],{"class":311},[252,120242,120243],{"class":367}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[252,120245,120246],{"class":254,"line":1339},[252,120247,120248],{"class":321},"# 给驱动文件增加可执行权限：\n",[252,120250,120251,120253,120255,120258],{"class":254,"line":1353},[252,120252,24716],{"class":2102},[252,120254,24719],{"class":367},[252,120256,120257],{"class":367}," a+x",[252,120259,120260],{"class":367}," NVIDIA-Linux-x86_64-550.107.02.run\n",[252,120262,120263],{"class":254,"line":1359},[252,120264,120265],{"class":321},"# 然后执行安装：\n",[252,120267,120268,120270],{"class":254,"line":1450},[252,120269,24716],{"class":2102},[252,120271,120272],{"class":367}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[252,120274,120275],{"class":254,"line":1456},[252,120276,120277],{"class":321},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[252,120279,120280,120282,120285],{"class":254,"line":1468},[252,120281,24716],{"class":2102},[252,120283,120284],{"class":367}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[252,120286,120287],{"class":311},"  --no-opengl-files\n",[19,120289,120290],{},"安装完毕重启即可",[244,120292,120294],{"className":118659,"code":120293,"language":118661,"meta":169,"style":169},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[22,120295,120296,120300,120306,120310],{"__ignoreMap":169},[252,120297,120298],{"class":254,"line":255},[252,120299,120064],{"class":321},[252,120301,120302,120304],{"class":254,"line":170},[252,120303,24716],{"class":2102},[252,120305,26787],{"class":367},[252,120307,120308],{"class":254,"line":1318},[252,120309,120079],{"class":321},[252,120311,120312],{"class":254,"line":1333},[252,120313,120084],{"class":2102},[224,120315,120317],{"id":120316},"_353-安装cuda","3.5.3 安装CUDA",[19,120319,120320],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120322,120323],{},[1601,120324],{"alt":169,"src":120325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[207,120327,120328],{},[210,120329,120330],{},"先查看显卡驱动所支持的最高CUDA版本",[244,120332,120333],{"className":118659,"code":120084,"language":118661,"meta":169,"style":169},[22,120334,120335],{"__ignoreMap":169},[252,120336,120337],{"class":254,"line":255},[252,120338,120084],{"class":2102},[19,120340,120341],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120343,120344],{},[1601,120345],{"alt":169,"src":120346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[207,120348,120349],{"start":170},[210,120350,120351],{},"下载CUDA并安装CUDA",[19,120353,118438,120354],{},[501,120355,118441],{"href":118441,"rel":120356},[24004],[19,120358,120359],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120361,120362],{},[1601,120363],{"alt":169,"src":120364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120366,120367,120368,120373],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[501,120369,120372],{"href":120370,"rel":120371},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24004],"Vinci机器人队单片机教程","）",[19,120375,120376],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120378,120379],{},[1601,120380],{"alt":169,"src":120381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120383,120384],{},"将最下方框框里的命令敲入终端",[244,120386,120388],{"className":118659,"code":120387,"language":118661,"meta":169,"style":169},"# 在当前文件夹下创建一个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",[22,120389,120390,120395,120404,120409,120416,120421,120429,120434,120445,120450],{"__ignoreMap":169},[252,120391,120392],{"class":254,"line":255},[252,120393,120394],{"class":321},"# 在当前文件夹下创建一个ttt的子文件夹\n",[252,120396,120397,120399,120401],{"class":254,"line":170},[252,120398,101403],{"class":2102},[252,120400,29356],{"class":311},[252,120402,120403],{"class":367}," .\u002Fttt\n",[252,120405,120406],{"class":254,"line":1318},[252,120407,120408],{"class":321},"# 进入ttt文件夹\n",[252,120410,120411,120413],{"class":254,"line":1333},[252,120412,101413],{"class":311},[252,120414,120415],{"class":367}," ttt\n",[252,120417,120418],{"class":254,"line":1339},[252,120419,120420],{"class":321},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[252,120422,120423,120426],{"class":254,"line":1353},[252,120424,120425],{"class":2102},"wget",[252,120427,120428],{"class":367}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[252,120430,120431],{"class":254,"line":1359},[252,120432,120433],{"class":321},"# 给予权限\n",[252,120435,120436,120438,120440,120442],{"class":254,"line":1450},[252,120437,24716],{"class":2102},[252,120439,24719],{"class":367},[252,120441,120257],{"class":367},[252,120443,120444],{"class":367}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[252,120446,120447],{"class":254,"line":1456},[252,120448,120449],{"class":321},"# 运行脚本\n",[252,120451,120452,120454],{"class":254,"line":1468},[252,120453,24716],{"class":2102},[252,120455,120444],{"class":367},[19,120457,120458],{},[1601,120459],{"alt":169,"src":120460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120462,120463],{},"正在安装中：",[19,120465,120466],{},[1601,120467],{"alt":169,"src":120468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120470,120471],{},"输入accept接受即可",[19,120473,120474],{},[1601,120475],{"alt":169,"src":120476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120478,120479],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120481,120482],{},[1601,120483],{"alt":169,"src":120484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120486,120487],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120489,120490],{},[1601,120491],{"alt":169,"src":120492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[207,120494,120495],{"start":1318},[210,120496,120497],{},"配置环境",[19,120499,120500],{},"根据上方确认一下路径，比如我上面红色框起来的为",[244,120502,120504],{"className":118659,"code":120503,"language":118661,"meta":169,"style":169},"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",[22,120505,120506,120522,120537],{"__ignoreMap":169},[252,120507,120508,120511,120514,120517,120520],{"class":254,"line":255},[252,120509,120510],{"class":2102},"Please",[252,120512,120513],{"class":367}," make",[252,120515,120516],{"class":367}," sure",[252,120518,120519],{"class":367}," that",[252,120521,2813],{"class":262},[252,120523,120524,120526,120529,120532,120535],{"class":254,"line":170},[252,120525,52411],{"class":2102},[252,120527,120528],{"class":367},"   PATH",[252,120530,120531],{"class":367}," includes",[252,120533,120534],{"class":367}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[252,120536,2813],{"class":262},[252,120538,120539,120541,120544,120546,120549,120552,120554,120557,120560,120563,120566,120568,120571,120573],{"class":254,"line":1318},[252,120540,52411],{"class":2102},[252,120542,120543],{"class":367},"   LD_LIBRARY_PATH",[252,120545,120531],{"class":367},[252,120547,120548],{"class":367}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[252,120550,120551],{"class":367}," or,",[252,120553,5349],{"class":367},[252,120555,120556],{"class":367}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[252,120558,120559],{"class":367}," to",[252,120561,120562],{"class":367}," \u002Fetc\u002Fld.so.conf",[252,120564,120565],{"class":367}," and",[252,120567,27370],{"class":367},[252,120569,120570],{"class":367}," ldconfig",[252,120572,64744],{"class":367},[252,120574,120575],{"class":367}," root\n",[19,120577,120578],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[244,120580,120582],{"className":118659,"code":120581,"language":118661,"meta":169,"style":169},"which nvcc\n",[22,120583,120584],{"__ignoreMap":169},[252,120585,120586,120589],{"class":254,"line":255},[252,120587,120588],{"class":311},"which",[252,120590,120591],{"class":367}," nvcc\n",[19,120593,120594],{},[1601,120595],{"alt":169,"src":120596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120598,120599],{},"所以我进行以下操作：",[244,120601,120603],{"className":118659,"code":120602,"language":118661,"meta":169,"style":169},"sudo vim ~\u002F.bashrc\n",[22,120604,120605],{"__ignoreMap":169},[252,120606,120607,120609,120611],{"class":254,"line":255},[252,120608,24716],{"class":2102},[252,120610,118719],{"class":367},[252,120612,120613],{"class":367}," ~\u002F.bashrc\n",[19,120615,120616],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[244,120618,120620],{"className":118659,"code":120619,"language":118661,"meta":169,"style":169},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[22,120621,120622,120634],{"__ignoreMap":169},[252,120623,120624,120626,120629,120631],{"class":254,"line":255},[252,120625,25182],{"class":258},[252,120627,120628],{"class":262}," PATH",[252,120630,308],{"class":258},[252,120632,120633],{"class":262},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[252,120635,120636,120638,120641,120643],{"class":254,"line":170},[252,120637,25182],{"class":258},[252,120639,120640],{"class":262}," LD_LIBRARY_PATH",[252,120642,308],{"class":258},[252,120644,120645],{"class":262},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120647,120648],{},[1601,120649],{"alt":169,"src":120650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[244,120652,120654],{"className":118659,"code":120653,"language":118661,"meta":169,"style":169},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[22,120655,120656,120661,120667,120672],{"__ignoreMap":169},[252,120657,120658],{"class":254,"line":255},[252,120659,120660],{"class":321},"# 刷新当前终端的环境变量\n",[252,120662,120663,120665],{"class":254,"line":170},[252,120664,101031],{"class":311},[252,120666,120613],{"class":367},[252,120668,120669],{"class":254,"line":1318},[252,120670,120671],{"class":321},"# 验证CUDA是否安装成功\n",[252,120673,120674,120677],{"class":254,"line":1333},[252,120675,120676],{"class":2102},"nvcc",[252,120678,120679],{"class":311}," -V\n",[19,120681,120682],{},"出现下图这种则安装成功。",[19,120684,120685],{},[1601,120686],{"alt":169,"src":120687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[224,120689,120691],{"id":120690},"_354-安装cudnn","3.5.4 安装cuDNN",[207,120693,120694],{},[210,120695,120696],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120698,120699,120700,120705],{},"前往 NVIDIA cuDNN 下载页面：",[501,120701,120704],{"href":120702,"rel":120703},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24004],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120707,120708],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120710,120711],{},[1601,120712],{"alt":169,"src":120713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120715,120716],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120718,120719],{},[1601,120720],{"alt":169,"src":120721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120723,120724],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120726,120727],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120729,120730],{},[412,120731,120732],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120734,120735],{},"下载好的：",[19,120737,120738],{},[1601,120739],{"alt":169,"src":120740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[207,120742,120743],{"start":170},[210,120744,120745],{},"安装cuDNN",[19,120747,120748],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120750,120751],{},[1601,120752],{"alt":169,"src":120753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120755,120756],{},"解压文件，并复制到对应位置完成安装",[244,120758,120760],{"className":118659,"code":120759,"language":118661,"meta":169,"style":169},"# 解压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",[22,120761,120762,120767,120778,120783,120790,120795,120811,120825,120830,120841,120850,120854,120870],{"__ignoreMap":169},[252,120763,120764],{"class":254,"line":255},[252,120765,120766],{"class":321},"# 解压cuDNN文件\n",[252,120768,120769,120772,120775],{"class":254,"line":170},[252,120770,120771],{"class":2102},"tar",[252,120773,120774],{"class":311}," -xvf",[252,120776,120777],{"class":367}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[252,120779,120780],{"class":254,"line":1318},[252,120781,120782],{"class":321},"# cd进文件夹\n",[252,120784,120785,120787],{"class":254,"line":1333},[252,120786,101413],{"class":311},[252,120788,120789],{"class":367}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[252,120791,120792],{"class":254,"line":1339},[252,120793,120794],{"class":321},"# 复制cuDNN文件到CUDA目录\n",[252,120796,120797,120799,120801,120804,120806,120809],{"class":254,"line":1353},[252,120798,24716],{"class":2102},[252,120800,28001],{"class":367},[252,120802,120803],{"class":367}," include\u002Fcudnn",[252,120805,718],{"class":311},[252,120807,120808],{"class":367},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[252,120810,2813],{"class":262},[252,120812,120813,120815,120817,120820,120822],{"class":254,"line":1359},[252,120814,24716],{"class":2102},[252,120816,28001],{"class":367},[252,120818,120819],{"class":367}," lib\u002Flibcudnn",[252,120821,718],{"class":311},[252,120823,120824],{"class":367},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[252,120826,120827],{"class":254,"line":1450},[252,120828,120829],{"class":321},"# 对比一下有没有缺文件\n",[252,120831,120832,120834,120837,120839],{"class":254,"line":1456},[252,120833,26901],{"class":2102},[252,120835,120836],{"class":367}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[252,120838,718],{"class":311},[252,120840,2813],{"class":262},[252,120842,120843,120845,120848],{"class":254,"line":1468},[252,120844,26901],{"class":2102},[252,120846,120847],{"class":367}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[252,120849,119384],{"class":311},[252,120851,120852],{"class":254,"line":1751},[252,120853,120433],{"class":321},[252,120855,120856,120858,120860,120863,120865,120867],{"class":254,"line":1756},[252,120857,24716],{"class":2102},[252,120859,24719],{"class":367},[252,120861,120862],{"class":367}," a+r",[252,120864,120836],{"class":367},[252,120866,718],{"class":311},[252,120868,120869],{"class":262},"   \n",[252,120871,120872,120874,120876,120878,120880],{"class":254,"line":1762},[252,120873,24716],{"class":2102},[252,120875,24719],{"class":367},[252,120877,120862],{"class":367},[252,120879,120847],{"class":367},[252,120881,119384],{"class":311},[207,120883,120884],{"start":1318},[210,120885,120886],{},"检查是否安装成功",[244,120888,120890],{"className":118659,"code":120889,"language":118661,"meta":169,"style":169},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[22,120891,120892,120897],{"__ignoreMap":169},[252,120893,120894],{"class":254,"line":255},[252,120895,120896],{"class":321},"# 检查cuDNN版本命令\n",[252,120898,120899,120902,120905,120907,120909,120912,120915],{"class":254,"line":170},[252,120900,120901],{"class":2102},"cat",[252,120903,120904],{"class":367}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[252,120906,25249],{"class":258},[252,120908,30376],{"class":2102},[252,120910,120911],{"class":367}," CUDNN_MAJOR",[252,120913,120914],{"class":311}," -A",[252,120916,47863],{"class":311},[19,120918,120919],{},"出现下图这样的就是安装成功了",[19,120921,120922],{},[1601,120923],{"alt":169,"src":120924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[207,120926,120927],{"start":1333},[210,120928,120929],{},"软链接(一般不需要)",[244,120931,120933],{"className":118659,"code":120932,"language":118661,"meta":169,"style":169},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[22,120934,120935,120940],{"__ignoreMap":169},[252,120936,120937],{"class":254,"line":255},[252,120938,120939],{"class":321},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[252,120941,120942,120944],{"class":254,"line":170},[252,120943,24716],{"class":2102},[252,120945,120946],{"class":367}," ldconfig\n",[19,120948,120949],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[244,120951,120956],{"className":120952,"code":120953,"language":120954,"meta":120955,"style":169},"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",[22,120957,120958,120963,120968,120973,120978,120983,120988],{"__ignoreMap":169},[252,120959,120960],{"class":254,"line":255},[252,120961,120962],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[252,120964,120965],{"class":254,"line":170},[252,120966,120967],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[252,120969,120970],{"class":254,"line":1318},[252,120971,120972],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[252,120974,120975],{"class":254,"line":1333},[252,120976,120977],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[252,120979,120980],{"class":254,"line":1339},[252,120981,120982],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[252,120984,120985],{"class":254,"line":1353},[252,120986,120987],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[252,120989,120990],{"class":254,"line":1359},[252,120991,120992],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,120994,120995],{},"运行下方的命令",[244,120997,120999],{"className":118659,"code":120998,"language":118661,"meta":169,"style":169},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[22,121000,121001,121006,121013,121018],{"__ignoreMap":169},[252,121002,121003],{"class":254,"line":255},[252,121004,121005],{"class":321},"# cd进入CUDA路径\n",[252,121007,121008,121010],{"class":254,"line":170},[252,121009,101413],{"class":311},[252,121011,121012],{"class":367}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[252,121014,121015],{"class":254,"line":1318},[252,121016,121017],{"class":321}," # 查看本路径下的需要软链接的文件名\n",[252,121019,121020],{"class":254,"line":1333},[252,121021,121022],{"class":2102}," ls\n",[19,121024,121025],{},[1601,121026],{"alt":169,"src":121027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121029,121030,121031,123,121034,123,121037,121040],{},"如上图，我需要将",[22,121032,121033],{},"libcudnn_xxx_xxxxx.so.8.9.7",[22,121035,121036],{},"libcudnn_xxx_xxxxx.so.8",[22,121038,121039],{},"libcudnn_xxx_xxxxx.so","软链接",[244,121042,121044],{"className":118659,"code":121043,"language":118661,"meta":169,"style":169},"# 创建符号链接。对于每个 .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",[22,121045,121046,121051,121067,121081,121095,121109,121123,121137,121151,121156,121162,121167],{"__ignoreMap":169},[252,121047,121048],{"class":254,"line":255},[252,121049,121050],{"class":321},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[252,121052,121053,121055,121058,121061,121064],{"class":254,"line":170},[252,121054,24716],{"class":2102},[252,121056,121057],{"class":367}," ln",[252,121059,121060],{"class":311}," -sf",[252,121062,121063],{"class":367}," libcudnn_cnn_train.so.8.9.7",[252,121065,121066],{"class":367}," libcudnn_cnn_train.so.8\n",[252,121068,121069,121071,121073,121075,121078],{"class":254,"line":1318},[252,121070,24716],{"class":2102},[252,121072,121057],{"class":367},[252,121074,121060],{"class":311},[252,121076,121077],{"class":367}," libcudnn_adv_infer.so.8.9.7",[252,121079,121080],{"class":367}," libcudnn_adv_infer.so.8\n",[252,121082,121083,121085,121087,121089,121092],{"class":254,"line":1333},[252,121084,24716],{"class":2102},[252,121086,121057],{"class":367},[252,121088,121060],{"class":311},[252,121090,121091],{"class":367}," libcudnn_adv_train.so.8.9.7",[252,121093,121094],{"class":367}," libcudnn_adv_train.so.8\n",[252,121096,121097,121099,121101,121103,121106],{"class":254,"line":1339},[252,121098,24716],{"class":2102},[252,121100,121057],{"class":367},[252,121102,121060],{"class":311},[252,121104,121105],{"class":367}," libcudnn_cnn_infer.so.8.9.7",[252,121107,121108],{"class":367}," libcudnn_cnn_infer.so.8\n",[252,121110,121111,121113,121115,121117,121120],{"class":254,"line":1353},[252,121112,24716],{"class":2102},[252,121114,121057],{"class":367},[252,121116,121060],{"class":311},[252,121118,121119],{"class":367}," libcudnn.so.8.9.7",[252,121121,121122],{"class":367}," libcudnn.so.8\n",[252,121124,121125,121127,121129,121131,121134],{"class":254,"line":1359},[252,121126,24716],{"class":2102},[252,121128,121057],{"class":367},[252,121130,121060],{"class":311},[252,121132,121133],{"class":367}," libcudnn_ops_infer.so.8.9.7",[252,121135,121136],{"class":367}," libcudnn_ops_infer.so.8\n",[252,121138,121139,121141,121143,121145,121148],{"class":254,"line":1450},[252,121140,24716],{"class":2102},[252,121142,121057],{"class":367},[252,121144,121060],{"class":311},[252,121146,121147],{"class":367}," libcudnn_ops_train.so.8.9.7",[252,121149,121150],{"class":367}," libcudnn_ops_train.so.8\n",[252,121152,121153],{"class":254,"line":1456},[252,121154,121155],{"class":321},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[252,121157,121158,121160],{"class":254,"line":1468},[252,121159,24716],{"class":2102},[252,121161,120946],{"class":367},[252,121163,121164],{"class":254,"line":1751},[252,121165,121166],{"class":321},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[252,121168,121169,121171,121174,121177,121179,121182],{"class":254,"line":1756},[252,121170,26901],{"class":2102},[252,121172,121173],{"class":311}," -l",[252,121175,121176],{"class":367}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[252,121178,718],{"class":311},[252,121180,121181],{"class":367},".so",[252,121183,119384],{"class":311},[224,121185,121187],{"id":121186},"_355-常见问题","3.5.5 常见问题",[207,121189,121190],{},[210,121191,121192],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[244,121194,121196],{"className":118659,"code":121195,"language":118661,"meta":169,"style":169},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[22,121197,121198],{"__ignoreMap":169},[252,121199,121200,121202,121204],{"class":254,"line":255},[252,121201,24716],{"class":2102},[252,121203,118719],{"class":367},[252,121205,121206],{"class":367}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121208,121209],{},"blacklist-nouveau.conf文件内容如下：",[244,121211,121213],{"className":118659,"code":121212,"language":118661,"meta":169,"style":169},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[22,121214,121215,121223,121230,121242,121252],{"__ignoreMap":169},[252,121216,121217,121220],{"class":254,"line":255},[252,121218,121219],{"class":2102},"blacklist",[252,121221,121222],{"class":367}," nouveau\n",[252,121224,121225,121227],{"class":254,"line":170},[252,121226,121219],{"class":2102},[252,121228,121229],{"class":367}," lbm-nouveau\n",[252,121231,121232,121234,121237,121240],{"class":254,"line":1318},[252,121233,116066],{"class":2102},[252,121235,121236],{"class":367}," nouveau",[252,121238,121239],{"class":367}," modeset=",[252,121241,3224],{"class":311},[252,121243,121244,121247,121249],{"class":254,"line":1333},[252,121245,121246],{"class":311},"alias",[252,121248,121236],{"class":367},[252,121250,121251],{"class":367}," off\n",[252,121253,121254,121256,121259],{"class":254,"line":1339},[252,121255,121246],{"class":311},[252,121257,121258],{"class":367}," lbm-nouveau",[252,121260,121251],{"class":367},[19,121262,121263],{},"接着运行下方命令",[244,121265,121267],{"className":118659,"code":121266,"language":118661,"meta":169,"style":169},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[22,121268,121269,121279,121284],{"__ignoreMap":169},[252,121270,121271,121273,121276],{"class":254,"line":255},[252,121272,24716],{"class":2102},[252,121274,121275],{"class":367}," update-initramfs",[252,121277,121278],{"class":311}," -u\n",[252,121280,121281],{"class":254,"line":170},[252,121282,121283],{"class":2102},"或者\n",[252,121285,121286,121288,121291],{"class":254,"line":1318},[252,121287,24716],{"class":2102},[252,121289,121290],{"class":367}," dracut",[252,121292,121293],{"class":311}," --force\n",[19,121295,121296],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[244,121298,121300],{"className":118659,"code":121299,"language":118661,"meta":169,"style":169},"lsmod | grep nouveau\n",[22,121301,121302],{"__ignoreMap":169},[252,121303,121304,121307,121309,121311],{"class":254,"line":255},[252,121305,121306],{"class":2102},"lsmod",[252,121308,25249],{"class":258},[252,121310,30376],{"class":2102},[252,121312,121222],{"class":367},[207,121314,121315],{"start":170},[210,121316,121317],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[244,121319,121321],{"className":118659,"code":121320,"language":118661,"meta":169,"style":169},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[22,121322,121323],{"__ignoreMap":169},[252,121324,121325,121327,121329],{"class":254,"line":255},[252,121326,24716],{"class":2102},[252,121328,118719],{"class":367},[252,121330,121331],{"class":367}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121333,121334],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[244,121336,121338],{"className":118659,"code":121337,"language":118661,"meta":169,"style":169},"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",[22,121339,121340,121348,121356,121364,121371,121379,121389,121397],{"__ignoreMap":169},[252,121341,121342,121345],{"class":254,"line":255},[252,121343,121344],{"class":2102},"Section",[252,121346,121347],{"class":367}," \"OutputClass\"\n",[252,121349,121350,121353],{"class":254,"line":170},[252,121351,121352],{"class":2102},"   Identifier",[252,121354,121355],{"class":367}," \"nvidia\"\n",[252,121357,121358,121361],{"class":254,"line":1318},[252,121359,121360],{"class":2102},"   MatchDriver",[252,121362,121363],{"class":367}," \"nvidia-drm\"\n",[252,121365,121366,121369],{"class":254,"line":1333},[252,121367,121368],{"class":2102},"   Driver",[252,121370,121355],{"class":367},[252,121372,121373,121376],{"class":254,"line":1339},[252,121374,121375],{"class":2102},"   Option",[252,121377,121378],{"class":367}," \"AllowEmptyInitialConfiguration\"\n",[252,121380,121381,121383,121386],{"class":254,"line":1353},[252,121382,121375],{"class":2102},[252,121384,121385],{"class":367}," \"PrimaryGPU\"",[252,121387,121388],{"class":367}," \"yes\"\n",[252,121390,121391,121394],{"class":254,"line":1359},[252,121392,121393],{"class":2102},"   ModulePath",[252,121395,121396],{"class":367}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[252,121398,121399],{"class":254,"line":1450},[252,121400,121401],{"class":2102},"EndSection\n",[207,121403,121404],{"start":1318},[210,121405,121406],{},"安装N卡驱动提示错误",[244,121408,121410],{"className":120952,"code":121409,"language":120954,"meta":120955,"style":169},"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",[22,121411,121412],{"__ignoreMap":169},[252,121413,121414],{"class":254,"line":255},[252,121415,121409],{},[207,121417,121418],{},[210,121419,121420],{},"检查当前运行的内核版本：",[19,121422,121423],{},"运行以下命令以查看你当前正在使用的内核版本：",[244,121425,121427],{"className":117432,"code":121426,"language":117434,"meta":169,"style":169},"uname -r\n",[22,121428,121429],{"__ignoreMap":169},[252,121430,121431,121433],{"class":254,"line":255},[252,121432,70344],{"class":2102},[252,121434,121435],{"class":311}," -r\n",[207,121437,121438],{"start":170},[210,121439,121440],{},"安装内核开发文件：",[19,121442,121443,121444,121447],{},"确保你已经安装了与当前内核版本相匹配的 ",[22,121445,121446],{},"kernel-devel"," 包。运行以下命令来安装：",[244,121449,121451],{"className":117432,"code":121450,"language":117434,"meta":169,"style":169},"sudo dnf install kernel-devel-$(uname -r)\n",[22,121452,121453],{"__ignoreMap":169},[252,121454,121455,121457,121459,121461,121464,121466,121468,121470],{"class":254,"line":255},[252,121456,24716],{"class":2102},[252,121458,26455],{"class":367},[252,121460,23973],{"class":367},[252,121462,121463],{"class":367}," kernel-devel-",[252,121465,25239],{"class":262},[252,121467,70344],{"class":2102},[252,121469,119775],{"class":311},[252,121471,269],{"class":262},[19,121473,121474],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[207,121476,121477],{"start":1318},[210,121478,121479],{},"安装内核源代码（如果需要）：",[19,121481,121482],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[244,121484,121486],{"className":117432,"code":121485,"language":117434,"meta":169,"style":169},"sudo dnf install kernel-headers kernel-source\n",[22,121487,121488],{"__ignoreMap":169},[252,121489,121490,121492,121494,121496,121499],{"class":254,"line":255},[252,121491,24716],{"class":2102},[252,121493,26455],{"class":367},[252,121495,23973],{"class":367},[252,121497,121498],{"class":367}," kernel-headers",[252,121500,121501],{"class":367}," kernel-source\n",[207,121503,121504],{"start":1333},[210,121505,121506],{},"检查安装：",[19,121508,121509,121510,121513],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[22,121511,121512],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[244,121515,121517],{"className":117432,"code":121516,"language":117434,"meta":169,"style":169},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[22,121518,121519],{"__ignoreMap":169},[252,121520,121521,121523],{"class":254,"line":255},[252,121522,26901],{"class":2102},[252,121524,121525],{"class":367}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121527,121528,121529,121532],{},"如果仍然遇到问题，可以通过 ",[22,121530,121531],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5266,121534,121535],{},"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":169,"searchDepth":170,"depth":170,"links":121537},[121538,121542,121552,121556,121557],{"id":118635,"depth":170,"text":118636,"children":121539},[121540,121541],{"id":118645,"depth":1318,"text":118646},{"id":118655,"depth":1318,"text":118656},{"id":118855,"depth":170,"text":118856,"children":121543},[121544,121545,121546,121547,121548,121549,121550,121551],{"id":118859,"depth":1318,"text":118860},{"id":118929,"depth":1318,"text":118930},{"id":119018,"depth":1318,"text":119019},{"id":119263,"depth":1318,"text":119264},{"id":119333,"depth":1318,"text":119334},{"id":119400,"depth":1318,"text":119401},{"id":119435,"depth":1318,"text":119436},{"id":119490,"depth":1318,"text":119491},{"id":119541,"depth":170,"text":119542,"children":121553},[121554,121555],{"id":119545,"depth":1318,"text":119546},{"id":119625,"depth":1318,"text":119626},{"id":119811,"depth":170,"text":119812},{"id":119984,"depth":170,"text":119985,"children":121558},[121559,121560,121561,121562,121563],{"id":119988,"depth":1318,"text":119989},{"id":120029,"depth":1318,"text":120030},{"id":120316,"depth":1318,"text":120317},{"id":120690,"depth":1318,"text":120691},{"id":121186,"depth":1318,"text":121187},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118627,"description":178},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121570,"title":121571,"body":121572,"description":178,"extension":179,"meta":121912,"navigation":181,"path":121913,"seo":121914,"stem":121915,"__hash__":121916},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121573,"toc":121910},[121574,121577,121582,121585,121831,121836,121839,121875,121878,121907],[10,121575,121571],{"id":121576},"_4-命令教程长期积累",[207,121578,121579],{},[210,121580,121581],{},"大多数命令",[19,121583,121584],{},"常用 Linux 命令速查：",[244,121586,121588],{"className":117432,"code":121587,"language":117434,"meta":169,"style":169},"# 文件与目录\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",[22,121589,121590,121595,121602,121609,121617,121624,121631,121639,121647,121654,121661,121669,121673,121678,121685,121693,121700,121704,121709,121716,121724,121732,121740,121748,121752,121757,121765,121772,121779,121787,121795,121799,121804,121813,121822],{"__ignoreMap":169},[252,121591,121592],{"class":254,"line":255},[252,121593,121594],{"class":321},"# 文件与目录\n",[252,121596,121597,121599],{"class":254,"line":170},[252,121598,26901],{"class":2102},[252,121600,121601],{"class":321},"        # 列出目录内容\n",[252,121603,121604,121606],{"class":254,"line":1318},[252,121605,101413],{"class":311},[252,121607,121608],{"class":321},"        # 切换目录\n",[252,121610,121611,121614],{"class":254,"line":1333},[252,121612,121613],{"class":311},"pwd",[252,121615,121616],{"class":321},"       # 显示当前路径\n",[252,121618,121619,121621],{"class":254,"line":1339},[252,121620,101403],{"class":2102},[252,121622,121623],{"class":321},"     # 创建目录\n",[252,121625,121626,121628],{"class":254,"line":1353},[252,121627,25462],{"class":2102},[252,121629,121630],{"class":321},"        # 删除文件或目录\n",[252,121632,121633,121636],{"class":254,"line":1359},[252,121634,121635],{"class":2102},"cp",[252,121637,121638],{"class":321},"        # 复制文件或目录\n",[252,121640,121641,121644],{"class":254,"line":1450},[252,121642,121643],{"class":2102},"mv",[252,121645,121646],{"class":321},"        # 移动\u002F重命名文件或目录\n",[252,121648,121649,121651],{"class":254,"line":1456},[252,121650,101420],{"class":2102},[252,121652,121653],{"class":321},"     # 创建空文件\n",[252,121655,121656,121658],{"class":254,"line":1468},[252,121657,120901],{"class":2102},[252,121659,121660],{"class":321},"       # 查看文件内容\n",[252,121662,121663,121666],{"class":254,"line":1751},[252,121664,121665],{"class":2102},"head\u002Ftail",[252,121667,121668],{"class":321}," # 查看文件头部\u002F尾部\n",[252,121670,121671],{"class":254,"line":1756},[252,121672,2539],{"emptyLinePlaceholder":181},[252,121674,121675],{"class":254,"line":1762},[252,121676,121677],{"class":321},"# 权限管理\n",[252,121679,121680,121682],{"class":254,"line":1767},[252,121681,24751],{"class":2102},[252,121683,121684],{"class":321},"     # 修改文件权限\n",[252,121686,121687,121690],{"class":254,"line":1781},[252,121688,121689],{"class":2102},"chown",[252,121691,121692],{"class":321},"     # 修改文件所有者\n",[252,121694,121695,121697],{"class":254,"line":1786},[252,121696,24716],{"class":2102},[252,121698,121699],{"class":321},"      # 以管理员身份执行\n",[252,121701,121702],{"class":254,"line":1792},[252,121703,2539],{"emptyLinePlaceholder":181},[252,121705,121706],{"class":254,"line":1813},[252,121707,121708],{"class":321},"# 系统信息\n",[252,121710,121711,121713],{"class":254,"line":1818},[252,121712,70344],{"class":2102},[252,121714,121715],{"class":321},"     # 系统信息\n",[252,121717,121718,121721],{"class":254,"line":1832},[252,121719,121720],{"class":2102},"df",[252,121722,121723],{"class":321},"        # 磁盘使用情况\n",[252,121725,121726,121729],{"class":254,"line":1837},[252,121727,121728],{"class":2102},"free",[252,121730,121731],{"class":321},"      # 内存使用情况\n",[252,121733,121734,121737],{"class":254,"line":1866},[252,121735,121736],{"class":2102},"top\u002Fhtop",[252,121738,121739],{"class":321},"  # 进程监控\n",[252,121741,121742,121745],{"class":254,"line":1871},[252,121743,121744],{"class":2102},"ps",[252,121746,121747],{"class":321},"        # 查看进程\n",[252,121749,121750],{"class":254,"line":1888},[252,121751,2539],{"emptyLinePlaceholder":181},[252,121753,121754],{"class":254,"line":1893},[252,121755,121756],{"class":321},"# 网络\n",[252,121758,121759,121762],{"class":254,"line":1898},[252,121760,121761],{"class":2102},"ping",[252,121763,121764],{"class":321},"      # 测试网络连通性\n",[252,121766,121767,121769],{"class":254,"line":1903},[252,121768,26989],{"class":2102},[252,121770,121771],{"class":321},"      # 发送 HTTP 请求\n",[252,121773,121774,121776],{"class":254,"line":1917},[252,121775,120425],{"class":2102},[252,121777,121778],{"class":321},"      # 下载文件\n",[252,121780,121781,121784],{"class":254,"line":1922},[252,121782,121783],{"class":2102},"ssh",[252,121785,121786],{"class":321},"       # 远程登录\n",[252,121788,121789,121792],{"class":254,"line":2716},[252,121790,121791],{"class":2102},"scp",[252,121793,121794],{"class":321},"       # 远程文件传输\n",[252,121796,121797],{"class":254,"line":2730},[252,121798,2539],{"emptyLinePlaceholder":181},[252,121800,121801],{"class":254,"line":2738},[252,121802,121803],{"class":321},"# 包管理（Debian\u002FUbuntu）\n",[252,121805,121806,121808,121810],{"class":254,"line":2743},[252,121807,117504],{"class":2102},[252,121809,117483],{"class":367},[252,121811,121812],{"class":321},"   # 更新软件源\n",[252,121814,121815,121817,121819],{"class":254,"line":2749},[252,121816,117504],{"class":2102},[252,121818,23973],{"class":367},[252,121820,121821],{"class":321},"  # 安装软件包\n",[252,121823,121824,121826,121828],{"class":254,"line":2755},[252,121825,117504],{"class":2102},[252,121827,26219],{"class":367},[252,121829,121830],{"class":321},"   # 卸载软件包\n",[207,121832,121833],{"start":170},[210,121834,121835],{},"KDE Dolphin 以root打开",[19,121837,121838],{},"kde5",[244,121840,121842],{"className":117432,"code":121841,"language":117434,"meta":169,"style":169},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[22,121843,121844],{"__ignoreMap":169},[252,121845,121846,121849,121852,121855,121857,121859,121862,121865,121867,121870,121872],{"class":254,"line":255},[252,121847,121848],{"class":2102},"pkexec",[252,121850,121851],{"class":367}," env",[252,121853,121854],{"class":367}," DISPLAY=",[252,121856,28283],{"class":262},[252,121858,28341],{"class":367},[252,121860,121861],{"class":262},"$XAUTHORITY ",[252,121863,121864],{"class":367},"KDE_SESSION_VERSION=",[252,121866,582],{"class":311},[252,121868,121869],{"class":367}," KDE_FULL_SESSION=",[252,121871,1501],{"class":311},[252,121873,121874],{"class":367}," dolphin\n",[19,121876,121877],{},"kde6",[244,121879,121881],{"className":117432,"code":121880,"language":117434,"meta":169,"style":169},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[22,121882,121883],{"__ignoreMap":169},[252,121884,121885,121887,121889,121891,121893,121895,121897,121899,121901,121903,121905],{"class":254,"line":255},[252,121886,121848],{"class":2102},[252,121888,121851],{"class":367},[252,121890,121854],{"class":367},[252,121892,28283],{"class":262},[252,121894,28341],{"class":367},[252,121896,121861],{"class":262},[252,121898,121864],{"class":367},[252,121900,607],{"class":311},[252,121902,121869],{"class":367},[252,121904,1501],{"class":311},[252,121906,121874],{"class":367},[5266,121908,121909],{},"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":169,"searchDepth":170,"depth":170,"links":121911},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121571,"description":178},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121918,"title":121919,"body":121920,"description":178,"extension":179,"meta":121934,"navigation":181,"path":121935,"seo":121936,"stem":121937,"__hash__":121938},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121921,"toc":121932},[121922,121925],[10,121923,121919],{"id":121924},"_5-各种环境配置",[19,121926,121927],{},[501,121928,121931],{"href":121929,"rel":121930},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24004],"电控组环境搭建大全",{"title":169,"searchDepth":170,"depth":170,"links":121933},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121919,"description":178},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121940,"title":121941,"body":121942,"description":178,"extension":179,"meta":122290,"navigation":181,"path":122291,"seo":122292,"stem":122293,"__hash__":122294},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121943,"toc":122282},[121944,121947,121951,121955,121959,121964,121971,121975,122268,122272,122279],[10,121945,121941],{"id":121946},"_6-拓展功能",[14,121948,121950],{"id":121949},"_61-wine","6.1 Wine",[14,121952,121954],{"id":121953},"_62-android","6.2 Android",[224,121956,121958],{"id":121957},"_621-i卡a卡","6.2.1 I卡、A卡",[207,121960,121961],{},[210,121962,121963],{},"Wayland-Waydroid(体验超级好)",[19,121965,121966,121967],{},"Waydroid 官网与安装指南：",[501,121968,121969],{"href":121969,"rel":121970},"https:\u002F\u002Fwaydro.id\u002F",[24004],[224,121972,121974],{"id":121973},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[207,121976,121977],{},[210,121978,121979,121980,121982,121983,121987,121989,121992,121997,122194],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53856,121981],{},"BlissOS 官网下载：",[501,121984,121985],{"href":121985,"rel":121986},"https:\u002F\u002Fblissos.org\u002F",[24004],[53856,121988],{},[1601,121990],{"alt":169,"src":121991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[207,121993,121994],{"start":1318},[210,121995,121996],{},"比较推荐的配置",[244,121998,122000],{"className":117432,"code":121999,"language":117434,"meta":169,"style":169},"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",[22,122001,122002,122009,122019,122029,122039,122051,122061,122068,122078,122087,122096,122106,122116,122125,122135,122145,122157,122167,122176,122186],{"__ignoreMap":169},[252,122003,122004,122007],{"class":254,"line":255},[252,122005,122006],{"class":2102},"qemu-system-x86_64",[252,122008,24818],{"class":311},[252,122010,122011,122014,122017],{"class":254,"line":170},[252,122012,122013],{"class":311},"        -M",[252,122015,122016],{"class":367}," q35,vmport=off",[252,122018,24818],{"class":311},[252,122020,122021,122024,122027],{"class":254,"line":1318},[252,122022,122023],{"class":311},"        -accel",[252,122025,122026],{"class":367}," kvm",[252,122028,24818],{"class":311},[252,122030,122031,122034,122037],{"class":254,"line":1333},[252,122032,122033],{"class":311},"        -cpu",[252,122035,122036],{"class":367}," qemu64,+sse3,+sse4.2",[252,122038,24818],{"class":311},[252,122040,122041,122044,122047,122049],{"class":254,"line":1339},[252,122042,122043],{"class":311},"        -smp",[252,122045,122046],{"class":367}," 8,cores=",[252,122048,556],{"class":311},[252,122050,24818],{"class":311},[252,122052,122053,122056,122059],{"class":254,"line":1353},[252,122054,122055],{"class":311},"        -m",[252,122057,122058],{"class":367}," 6G",[252,122060,24818],{"class":311},[252,122062,122063,122066],{"class":254,"line":1359},[252,122064,122065],{"class":311},"        -usb",[252,122067,24818],{"class":311},[252,122069,122070,122073,122076],{"class":254,"line":1450},[252,122071,122072],{"class":311},"        -device",[252,122074,122075],{"class":367}," virtio-tablet",[252,122077,24818],{"class":311},[252,122079,122080,122082,122085],{"class":254,"line":1456},[252,122081,122072],{"class":311},[252,122083,122084],{"class":367}," virtio-keyboard",[252,122086,24818],{"class":311},[252,122088,122089,122091,122094],{"class":254,"line":1468},[252,122090,122072],{"class":311},[252,122092,122093],{"class":367}," usb-tablet",[252,122095,24818],{"class":311},[252,122097,122098,122101,122104],{"class":254,"line":1751},[252,122099,122100],{"class":311},"        -bios",[252,122102,122103],{"class":367}," OVMF-pure-efi64.fd",[252,122105,24818],{"class":311},[252,122107,122108,122111,122114],{"class":254,"line":1756},[252,122109,122110],{"class":311},"        -net",[252,122112,122113],{"class":367}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[252,122115,24818],{"class":311},[252,122117,122118,122120,122123],{"class":254,"line":1762},[252,122119,122110],{"class":311},[252,122121,122122],{"class":367}," nic,model=virtio",[252,122124,24818],{"class":311},[252,122126,122127,122130,122133],{"class":254,"line":1767},[252,122128,122129],{"class":311},"        -audio",[252,122131,122132],{"class":367}," sdl,model=hda",[252,122134,24818],{"class":311},[252,122136,122137,122140,122143],{"class":254,"line":1781},[252,122138,122139],{"class":311},"        -display",[252,122141,122142],{"class":367}," sdl,gl=on,show-cursor=on",[252,122144,24818],{"class":311},[252,122146,122147,122149,122152,122155],{"class":254,"line":1786},[252,122148,122072],{"class":311},[252,122150,122151],{"class":367}," virtio-vga-gl,xres=1920,yres=",[252,122153,122154],{"class":311},"1080",[252,122156,24818],{"class":311},[252,122158,122159,122162,122165],{"class":254,"line":1792},[252,122160,122161],{"class":311},"        -drive",[252,122163,122164],{"class":367}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[252,122166,24818],{"class":311},[252,122168,122169,122171,122174],{"class":254,"line":1813},[252,122170,122161],{"class":311},[252,122172,122173],{"class":367}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[252,122175,24818],{"class":311},[252,122177,122178,122181,122184],{"class":254,"line":1818},[252,122179,122180],{"class":311},"        -monitor",[252,122182,122183],{"class":367}," stdio",[252,122185,24818],{"class":311},[252,122187,122188,122191],{"class":254,"line":1832},[252,122189,122190],{"class":311},"        -serial",[252,122192,122193],{"class":367}," none\n",[207,122195,122196],{"start":1339},[210,122197,122198,122199],{},"常用操作：",[207,122200,122201,122204,122260],{},[210,122202,122203],{},"全屏：Ctrl+Alt+F",[210,122205,122206,122207,122212],{},"adb调试",[207,122208,122209],{},[210,122210,122211],{},"使Linux与Android用ADB连接。",[244,122213,122215],{"className":117432,"code":122214,"language":117434,"meta":169,"style":169},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[22,122216,122217,122222,122233,122238,122250,122255],{"__ignoreMap":169},[252,122218,122219],{"class":254,"line":255},[252,122220,122221],{"class":321},"# 连接安卓\n",[252,122223,122224,122227,122230],{"class":254,"line":170},[252,122225,122226],{"class":2102},"adb",[252,122228,122229],{"class":367}," connect",[252,122231,122232],{"class":311}," 127.0.0.1\n",[252,122234,122235],{"class":254,"line":1318},[252,122236,122237],{"class":321},"# 打开shell\n",[252,122239,122240,122242,122244,122247],{"class":254,"line":1333},[252,122241,122226],{"class":2102},[252,122243,27023],{"class":311},[252,122245,122246],{"class":367}," 127.0.0.1:5555",[252,122248,122249],{"class":367}," shell\n",[252,122251,122252],{"class":254,"line":1339},[252,122253,122254],{"class":321},"# 使用root权限\n",[252,122256,122257],{"class":254,"line":1353},[252,122258,122259],{"class":2102},"su\n",[210,122261,122262,122263],{},"中文输入法",[207,122264,122265],{},[210,122266,122267],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122269,122271],{"id":122270},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122273,122274,122275],{},"rEFInd 官网与文档：",[501,122276,122277],{"href":122277,"rel":122278},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24004],[5266,122280,122281],{},"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":169,"searchDepth":170,"depth":170,"links":122283},[122284,122285,122289],{"id":121949,"depth":170,"text":121950},{"id":121953,"depth":170,"text":121954,"children":122286},[122287,122288],{"id":121957,"depth":1318,"text":121958},{"id":121973,"depth":1318,"text":121974},{"id":122270,"depth":170,"text":122271},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121941,"description":178},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122296,"title":122297,"body":122298,"description":178,"extension":179,"meta":125596,"navigation":181,"path":125597,"seo":125598,"stem":125599,"__hash__":125600},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122299,"toc":125570},[122300,122303,122307,122310,122317,122567,122570,122642,122645,122649,122653,122658,122661,122664,122667,122672,122675,122678,122681,122686,122689,122694,122697,122700,122705,122708,122713,122716,122720,122724,122727,122732,122735,122749,122752,122755,122764,122767,122776,122779,122782,122791,122794,122803,122806,122809,122818,122821,122824,122839,122842,122845,122854,122859,122862,122865,122874,122877,122886,122889,122898,122901,122910,122915,122918,122926,122931,122934,122943,122946,122954,122959,122962,122971,122974,122977,122981,122984,122989,122992,122997,123011,123016,123021,123032,123037,123043,123048,123063,123068,123071,123076,123081,123086,123094,123099,123106,123111,123122,123127,123130,123134,123137,123140,123145,123148,123167,123172,123175,123184,123189,123192,123214,123217,123247,123250,123255,123258,123272,123277,123296,123299,123302,123307,123319,123324,123329,123332,123337,123340,123355,123358,123363,123368,123372,123377,123417,123420,123424,123430,123436,123441,123444,123451,123456,123463,123466,123469,123475,123489,123492,123552,123555,123569,123581,123584,123587,123590,123654,123657,123660,123663,123683,123686,123691,123698,123702,123705,123709,123714,123719,123723,123726,123729,123771,123776,123779,123801,123816,123818,123823,123835,123895,123897,123899,123953,123955,123957,123963,123968,123971,123976,123980,123983,124045,124050,124053,124055,124059,124071,124153,124155,124157,124211,124217,124219,124223,124228,124230,124235,124239,124259,124294,124298,124301,124304,124307,124314,124317,124329,124332,124347,124350,124369,124417,124420,124437,124440,124454,124459,124462,124471,124486,124498,124536,124541,124550,124555,124560,124586,124595,124599,124603,124608,124611,124615,124619,124624,124627,124632,124635,124640,124643,124648,124651,124655,124660,124663,124668,124671,124675,124680,124683,124688,124691,124696,124699,124703,124708,124711,124716,124719,124724,124727,124731,124736,124739,124744,124747,124752,124755,124760,124763,124768,124771,124776,124779,124783,124788,124791,124796,124803,124807,124812,124815,124820,124823,124827,124832,124835,124838,124841,124844,124847,124851,124854,124864,124869,124874,124896,124901,124906,124913,124917,124922,124925,124928,124933,124936,124939,124942,124945,124948,124951,124954,124957,124960,124963,124966,124969,124974,124979,124984,124989,124994,124999,125004,125007,125011,125014,125018,125023,125028,125033,125038,125042,125048,125056,125061,125064,125069,125084,125087,125092,125126,125141,125144,125199,125225,125237,125240,125249,125252,125267,125272,125275,125281,125286,125289,125294,125297,125302,125307,125314,125317,125332,125335,125370,125375,125383,125421,125424,125427,125432,125435,125440,125451,125485,125490,125493,125502,125507,125513,125516,125521,125530,125535,125538,125541,125546,125554,125557,125562,125567],[10,122301,122297],{"id":122302},"_7-其他操作",[14,122304,122306],{"id":122305},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122308,122309],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122311,122312,122313,122316],{},"进入工控机的硬盘目录，进入",[22,122314,122315],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[244,122318,122322],{"className":122319,"code":122320,"language":122321,"meta":169,"style":169},"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",[22,122323,122324,122332,122343,122350,122357,122369,122376,122388,122399,122410,122417,122424,122431,122443,122455,122462,122474,122486,122493,122505,122517,122529,122540,122547,122558],{"__ignoreMap":169},[252,122325,122326,122329],{"class":254,"line":255},[252,122327,122328],{"class":51440},"network",[252,122330,122331],{"class":262},": \n",[252,122333,122334,122337,122339,122341],{"class":254,"line":170},[252,122335,122336],{"class":51440},"  version",[252,122338,51577],{"class":262},[252,122340,340],{"class":311},[252,122342,2813],{"class":262},[252,122344,122345,122348],{"class":254,"line":1318},[252,122346,122347],{"class":51440},"  wifis",[252,122349,122331],{"class":262},[252,122351,122352,122355],{"class":254,"line":1333},[252,122353,122354],{"class":51440},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[252,122356,122331],{"class":262},[252,122358,122359,122362,122364,122367],{"class":254,"line":1339},[252,122360,122361],{"class":51440},"      renderer",[252,122363,51577],{"class":262},[252,122365,122366],{"class":367},"NetworkManager",[252,122368,2813],{"class":262},[252,122370,122371,122374],{"class":254,"line":1353},[252,122372,122373],{"class":51440},"      match",[252,122375,122331],{"class":262},[252,122377,122378,122381,122383,122386],{"class":254,"line":1359},[252,122379,122380],{"class":51440},"        name",[252,122382,51577],{"class":262},[252,122384,122385],{"class":367},"\"wlan0\"",[252,122387,2813],{"class":262},[252,122389,122390,122393,122395,122397],{"class":254,"line":1450},[252,122391,122392],{"class":51440},"      dhcp4",[252,122394,51577],{"class":262},[252,122396,1501],{"class":311},[252,122398,2813],{"class":262},[252,122400,122401,122404,122406,122408],{"class":254,"line":1456},[252,122402,122403],{"class":51440},"      dhcp6",[252,122405,51577],{"class":262},[252,122407,1501],{"class":311},[252,122409,2813],{"class":262},[252,122411,122412,122415],{"class":254,"line":1468},[252,122413,122414],{"class":51440},"      access-points",[252,122416,122331],{"class":262},[252,122418,122419,122422],{"class":254,"line":1751},[252,122420,122421],{"class":367},"        \"EMIS_Vinci_Robocon_5G\"",[252,122423,122331],{"class":262},[252,122425,122426,122429],{"class":254,"line":1756},[252,122427,122428],{"class":51440},"          auth",[252,122430,122331],{"class":262},[252,122432,122433,122436,122438,122441],{"class":254,"line":1762},[252,122434,122435],{"class":51440},"            key-management",[252,122437,51577],{"class":262},[252,122439,122440],{"class":367},"\"psk\"",[252,122442,2813],{"class":262},[252,122444,122445,122448,122450,122453],{"class":254,"line":1767},[252,122446,122447],{"class":51440},"            password",[252,122449,51577],{"class":262},[252,122451,122452],{"class":367},"\"vinci666\"",[252,122454,2813],{"class":262},[252,122456,122457,122460],{"class":254,"line":1781},[252,122458,122459],{"class":51440},"          networkmanager",[252,122461,122331],{"class":262},[252,122463,122464,122467,122469,122472],{"class":254,"line":1786},[252,122465,122466],{"class":51440},"            uuid",[252,122468,51577],{"class":262},[252,122470,122471],{"class":367},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[252,122473,2813],{"class":262},[252,122475,122476,122479,122481,122484],{"class":254,"line":1792},[252,122477,122478],{"class":51440},"            name",[252,122480,51577],{"class":262},[252,122482,122483],{"class":367},"\"EMIS_Vinci_Robocon_5G\"",[252,122485,2813],{"class":262},[252,122487,122488,122491],{"class":254,"line":1813},[252,122489,122490],{"class":51440},"            passthrough",[252,122492,122331],{"class":262},[252,122494,122495,122498,122500,122503],{"class":254,"line":1818},[252,122496,122497],{"class":51440},"              wifi-security.auth-alg",[252,122499,51577],{"class":262},[252,122501,122502],{"class":367},"\"open\"",[252,122504,2813],{"class":262},[252,122506,122507,122510,122512,122515],{"class":254,"line":1832},[252,122508,122509],{"class":51440},"              ipv6.addr-gen-mode",[252,122511,51577],{"class":262},[252,122513,122514],{"class":367},"\"default\"",[252,122516,2813],{"class":262},[252,122518,122519,122522,122524,122527],{"class":254,"line":1837},[252,122520,122521],{"class":51440},"              ipv6.ip6-privacy",[252,122523,51577],{"class":262},[252,122525,122526],{"class":367},"\"-1\"",[252,122528,2813],{"class":262},[252,122530,122531,122534,122536,122538],{"class":254,"line":1866},[252,122532,122533],{"class":51440},"              proxy._",[252,122535,51577],{"class":262},[252,122537,7792],{"class":367},[252,122539,2813],{"class":262},[252,122541,122542,122545],{"class":254,"line":1871},[252,122543,122544],{"class":51440},"      networkmanager",[252,122546,122331],{"class":262},[252,122548,122549,122552,122554,122556],{"class":254,"line":1888},[252,122550,122551],{"class":51440},"        uuid",[252,122553,51577],{"class":262},[252,122555,122471],{"class":367},[252,122557,2813],{"class":262},[252,122559,122560,122562,122564],{"class":254,"line":1893},[252,122561,122380],{"class":51440},[252,122563,51577],{"class":262},[252,122565,122566],{"class":367},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122568,122569],{},"将其改为新wifi的名和密码：",[244,122571,122573],{"className":122319,"code":122572,"language":122321,"meta":169,"style":169},"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",[22,122574,122575,122581,122590,122596,122603,122612,122620,122626,122632],{"__ignoreMap":169},[252,122576,122577,122579],{"class":254,"line":255},[252,122578,122328],{"class":51440},[252,122580,3878],{"class":262},[252,122582,122583,122585,122587],{"class":254,"line":170},[252,122584,122336],{"class":51440},[252,122586,51577],{"class":262},[252,122588,122589],{"class":311},"2\n",[252,122591,122592,122594],{"class":254,"line":1318},[252,122593,122347],{"class":51440},[252,122595,3878],{"class":262},[252,122597,122598,122601],{"class":254,"line":1333},[252,122599,122600],{"class":51440},"    wlan0",[252,122602,3878],{"class":262},[252,122604,122605,122607,122609],{"class":254,"line":1339},[252,122606,122392],{"class":51440},[252,122608,51577],{"class":262},[252,122610,122611],{"class":311},"true\n",[252,122613,122614,122616,122618],{"class":254,"line":1353},[252,122615,122403],{"class":51440},[252,122617,51577],{"class":262},[252,122619,122611],{"class":311},[252,122621,122622,122624],{"class":254,"line":1359},[252,122623,122414],{"class":51440},[252,122625,3878],{"class":262},[252,122627,122628,122630],{"class":254,"line":1450},[252,122629,122421],{"class":367},[252,122631,3878],{"class":262},[252,122633,122634,122637,122639],{"class":254,"line":1456},[252,122635,122636],{"class":51440},"          password",[252,122638,51577],{"class":262},[252,122640,122641],{"class":367},"\"vinci666\"\n",[19,122643,122644],{},"工控机开机即可连上网。",[14,122646,122648],{"id":122647},"_72-ssh远程开发","7.2 SSH远程开发",[224,122650,122652],{"id":122651},"_721-环境准备","7.2.1 环境准备",[19,122654,122655],{},[412,122656,122657],{},"1.硬件准备",[19,122659,122660],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122662,122663],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122665,122666],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122668,122669],{},[412,122670,122671],{},"2.设置固定IP",[19,122673,122674],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122676,122677],{},"1.进入设置界面",[19,122679,122680],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122682,122683],{},[1601,122684],{"alt":169,"src":122685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122687,122688],{},"2.配置所连接的网络",[19,122690,122691],{},[1601,122692],{"alt":169,"src":122693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122695,122696],{},"3.设置固定IP",[19,122698,122699],{},"查看当前IP地址。",[19,122701,122702],{},[1601,122703],{"alt":169,"src":122704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122706,122707],{},"设置固定IP。",[19,122709,122710],{},[1601,122711],{"alt":169,"src":122712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122714,122715],{},"至此，IP配置完毕。",[224,122717,122719],{"id":122718},"_722-环境搭建","7.2.2 环境搭建",[19,122721,122722],{},[412,122723,25893],{},[19,122725,122726],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122728,122729],{},[412,122730,122731],{},"实现",[19,122733,122734],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[207,122736,122737,122740,122743,122746],{},[210,122738,122739],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[210,122741,122742],{},"远程主机启动SSH服务；",[210,122744,122745],{},"本地主机登陆远程主机；",[210,122747,122748],{},"实现数据传输。",[19,122750,122751],{},"1.安装SSH客户端与服务端",[19,122753,122754],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[244,122756,122758],{"className":120952,"code":122757,"language":120954,"meta":120955,"style":169}," sudo apt install openssh-server\n",[22,122759,122760],{"__ignoreMap":169},[252,122761,122762],{"class":254,"line":255},[252,122763,122757],{},[19,122765,122766],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[244,122768,122770],{"className":120952,"code":122769,"language":120954,"meta":120955,"style":169},"sudo apt install openssh-client\n",[22,122771,122772],{"__ignoreMap":169},[252,122773,122774],{"class":254,"line":255},[252,122775,122769],{},[19,122777,122778],{},"2.远程主机启动SSH服务",[19,122780,122781],{},"远程主机启动 ssh 服务命令如下：",[244,122783,122785],{"className":120952,"code":122784,"language":120954,"meta":120955,"style":169},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[22,122786,122787],{"__ignoreMap":169},[252,122788,122789],{"class":254,"line":255},[252,122790,122784],{},[19,122792,122793],{},"启动后可使用如下命令查看服务是否正常运行：",[244,122795,122797],{"className":120952,"code":122796,"language":120954,"meta":120955,"style":169},"ps -e | grep ssh\n",[22,122798,122799],{"__ignoreMap":169},[252,122800,122801],{"class":254,"line":255},[252,122802,122796],{},[19,122804,122805],{},"如果启动成功，会包含 sshd 程序。",[19,122807,122808],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[244,122810,122812],{"className":120952,"code":122811,"language":120954,"meta":120955,"style":169},"sudo systemctl enable ssh\n",[22,122813,122814],{"__ignoreMap":169},[252,122815,122816],{"class":254,"line":255},[252,122817,122811],{},[19,122819,122820],{},"3.本地远程登录",[19,122822,122823],{},"登录远程主机可以调用如下命令:",[244,122825,122827],{"className":117432,"code":122826,"language":117434,"meta":169,"style":169},"ssh -X 用户名@ip地址\n",[22,122828,122829],{"__ignoreMap":169},[252,122830,122831,122833,122836],{"class":254,"line":255},[252,122832,121783],{"class":2102},[252,122834,122835],{"class":311}," -X",[252,122837,122838],{"class":367}," 用户名@ip地址\n",[19,122840,122841],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,122843,122844],{},"如果退出，可以调用exit命令：",[244,122846,122848],{"className":120952,"code":122847,"language":120954,"meta":120955,"style":169},"exit\n",[22,122849,122850],{"__ignoreMap":169},[252,122851,122852],{"class":254,"line":255},[252,122853,122847],{},[19,122855,122856],{},[412,122857,122858],{},"4.实现数据传输",[19,122860,122861],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,122863,122864],{},"上传文件指令格式如下：",[244,122866,122868],{"className":120952,"code":122867,"language":120954,"meta":120955,"style":169},"scp 本地文件路径 账号@ip:路径\n",[22,122869,122870],{"__ignoreMap":169},[252,122871,122872],{"class":254,"line":255},[252,122873,122867],{},[19,122875,122876],{},"上传文件夹指令格式如下：",[244,122878,122880],{"className":120952,"code":122879,"language":120954,"meta":120955,"style":169},"scp -r 本地文件夹路径 账号@ip:路径\n",[22,122881,122882],{"__ignoreMap":169},[252,122883,122884],{"class":254,"line":255},[252,122885,122879],{},[19,122887,122888],{},"下载文件指令格式如下：",[244,122890,122892],{"className":120952,"code":122891,"language":120954,"meta":120955,"style":169},"scp 账号@ip:路径 本地文件夹路径\n",[22,122893,122894],{"__ignoreMap":169},[252,122895,122896],{"class":254,"line":255},[252,122897,122891],{},[19,122899,122900],{},"下载文件夹指令格式如下：",[244,122902,122904],{"className":120952,"code":122903,"language":120954,"meta":120955,"style":169},"scp -r 账号@ip:路径 本地文件夹路径\n",[22,122905,122906],{"__ignoreMap":169},[252,122907,122908],{"class":254,"line":255},[252,122909,122903],{},[19,122911,122912],{},[412,122913,122914],{},"优化",[19,122916,122917],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[207,122919,122920,122923],{},[210,122921,122922],{},"本地生成密钥对；",[210,122924,122925],{},"将公钥上传至远程主机。",[19,122927,122928],{},[412,122929,122930],{},"1.生成密钥对",[19,122932,122933],{},"本地客户端生成公私钥：（一路回车默认即可）",[244,122935,122937],{"className":120952,"code":122936,"language":120954,"meta":120955,"style":169},"ssh-keygen\n",[22,122938,122939],{"__ignoreMap":169},[252,122940,122941],{"class":254,"line":255},[252,122942,122936],{},[19,122944,122945],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[207,122947,122948,122951],{},[210,122949,122950],{},"id_rsa （私钥）；",[210,122952,122953],{},"id_rsa.pub (公钥)。",[19,122955,122956],{},[412,122957,122958],{},"2.公钥上传",[19,122960,122961],{},"上传指令如下：",[244,122963,122965],{"className":120952,"code":122964,"language":120954,"meta":120955,"style":169},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[22,122966,122967],{"__ignoreMap":169},[252,122968,122969],{"class":254,"line":255},[252,122970,122964],{},[19,122972,122973],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,122975,122976],{},"以后再远程登录就无需录入密码了。",[224,122978,122980],{"id":122979},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,122982,122983],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,122985,122986],{},[412,122987,122988],{},"1.准备工作",[19,122990,122991],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,122993,122994],{},[412,122995,122996],{},"2.为VScode安装远程开发插件",[19,122998,122999,123000,123003,123004,123007,123008,28525],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[22,123001,123002],{},"扩展：商店","的搜索栏输入",[22,123005,123006],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[22,123009,123010],{},"安装",[19,123012,123013],{},[1601,123014],{"alt":169,"src":123015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123017,123018],{},[412,123019,123020],{},"3.配置远程连接",[19,123022,123023,123024,123027,123028,123031],{},"步骤1：使用快捷键",[22,123025,123026],{},"ctrl + shift + p","打开命令输入窗口，并输入",[22,123029,123030],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123033,123034],{},[1601,123035],{"alt":169,"src":123036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123038,123039,123040,28525],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[22,123041,123042],{},"Add New SSH Host",[19,123044,123045],{},[1601,123046],{"alt":169,"src":123047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123049,123050,123051,123054,123055,123058,123059,123062],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[22,123052,123053],{},"ssh +X ubuntu@192.168.43.164","，其中，",[22,123056,123057],{},"ubuntu","需要替换为你的登录用户名，",[22,123060,123061],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123064,123065],{},[1601,123066],{"alt":169,"src":123067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123069,123070],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123072,123073],{},[1601,123074],{"alt":169,"src":123075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123077,123078],{},[1601,123079],{"alt":169,"src":123080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123082,123083],{},[412,123084,123085],{},"4.使用",[19,123087,123088,123089,123027,123091,123093],{},"步骤1：继续使用快捷键",[22,123090,123026],{},[22,123092,123030],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123095,123096],{},[1601,123097],{"alt":169,"src":123098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123100,123101,123102,123105],{},"或者，也可以点击侧边栏的",[22,123103,123104],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123107,123108],{},[1601,123109],{"alt":169,"src":123110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123112,123113,123114,123117,123118,123121],{},"步骤2：选择菜单栏的",[22,123115,123116],{},"文件","下的",[22,123119,123120],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123123,123124],{},[1601,123125],{"alt":169,"src":123126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123128,123129],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123131,123133],{"id":123132},"_73-远程桌面","7.3 远程桌面",[19,123135,123136],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123138,123139],{},"我们选择使用VNC来看。",[207,123141,123142],{},[210,123143,123144],{},"安装VNC服务器：",[19,123146,123147],{},"这里以TigerVNC为例进行安装：",[244,123149,123151],{"className":117432,"code":123150,"language":117434,"meta":169,"style":169},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[22,123152,123153],{"__ignoreMap":169},[252,123154,123155,123157,123159,123161,123164],{"class":254,"line":255},[252,123156,24716],{"class":2102},[252,123158,117453],{"class":367},[252,123160,23973],{"class":367},[252,123162,123163],{"class":367}," tigervnc-standalone-server",[252,123165,123166],{"class":367}," tigervnc-common\n",[207,123168,123169],{"start":170},[210,123170,123171],{},"设置VNC密码：",[19,123173,123174],{},"为VNC用户设置密码，运行以下命令：",[244,123176,123178],{"className":117432,"code":123177,"language":117434,"meta":169,"style":169},"vncpasswd\n",[22,123179,123180],{"__ignoreMap":169},[252,123181,123182],{"class":254,"line":255},[252,123183,123177],{"class":2102},[207,123185,123186],{"start":1318},[210,123187,123188],{},"配置VNC启动脚本:",[19,123190,123191],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[244,123193,123195],{"className":117432,"code":123194,"language":117434,"meta":169,"style":169},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[22,123196,123197,123206],{"__ignoreMap":169},[252,123198,123199,123201,123203],{"class":254,"line":255},[252,123200,101403],{"class":2102},[252,123202,29356],{"class":311},[252,123204,123205],{"class":367}," ~\u002F.vnc\n",[252,123207,123208,123211],{"class":254,"line":170},[252,123209,123210],{"class":2102},"nano",[252,123212,123213],{"class":367}," ~\u002F.vnc\u002Fxstartup\n",[19,123215,123216],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[244,123218,123220],{"className":117432,"code":123219,"language":117434,"meta":169,"style":169},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[22,123221,123222,123227,123235,123242],{"__ignoreMap":169},[252,123223,123224],{"class":254,"line":255},[252,123225,123226],{"class":321},"#!\u002Fbin\u002Fsh\n",[252,123228,123229,123232],{"class":254,"line":170},[252,123230,123231],{"class":311},"unset",[252,123233,123234],{"class":367}," SESSION_MANAGER\n",[252,123236,123237,123239],{"class":254,"line":1318},[252,123238,123231],{"class":311},[252,123240,123241],{"class":367}," DBUS_SESSION_BUS_ADDRESS\n",[252,123243,123244],{"class":254,"line":1333},[252,123245,123246],{"class":2102},"gnome-session\n",[19,123248,123249],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[207,123251,123252],{"start":1333},[210,123253,123254],{},"给予执行权限：",[19,123256,123257],{},"为xstartup文件设置执行权限：",[244,123259,123261],{"className":117432,"code":123260,"language":117434,"meta":169,"style":169},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[22,123262,123263],{"__ignoreMap":169},[252,123264,123265,123267,123270],{"class":254,"line":255},[252,123266,24751],{"class":2102},[252,123268,123269],{"class":367}," +x",[252,123271,123213],{"class":367},[207,123273,123274],{"start":1339},[210,123275,123276],{},"启动VNC服务器：",[244,123278,123280],{"className":117432,"code":123279,"language":117434,"meta":169,"style":169},"vncserver -geometry 1920x1080 -localhost=0\n",[22,123281,123282],{"__ignoreMap":169},[252,123283,123284,123287,123290,123293],{"class":254,"line":255},[252,123285,123286],{"class":2102},"vncserver",[252,123288,123289],{"class":311}," -geometry",[252,123291,123292],{"class":367}," 1920x1080",[252,123294,123295],{"class":311}," -localhost=0\n",[19,123297,123298],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123300,123301],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[207,123303,123304],{"start":1353},[210,123305,123306],{},"查看已开启的VNC服务器：",[244,123308,123310],{"className":117432,"code":123309,"language":117434,"meta":169,"style":169},"vncserver -list\n",[22,123311,123312],{"__ignoreMap":169},[252,123313,123314,123316],{"class":254,"line":255},[252,123315,123286],{"class":2102},[252,123317,123318],{"class":311}," -list\n",[19,123320,123321],{},[1601,123322],{"alt":169,"src":123323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[207,123325,123326],{"start":1359},[210,123327,123328],{},"连接到VNC服务器：",[19,123330,123331],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[207,123333,123334],{"start":1450},[210,123335,123336],{},"停止VNC服务器：",[19,123338,123339],{},"如果需要停止VNC服务器，可以使用以下命令：",[244,123341,123343],{"className":117432,"code":123342,"language":117434,"meta":169,"style":169},"vncserver -kill :1\n",[22,123344,123345],{"__ignoreMap":169},[252,123346,123347,123349,123352],{"class":254,"line":255},[252,123348,123286],{"class":2102},[252,123350,123351],{"class":311}," -kill",[252,123353,123354],{"class":367}," :1\n",[19,123356,123357],{},"将:1替换为你实际使用的显示编号。",[19,123359,123360],{},[1601,123361],{"alt":169,"src":123362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123364,123365],{},[1601,123366],{"alt":169,"src":123367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123369,123371],{"id":123370},"_74-usb端口设置","7.4 USB端口设置",[19,123373,123374],{},[412,123375,123376],{},"首先先配置好权限",[244,123378,123380],{"className":117432,"code":123379,"language":117434,"meta":169,"style":169},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[22,123381,123382,123387,123400,123407,123412],{"__ignoreMap":169},[252,123383,123384],{"class":254,"line":255},[252,123385,123386],{"class":321},"# 将用户权限提高\n",[252,123388,123389,123391,123393,123395,123398],{"class":254,"line":170},[252,123390,24716],{"class":2102},[252,123392,26714],{"class":367},[252,123394,26717],{"class":311},[252,123396,123397],{"class":367}," dialout",[252,123399,26722],{"class":262},[252,123401,123402,123404],{"class":254,"line":1318},[252,123403,26741],{"class":2102},[252,123405,123406],{"class":367}," dialout\n",[252,123408,123409],{"class":254,"line":1333},[252,123410,123411],{"class":321},"# 查看下面命令是否输出dialout（若输出才正常）\n",[252,123413,123414],{"class":254,"line":1339},[252,123415,123416],{"class":2102},"groups\n",[19,123418,123419],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[224,123421,123423],{"id":123422},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123425,123426,123429],{},[412,123427,123428],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123431,123432,123435],{},[412,123433,123434],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123437,123438],{},[412,123439,123440],{},"流程如下：",[19,123442,123443],{},"（1）.查找设备idVendor和idProduct",[19,123445,123446,123447,123450],{},"接入两个USB设备，在终端调用指令",[22,123448,123449],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123452,123453],{},[1601,123454],{"alt":169,"src":123455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123457,123458,123459,123462],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[22,123460,123461],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123464,123465],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123467,123468],{},"（2）.编写映射规则",[19,123470,38,123471,123474],{},[22,123472,123473],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[244,123476,123478],{"className":117432,"code":123477,"language":117434,"meta":169,"style":169},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[22,123479,123480],{"__ignoreMap":169},[252,123481,123482,123484,123486],{"class":254,"line":255},[252,123483,24716],{"class":2102},[252,123485,118719],{"class":367},[252,123487,123488],{"class":367}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123490,123491],{},"输入如下内容：",[244,123493,123495],{"className":117432,"code":123494,"language":117434,"meta":169,"style":169},"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",[22,123496,123497,123527],{"__ignoreMap":169},[252,123498,123499,123502,123504,123507,123510,123513,123516,123518,123521,123524],{"class":254,"line":255},[252,123500,123501],{"class":262},"KERNEL",[252,123503,308],{"class":258},[252,123505,123506],{"class":367},"=\"ttyUSB*\",",[252,123508,123509],{"class":2102}," ATTRS",[252,123511,123512],{"class":367},"{idVendor}==",[252,123514,123515],{"class":2102},"\"10c4\"",[252,123517,641],{"class":2102},[252,123519,123520],{"class":367}," ATTRS{idProduct}==\"ea60\",",[252,123522,123523],{"class":367}," MODE:=\"0777\",",[252,123525,123526],{"class":367}," SYMLINK+=\"mylidar\"\n",[252,123528,123529,123531,123533,123535,123537,123539,123542,123544,123547,123549],{"class":254,"line":170},[252,123530,123501],{"class":262},[252,123532,308],{"class":258},[252,123534,123506],{"class":367},[252,123536,123509],{"class":2102},[252,123538,123512],{"class":367},[252,123540,123541],{"class":2102},"\"1a86\"",[252,123543,641],{"class":2102},[252,123545,123546],{"class":367}," ATTRS{idProduct}==\"7523\",",[252,123548,123523],{"class":367},[252,123550,123551],{"class":367}," SYMLINK+=\"mycar\"\n",[19,123553,123554],{},"代码解释：",[1270,123556,123557,123560,123563,123566],{},[210,123558,123559],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[210,123561,123562],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[210,123564,123565],{},"SYMLINK是符号连接，即绑定的别名；",[210,123567,123568],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123570,123571,123572,123575,123578],{},"***小提示：***",[23692,123573,123574],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[22,123576,123577],{},"\u002Fetc\u002Fudev\u002Frule.d",[23692,123579,123580],{},"目录即可。",[19,123582,123583],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123585,123586],{},"（3）.使规则生效",[19,123588,123589],{},"在终端下输入如下指令：",[244,123591,123593],{"className":117432,"code":123592,"language":117434,"meta":169,"style":169},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[22,123594,123595,123600,123612,123623,123627,123632,123645],{"__ignoreMap":169},[252,123596,123597],{"class":254,"line":255},[252,123598,123599],{"class":321},"# Ubuntu用下方命令\n",[252,123601,123602,123604,123606,123609],{"class":254,"line":170},[252,123603,24716],{"class":2102},[252,123605,120184],{"class":367},[252,123607,123608],{"class":367}," udev",[252,123610,123611],{"class":367}," reload\n",[252,123613,123614,123616,123618,123620],{"class":254,"line":1318},[252,123615,24716],{"class":2102},[252,123617,120184],{"class":367},[252,123619,123608],{"class":367},[252,123621,123622],{"class":367}," restart\n",[252,123624,123625],{"class":254,"line":1333},[252,123626,2539],{"emptyLinePlaceholder":181},[252,123628,123629],{"class":254,"line":1339},[252,123630,123631],{"class":321},"#Fedora用下方命令\n",[252,123633,123634,123636,123639,123642],{"class":254,"line":1353},[252,123635,24716],{"class":2102},[252,123637,123638],{"class":367}," udevadm",[252,123640,123641],{"class":367}," control",[252,123643,123644],{"class":311}," --reload\n",[252,123646,123647,123649,123651],{"class":254,"line":1359},[252,123648,24716],{"class":2102},[252,123650,123638],{"class":367},[252,123652,123653],{"class":367}," trigger\n",[19,123655,123656],{},"再重新插拔设备即可。",[19,123658,123659],{},"（4）.测试",[19,123661,123662],{},"终端下输入如下指令",[244,123664,123666],{"className":117432,"code":123665,"language":117434,"meta":169,"style":169},"ll \u002Fdev | grep ttyUSB\n",[22,123667,123668],{"__ignoreMap":169},[252,123669,123670,123673,123676,123678,123680],{"class":254,"line":255},[252,123671,123672],{"class":2102},"ll",[252,123674,123675],{"class":367}," \u002Fdev",[252,123677,25249],{"class":258},[252,123679,30376],{"class":2102},[252,123681,123682],{"class":367}," ttyUSB\n",[19,123684,123685],{},"运行结果如下：",[19,123687,123688],{},[1601,123689],{"alt":169,"src":123690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123692,123693,123694,123697],{},"也可以多次插拔USB设备，会发现设备端口",[22,123695,123696],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123699,123700],{},[412,123701,118100],{},[19,123703,123704],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[224,123706,123708],{"id":123707},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123710,123711,123713],{},[412,123712,123428],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123715,123716,123718],{},[412,123717,123434],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123720,123721],{},[412,123722,123440],{},[19,123724,123725],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123727,123728],{},"调用如下指令查看第一台雷达的USB信息：",[244,123730,123732],{"className":117432,"code":123731,"language":117434,"meta":169,"style":169},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[22,123733,123734,123754],{"__ignoreMap":169},[252,123735,123736,123739,123741,123744,123747,123749,123751],{"class":254,"line":255},[252,123737,123738],{"class":2102},"udevadm",[252,123740,69961],{"class":367},[252,123742,123743],{"class":311}," --attribute-walk",[252,123745,123746],{"class":311}," --name=\u002Fdev\u002FttyUSB0",[252,123748,25249],{"class":258},[252,123750,30376],{"class":2102},[252,123752,123753],{"class":367}," KERNELS\n",[252,123755,123756,123758,123760,123762,123765,123767,123769],{"class":254,"line":170},[252,123757,123738],{"class":2102},[252,123759,69961],{"class":367},[252,123761,123743],{"class":311},[252,123763,123764],{"class":311}," --name=\u002Fdev\u002FttyACM0",[252,123766,25249],{"class":258},[252,123768,30376],{"class":2102},[252,123770,123753],{"class":367},[19,123772,123773],{},[1601,123774],{"alt":169,"src":123775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,123777,123778],{},"调用如下指令查看第二台雷达的USB信息：",[244,123780,123782],{"className":117432,"code":123781,"language":117434,"meta":169,"style":169},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[22,123783,123784],{"__ignoreMap":169},[252,123785,123786,123788,123790,123792,123795,123797,123799],{"class":254,"line":255},[252,123787,123738],{"class":2102},[252,123789,69961],{"class":367},[252,123791,123743],{"class":311},[252,123793,123794],{"class":311}," --name=\u002Fdev\u002FttyUSB1",[252,123796,25249],{"class":258},[252,123798,30376],{"class":2102},[252,123800,123753],{"class":367},[19,123802,123803,123804,123807,123808,123811,123812,123815],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[22,123805,123806],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[22,123809,123810],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[412,123813,123814],{},"唯一性标识","”。",[19,123817,123468],{},[19,123819,38,123820,123822],{},[22,123821,123473],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[244,123824,123825],{"className":117432,"code":123477,"language":117434,"meta":169,"style":169},[22,123826,123827],{"__ignoreMap":169},[252,123828,123829,123831,123833],{"class":254,"line":255},[252,123830,24716],{"class":2102},[252,123832,118719],{"class":367},[252,123834,123488],{"class":367},[244,123836,123838],{"className":117432,"code":123837,"language":117434,"meta":169,"style":169},"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",[22,123839,123840,123869],{"__ignoreMap":169},[252,123841,123842,123844,123846,123848,123851,123853,123856,123859,123861,123864,123866],{"class":254,"line":255},[252,123843,123501],{"class":262},[252,123845,308],{"class":258},[252,123847,123506],{"class":367},[252,123849,123850],{"class":262}," KERNELS",[252,123852,308],{"class":258},[252,123854,123855],{"class":367},"=\"1-1.3:1.0\",",[252,123857,123858],{"class":2102}," MODE:",[252,123860,308],{"class":367},[252,123862,123863],{"class":2102},"\"0777\"",[252,123865,641],{"class":2102},[252,123867,123868],{"class":367}," SYMLINK+=\"rplidar_front\"\n",[252,123870,123871,123873,123875,123877,123879,123881,123884,123886,123888,123890,123892],{"class":254,"line":170},[252,123872,123501],{"class":262},[252,123874,308],{"class":258},[252,123876,123506],{"class":367},[252,123878,123850],{"class":262},[252,123880,308],{"class":258},[252,123882,123883],{"class":367},"=\"1-1.4:1.0\",",[252,123885,123858],{"class":2102},[252,123887,308],{"class":367},[252,123889,123863],{"class":2102},[252,123891,641],{"class":2102},[252,123893,123894],{"class":367}," SYMLINK+=\"rplidar_back\"\n",[19,123896,123586],{},[19,123898,123589],{},[244,123900,123901],{"className":117432,"code":123592,"language":117434,"meta":169,"style":169},[22,123902,123903,123907,123917,123927,123931,123935,123945],{"__ignoreMap":169},[252,123904,123905],{"class":254,"line":255},[252,123906,123599],{"class":321},[252,123908,123909,123911,123913,123915],{"class":254,"line":170},[252,123910,24716],{"class":2102},[252,123912,120184],{"class":367},[252,123914,123608],{"class":367},[252,123916,123611],{"class":367},[252,123918,123919,123921,123923,123925],{"class":254,"line":1318},[252,123920,24716],{"class":2102},[252,123922,120184],{"class":367},[252,123924,123608],{"class":367},[252,123926,123622],{"class":367},[252,123928,123929],{"class":254,"line":1333},[252,123930,2539],{"emptyLinePlaceholder":181},[252,123932,123933],{"class":254,"line":1339},[252,123934,123631],{"class":321},[252,123936,123937,123939,123941,123943],{"class":254,"line":1353},[252,123938,24716],{"class":2102},[252,123940,123638],{"class":367},[252,123942,123641],{"class":367},[252,123944,123644],{"class":311},[252,123946,123947,123949,123951],{"class":254,"line":1359},[252,123948,24716],{"class":2102},[252,123950,123638],{"class":367},[252,123952,123653],{"class":367},[19,123954,123656],{},[19,123956,123659],{},[19,123958,123662,123959,123962],{},[22,123960,123961],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,123964,123965],{},[1601,123966],{"alt":169,"src":123967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,123969,123970],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,123972,123973,123975],{},[412,123974,118100],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[224,123977,123979],{"id":123978},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,123981,123982],{},"（1）.查看所连接的主机USB接口的信息",[244,123984,123986],{"className":117432,"code":123985,"language":117434,"meta":169,"style":169},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[22,123987,123988,124018],{"__ignoreMap":169},[252,123989,123990,123992,123994,123997,123999,124001,124003,124005,124008,124011,124013,124016],{"class":254,"line":255},[252,123991,123738],{"class":2102},[252,123993,69961],{"class":367},[252,123995,123996],{"class":311}," -a",[252,123998,29356],{"class":311},[252,124000,28562],{"class":262},[252,124002,123738],{"class":2102},[252,124004,69961],{"class":367},[252,124006,124007],{"class":311}," -q",[252,124009,124010],{"class":367}," path",[252,124012,25255],{"class":311},[252,124014,124015],{"class":367}," \u002Fdev\u002FttyACM0",[252,124017,269],{"class":262},[252,124019,124020,124022,124024,124026,124028,124030,124032,124034,124036,124038,124040,124043],{"class":254,"line":170},[252,124021,123738],{"class":2102},[252,124023,69961],{"class":367},[252,124025,123996],{"class":311},[252,124027,29356],{"class":311},[252,124029,28562],{"class":262},[252,124031,123738],{"class":2102},[252,124033,69961],{"class":367},[252,124035,124007],{"class":311},[252,124037,124010],{"class":367},[252,124039,25255],{"class":311},[252,124041,124042],{"class":367}," \u002Fdev\u002FttyUSB0",[252,124044,269],{"class":262},[19,124046,124047],{},[1601,124048],{"alt":169,"src":124049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124051,124052],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124054,123468],{},[19,124056,38,124057,123822],{},[22,124058,123473],{},[244,124060,124061],{"className":117432,"code":123477,"language":117434,"meta":169,"style":169},[22,124062,124063],{"__ignoreMap":169},[252,124064,124065,124067,124069],{"class":254,"line":255},[252,124066,24716],{"class":2102},[252,124068,118719],{"class":367},[252,124070,123488],{"class":367},[244,124072,124074],{"className":117432,"code":124073,"language":117434,"meta":169,"style":169},"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",[22,124075,124076,124104,124130],{"__ignoreMap":169},[252,124077,124078,124080,124082,124085,124087,124089,124091,124093,124096,124099,124101],{"class":254,"line":255},[252,124079,123501],{"class":262},[252,124081,308],{"class":258},[252,124083,124084],{"class":367},"=\"ttyACM*\",",[252,124086,123509],{"class":2102},[252,124088,123512],{"class":367},[252,124090,123541],{"class":2102},[252,124092,641],{"class":2102},[252,124094,124095],{"class":367}," ATTRS{idProduct}==\"55d4\",",[252,124097,124098],{"class":367}," ATTRS{serial}==\"0001\",",[252,124100,123523],{"class":367},[252,124102,124103],{"class":367}," SYMLINK+=\"ttyACM_MCU\"\n",[252,124105,124106,124108,124110,124112,124114,124116,124118,124120,124122,124125,124127],{"class":254,"line":170},[252,124107,123501],{"class":262},[252,124109,308],{"class":258},[252,124111,124084],{"class":367},[252,124113,123509],{"class":2102},[252,124115,123512],{"class":367},[252,124117,123541],{"class":2102},[252,124119,641],{"class":2102},[252,124121,124095],{"class":367},[252,124123,124124],{"class":367}," ATTRS{serial}==\"0002\",",[252,124126,123523],{"class":367},[252,124128,124129],{"class":367}," SYMLINK+=\"ttyACM_Lidar\"\n",[252,124131,124132,124134,124136,124138,124140,124142,124144,124146,124148,124150],{"class":254,"line":1318},[252,124133,123501],{"class":262},[252,124135,308],{"class":258},[252,124137,123506],{"class":367},[252,124139,123509],{"class":2102},[252,124141,123512],{"class":367},[252,124143,123541],{"class":2102},[252,124145,641],{"class":2102},[252,124147,123546],{"class":367},[252,124149,123523],{"class":367},[252,124151,124152],{"class":367}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124154,123586],{},[19,124156,123589],{},[244,124158,124159],{"className":117432,"code":123592,"language":117434,"meta":169,"style":169},[22,124160,124161,124165,124175,124185,124189,124193,124203],{"__ignoreMap":169},[252,124162,124163],{"class":254,"line":255},[252,124164,123599],{"class":321},[252,124166,124167,124169,124171,124173],{"class":254,"line":170},[252,124168,24716],{"class":2102},[252,124170,120184],{"class":367},[252,124172,123608],{"class":367},[252,124174,123611],{"class":367},[252,124176,124177,124179,124181,124183],{"class":254,"line":1318},[252,124178,24716],{"class":2102},[252,124180,120184],{"class":367},[252,124182,123608],{"class":367},[252,124184,123622],{"class":367},[252,124186,124187],{"class":254,"line":1333},[252,124188,2539],{"emptyLinePlaceholder":181},[252,124190,124191],{"class":254,"line":1339},[252,124192,123631],{"class":321},[252,124194,124195,124197,124199,124201],{"class":254,"line":1353},[252,124196,24716],{"class":2102},[252,124198,123638],{"class":367},[252,124200,123641],{"class":367},[252,124202,123644],{"class":311},[252,124204,124205,124207,124209],{"class":254,"line":1359},[252,124206,24716],{"class":2102},[252,124208,123638],{"class":367},[252,124210,123653],{"class":367},[19,124212,124213,124214],{},"再重新插拔设备即可，或者 ",[412,124215,124216],{},"直接重启系统。",[19,124218,123659],{},[19,124220,123662,124221,123962],{},[22,124222,123961],{},[19,124224,124225],{},[1601,124226],{"alt":169,"src":124227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124229,123970],{},[19,124231,124232,124234],{},[412,124233,118100],{}," 一些设备可能没有串口号等。",[224,124236,124238],{"id":124237},"_744-其他注意事项","7.4.4 其他注意事项",[19,124240,124241,124242,124244,124245,124248,124249,123,124252,124255,124256,124258],{},"并非所有的USB设备端口号都是",[22,124243,123696],{},"的格式，比如Arduino的端口号可能是",[22,124246,124247],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[22,124250,124251],{},"videon",[22,124253,124254],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[22,124257,124251],{},"端口，绑定时需要关联的也是该接口。",[19,124260,124261,124262,124265,124266,124269,124270,124272,124273,124276,124277,124280,124281,124284,124285,124284,124288,124284,124291,28525],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[22,124263,124264],{},"KERNEL==\"ttyUSB*\"","修改为",[22,124267,124268],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[22,124271,124264],{},"修改为类似于",[22,124274,124275],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[22,124278,124279],{},"video[0,2,4,6]","表示可以绑定的端口为",[22,124282,124283],{},"video0","或",[22,124286,124287],{},"video2",[22,124289,124290],{},"video4",[22,124292,124293],{},"video6",[14,124295,124297],{"id":124296},"_75-挂载内网网页","7.5 挂载内网网页",[19,124299,124300],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124302,124303],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124305,124306],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124308,124309,124310],{},"Termux 下载地址（F-Droid）：",[501,124311,124312],{"href":124312,"rel":124313},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24004],[19,124315,124316],{},"首先打开app后，先更新软件缓存：",[244,124318,124320],{"className":117432,"code":124319,"language":117434,"meta":169,"style":169},"pkg update\n",[22,124321,124322],{"__ignoreMap":169},[252,124323,124324,124327],{"class":254,"line":255},[252,124325,124326],{"class":2102},"pkg",[252,124328,26382],{"class":367},[19,124330,124331],{},"然后换源",[244,124333,124335],{"className":117432,"code":124334,"language":117434,"meta":169,"style":169},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[22,124336,124337],{"__ignoreMap":169},[252,124338,124339,124341,124344],{"class":254,"line":255},[252,124340,123210],{"class":2102},[252,124342,124343],{"class":262}," $PREFIX",[252,124345,124346],{"class":367},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124348,124349],{},"将该文件内容替换为下面：",[244,124351,124353],{"className":117432,"code":124352,"language":117434,"meta":169,"style":169},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[22,124354,124355],{"__ignoreMap":169},[252,124356,124357,124360,124363,124366],{"class":254,"line":255},[252,124358,124359],{"class":2102},"deb",[252,124361,124362],{"class":367}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[252,124364,124365],{"class":367}," stable",[252,124367,124368],{"class":367}," main\n",[1270,124370,124371,124398],{},[210,124372,124373,124374,124376,124377],{},"如果你使用的是",[22,124375,123210],{},"编辑器：",[1270,124378,124379,124386,124392],{},[210,124380,124381,124382,124385],{},"按 ",[22,124383,124384],{},"Ctrl+O"," 保存文件。",[210,124387,124381,124388,124391],{},[22,124389,124390],{},"Enter"," 确认文件名。",[210,124393,124381,124394,124397],{},[22,124395,124396],{},"Ctrl+X"," 退出编辑器。",[210,124399,124373,124400,124376,124403],{},[22,124401,124402],{},"vim",[1270,124404,124405,124411],{},[210,124406,124381,124407,124410],{},[22,124408,124409],{},"Esc"," 退出编辑模式。",[210,124412,124413,124414,124416],{},"输入 ",[22,124415,119357],{}," 保存并退出。",[19,124418,124419],{},"接下来重新更新软件源：",[244,124421,124423],{"className":117432,"code":124422,"language":117434,"meta":169,"style":169},"pkg update && pkg upgrade\n",[22,124424,124425],{"__ignoreMap":169},[252,124426,124427,124429,124431,124433,124435],{"class":254,"line":255},[252,124428,124326],{"class":2102},[252,124430,117483],{"class":367},[252,124432,26330],{"class":262},[252,124434,124326],{"class":2102},[252,124436,117469],{"class":367},[19,124438,124439],{},"安装python：",[244,124441,124443],{"className":117432,"code":124442,"language":117434,"meta":169,"style":169},"pkg install python\n",[22,124444,124445],{"__ignoreMap":169},[252,124446,124447,124449,124451],{"class":254,"line":255},[252,124448,124326],{"class":2102},[252,124450,23973],{"class":367},[252,124452,124453],{"class":367}," python\n",[19,124455,124456,26613],{},[412,124457,124458],{},"通过Termux访问设备存储",[19,124460,124461],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[244,124463,124465],{"className":117432,"code":124464,"language":117434,"meta":169,"style":169},"termux-setup-storage\n",[22,124466,124467],{"__ignoreMap":169},[252,124468,124469],{"class":254,"line":255},[252,124470,124464],{"class":2102},[207,124472,124473],{},[210,124474,124475,26613,124478],{},[412,124476,124477],{},"进入HTML文件所在的目录",[207,124479,124480],{},[210,124481,124482,124483,124485],{},"使用",[22,124484,101413],{},"命令进入HTML文件所在的目录：",[244,124487,124489],{"className":117432,"code":124488,"language":117434,"meta":169,"style":169},"cd ~\u002Fyour_html_folder\n",[22,124490,124491],{"__ignoreMap":169},[252,124492,124493,124495],{"class":254,"line":255},[252,124494,101413],{"class":311},[252,124496,124497],{"class":367}," ~\u002Fyour_html_folder\n",[207,124499,124500],{"start":170},[210,124501,124502,26613,124505,124510,124527],{},[412,124503,124504],{},"启动Python HTTP服务器",[207,124506,124507],{},[210,124508,124509],{},"运行以下命令启动一个简单的HTTP服务器：",[244,124511,124513],{"className":117432,"code":124512,"language":117434,"meta":169,"style":169},"python -m http.server 8000\n",[22,124514,124515],{"__ignoreMap":169},[252,124516,124517,124519,124521,124524],{"class":254,"line":255},[252,124518,30520],{"class":2102},[252,124520,101020],{"class":311},[252,124522,124523],{"class":367}," http.server",[252,124525,124526],{"class":311}," 8000\n",[207,124528,124529],{"start":1318},[210,124530,124531,124532,124535],{},"这会在端口",[22,124533,124534],{},"8000","上启动一个Web服务器。",[1270,124537,124538],{},[210,124539,124540],{},"启动服务器后，Termux会显示日志信息，例如：",[244,124542,124544],{"className":120952,"code":124543,"language":120954,"meta":120955,"style":169},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[22,124545,124546],{"__ignoreMap":169},[252,124547,124548],{"class":254,"line":255},[252,124549,124543],{},[1270,124551,124552],{},[210,124553,124554],{},"这表示服务器已成功启动。",[19,124556,124557],{},[412,124558,124559],{},"在浏览器中访问HTML文件",[207,124561,124562],{},[210,124563,124564,26613,124567,124572],{},[412,124565,124566],{},"在同一设备上访问",[207,124568,124569],{},[210,124570,124571],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[244,124573,124576],{"className":124574,"code":124575,"language":71804,"meta":169,"style":169},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[22,124577,124578],{"__ignoreMap":169},[252,124579,124580,124583],{"class":254,"line":255},[252,124581,124582],{"class":262},"http:",[252,124584,124585],{"class":321},"\u002F\u002Flocalhost:8000\n",[1270,124587,124588],{},[210,124589,124590,124591,124594],{},"如果HTML文件中有",[22,124592,124593],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124596,124598],{"id":124597},"_76-linux重点知识","7.6 Linux重点知识",[224,124600,124602],{"id":124601},"_761-关于点的说明","7.6.1 关于点的说明",[19,124604,124605],{},[1601,124606],{"alt":169,"src":124607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124609,124610],{},"一点本目录，两点上目录",[224,124612,124614],{"id":124613},"_762-目录","7.6.2 目录",[22137,124616,124618],{"id":124617},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124620,124621],{},[412,124622,124623],{},"\u002Fboot:",[19,124625,124626],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124628,124629],{},[412,124630,124631],{},"\u002Fetc:",[19,124633,124634],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124636,124637],{},[412,124638,124639],{},"\u002Flib：",[19,124641,124642],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124644,124645],{},[412,124646,124647],{},"\u002Fsys:",[19,124649,124650],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22137,124652,124654],{"id":124653},"_7622-指令集合","7.6.2.2 指令集合",[19,124656,124657],{},[412,124658,124659],{},"\u002Fbin:",[19,124661,124662],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124664,124665],{},[412,124666,124667],{},"\u002Fsbin:",[19,124669,124670],{},"只有系统管理员才能使用的程序和指令",[22137,124672,124674],{"id":124673},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124676,124677],{},[412,124678,124679],{},"\u002Fdev:",[19,124681,124682],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124684,124685],{},[412,124686,124687],{},"\u002Fmedia:",[19,124689,124690],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124692,124693],{},[412,124694,124695],{},"\u002Fmnt:",[19,124697,124698],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22137,124700,124702],{"id":124701},"_7624-临时文件","7.6.2.4 临时文件",[19,124704,124705],{},[412,124706,124707],{},"\u002Frun:",[19,124709,124710],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124712,124713],{},[412,124714,124715],{},"\u002Flost+found:",[19,124717,124718],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124720,124721],{},[412,124722,124723],{},"\u002Ftmp:",[19,124725,124726],{},"这个目录是用来存放一些临时文件的",[22137,124728,124730],{"id":124729},"_7625-账户","7.6.2.5 账户",[19,124732,124733],{},[412,124734,124735],{},"\u002Froot：",[19,124737,124738],{},"系统管理员的用户主目录",[19,124740,124741,26613],{},[412,124742,124743],{},"\u002Fhome",[19,124745,124746],{},"用户的主目录，以用户的账号命名的",[19,124748,124749,26613],{},[412,124750,124751],{},"\u002Fusr",[19,124753,124754],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,124756,124757],{},[412,124758,124759],{},"\u002Fusr\u002Fbin：",[19,124761,124762],{},"系统用户使用的应用程序与指令",[19,124764,124765],{},[412,124766,124767],{},"\u002Fusr\u002Fsbin：",[19,124769,124770],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,124772,124773],{},[412,124774,124775],{},"\u002Fusr\u002Fsrc：",[19,124777,124778],{},"内核源代码默认的放置目录",[22137,124780,124782],{"id":124781},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,124784,124785],{},[412,124786,124787],{},"\u002Fvar：",[19,124789,124790],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,124792,124793],{},[412,124794,124795],{},"\u002Fproc:",[19,124797,124798,124799,124802],{},"管理 ",[412,124800,124801],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22137,124804,124806],{"id":124805},"_7627-扩展用的","7.6.2.7 扩展用的",[19,124808,124809],{},[412,124810,124811],{},"\u002Fopt:",[19,124813,124814],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,124816,124817],{},[412,124818,124819],{},"\u002Fsrv:",[19,124821,124822],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[224,124824,124826],{"id":124825},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,124828,124829],{},[1601,124830],{"alt":169,"src":124831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,124833,124834],{},"windows-->linux:",[19,124836,124837],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,124839,124840],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,124842,124843],{},"linux传输文件到windows",[19,124845,124846],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[224,124848,124850],{"id":124849},"_764-易忘知识","7.6.4 易忘知识",[19,124852,124853],{},"操作系统内核查看",[244,124855,124856],{"className":117432,"code":121426,"language":117434,"meta":169,"style":169},[22,124857,124858],{"__ignoreMap":169},[252,124859,124860,124862],{"class":254,"line":255},[252,124861,70344],{"class":2102},[252,124863,121435],{"class":311},[19,124865,124866],{},[1601,124867],{"alt":169,"src":124868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,124870,124871],{},[1601,124872],{"alt":169,"src":124873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[244,124875,124877],{"className":117432,"code":124876,"language":117434,"meta":169,"style":169},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[22,124878,124879,124891],{"__ignoreMap":169},[252,124880,124881,124883,124886,124889],{"class":254,"line":255},[252,124882,121643],{"class":2102},[252,124884,124885],{"class":367}," mvtest",[252,124887,124888],{"class":367}," mvtest2",[252,124890,2813],{"class":262},[252,124892,124893],{"class":254,"line":170},[252,124894,124895],{"class":2102},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,124897,124898],{},[1601,124899],{"alt":169,"src":124900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,124902,124903],{},[1601,124904],{"alt":169,"src":124905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,124907,124908,124909,124912],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[22,124910,124911],{},"du -a"," 可以快速查看磁盘使用细节。",[224,124914,124916],{"id":124915},"_765-vim","7.6.5 Vim",[19,124918,124919],{},[1601,124920],{"alt":169,"src":124921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,124923,124924],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,124926,124927],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,124929,124930],{},[412,124931,124932],{},"1.命令模式：",[19,124934,124935],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,124937,124938],{},"x 删除当前光标所在处的字符",[19,124940,124941],{},"：切换到底线命令模式，以在最底一行输入命令",[19,124943,124944],{},"a 进行插入模式，在光标下一个位置输入文本",[19,124946,124947],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,124949,124950],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,124952,124953],{},"dd 剪切当前行",[19,124955,124956],{},"yy 复制当前行",[19,124958,124959],{},"p 粘贴剪贴板内容到光标下方",[19,124961,124962],{},"P 粘贴剪贴板内容到光标上方",[19,124964,124965],{},"u 撤销上一次操作",[19,124967,124968],{},"ctrl+r 重做上一次操作",[19,124970,124971,124973],{},[1058,124972],{}," 保存文件",[19,124975,124976,124978],{},[908,124977],{}," 退出Vim编辑器",[19,124980,124981,124983],{},[908,124982],{},"! 强制退出Vim编辑器，不保存修改",[19,124985,124986],{},[412,124987,124988],{},"2.输入模式：",[19,124990,124991],{},[1601,124992],{"alt":169,"src":124993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,124995,124996],{},[412,124997,124998],{},"3.底线命令模式：",[19,125000,125001],{},[1601,125002],{"alt":169,"src":125003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125005,125006],{},"按下esc可以退出底线命令模式",[224,125008,125010],{"id":125009},"_766-apt","7.6.6 apt",[19,125012,125013],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[224,125015,125017],{"id":125016},"_767-home与root的区别","7.6.7 home与root的区别",[19,125019,125020],{},[1601,125021],{"alt":169,"src":125022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125024,125025],{},[1601,125026],{"alt":169,"src":125027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125029,125030],{},[1601,125031],{"alt":169,"src":125032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125034,125035],{},[1601,125036],{"alt":169,"src":125037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[224,125039,125041],{"id":125040},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125043,125044],{},[501,125045,125046],{"href":125046,"rel":125047},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24004],[207,125049,125050,125053],{},[210,125051,125052],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[210,125054,125055],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125057,125058],{},[1601,125059],{"alt":169,"src":125060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125062,125063],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125065,125066],{},[1601,125067],{"alt":169,"src":125068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[244,125070,125072],{"className":120952,"code":125071,"language":120954,"meta":120955,"style":169},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[22,125073,125074,125079],{"__ignoreMap":169},[252,125075,125076],{"class":254,"line":255},[252,125077,125078],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[252,125080,125081],{"class":254,"line":170},[252,125082,125083],{},".\u002Fpycharm.sh\n",[19,125085,125086],{},"3️⃣创建.desktop文件",[19,125088,125089],{},[412,125090,125091],{},"原理：",[1270,125093,125094,125104],{},[210,125095,125096,125097,125103],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[412,125098,125099,125102],{},[22,125100,125101],{},".desktop"," 文件"," 来识别应用。",[210,125105,125106,125108,125109],{},[22,125107,125101],{}," 文件相当于一个“应用注册表”，告诉系统：",[1270,125110,125111,125114,125117,125120,125123],{},[210,125112,125113],{},"应用名字（Name）",[210,125115,125116],{},"图标（Icon）",[210,125118,125119],{},"执行命令（Exec）",[210,125121,125122],{},"分类（Categories）",[210,125124,125125],{},"是否需要终端（Terminal）",[244,125127,125129],{"className":120952,"code":125128,"language":120954,"meta":120955,"style":169},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[22,125130,125131,125136],{"__ignoreMap":169},[252,125132,125133],{"class":254,"line":255},[252,125134,125135],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[252,125137,125138],{"class":254,"line":170},[252,125139,125140],{},"nano pycharm.desktop\n",[19,125142,125143],{},"nano是一个命令行下的编辑器，也可以使用vim",[244,125145,125147],{"className":120952,"code":125146,"language":120954,"meta":120955,"style":169},"[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",[22,125148,125149,125154,125159,125164,125169,125174,125179,125184,125189,125194],{"__ignoreMap":169},[252,125150,125151],{"class":254,"line":255},[252,125152,125153],{},"[Desktop Entry]\n",[252,125155,125156],{"class":254,"line":170},[252,125157,125158],{},"Version=1.0\n",[252,125160,125161],{"class":254,"line":1318},[252,125162,125163],{},"Type=Application\n",[252,125165,125166],{"class":254,"line":1333},[252,125167,125168],{},"Name=PyCharm\n",[252,125170,125171],{"class":254,"line":1339},[252,125172,125173],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[252,125175,125176],{"class":254,"line":1353},[252,125177,125178],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[252,125180,125181],{"class":254,"line":1359},[252,125182,125183],{},"Comment=JetBrains PyCharm IDE\n",[252,125185,125186],{"class":254,"line":1450},[252,125187,125188],{},"Categories=Development;IDE;\n",[252,125190,125191],{"class":254,"line":1456},[252,125192,125193],{},"Terminal=false\n",[252,125195,125196],{"class":254,"line":1468},[252,125197,125198],{},"StartupWMClass=jetbrains-pycharm\n",[1270,125200,125201,125207,125213,125219],{},[210,125202,125203,125206],{},[22,125204,125205],{},"Exec"," → 点击图标时执行的命令",[210,125208,125209,125212],{},[22,125210,125211],{},"Icon"," → 显示在菜单和桌面上的图标",[210,125214,125215,125218],{},[22,125216,125217],{},"Terminal=false"," → 不打开终端",[210,125220,125221,125224],{},[22,125222,125223],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125226,125227,125228],"blockquote",{},[19,125229,125230,125231,125233,125234],{},"可以理解成 ",[22,125232,125101],{}," 文件是 Linux 的 ",[412,125235,125236],{},"快捷方式配置文件",[19,125238,125239],{},"4️⃣设置可执行权限",[244,125241,125243],{"className":120952,"code":125242,"language":120954,"meta":120955,"style":169},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[22,125244,125245],{"__ignoreMap":169},[252,125246,125247],{"class":254,"line":255},[252,125248,125242],{},[19,125250,125251],{},"5️⃣桌面图标启动的话如下：",[244,125253,125255],{"className":120952,"code":125254,"language":120954,"meta":120955,"style":169},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[22,125256,125257,125262],{"__ignoreMap":169},[252,125258,125259],{"class":254,"line":255},[252,125260,125261],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[252,125263,125264],{"class":254,"line":170},[252,125265,125266],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[207,125268,125269],{"start":1318},[210,125270,125271],{},"下载Appimage文件实现软件的安装",[19,125273,125274],{},"1️⃣先下载appimage",[19,125276,125277],{},[501,125278,125279],{"href":125279,"rel":125280},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24004],[19,125282,125283],{},[1601,125284],{"alt":169,"src":125285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125287,125288],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125290,125291],{},[1601,125292],{"alt":169,"src":125293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125295,125296],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125298,125299],{},[1601,125300],{"alt":169,"src":125301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125303,125304],{},[1601,125305],{"alt":169,"src":125306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125308,125309,125310,125313],{},"3️⃣给他们放在",[22,125311,125312],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125315,125316],{},"4️⃣给软件执行权限",[244,125318,125320],{"className":120952,"code":125319,"language":120954,"meta":120955,"style":169},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[22,125321,125322,125327],{"__ignoreMap":169},[252,125323,125324],{"class":254,"line":255},[252,125325,125326],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[252,125328,125329],{"class":254,"line":170},[252,125330,125331],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125333,125334],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[244,125336,125338],{"className":117432,"code":125337,"language":117434,"meta":169,"style":169},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[22,125339,125340,125347,125354,125360],{"__ignoreMap":169},[252,125341,125342,125344],{"class":254,"line":255},[252,125343,101413],{"class":311},[252,125345,125346],{"class":367}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[252,125348,125349,125351],{"class":254,"line":170},[252,125350,101420],{"class":2102},[252,125352,125353],{"class":367}," .\u002Fqqmusic.desktop\n",[252,125355,125356,125358],{"class":254,"line":1318},[252,125357,124402],{"class":2102},[252,125359,125353],{"class":367},[252,125361,125362,125364,125366,125368],{"class":254,"line":1333},[252,125363,24716],{"class":2102},[252,125365,24719],{"class":367},[252,125367,123269],{"class":367},[252,125369,125353],{"class":367},[19,125371,125372,125374],{},[22,125373,101420],{},"：一个 Linux 命令，主要功能是：",[1270,125376,125377,125380],{},[210,125378,125379],{},"如果文件不存在，就创建一个新的空文件",[210,125381,125382],{},"如果文件已存在，就更新该文件的最后修改时间",[244,125384,125386],{"className":120952,"code":125385,"language":120954,"meta":120955,"style":169},"[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",[22,125387,125388,125392,125397,125402,125407,125411,125416],{"__ignoreMap":169},[252,125389,125390],{"class":254,"line":255},[252,125391,125153],{},[252,125393,125394],{"class":254,"line":170},[252,125395,125396],{},"Name=QQ音乐\n",[252,125398,125399],{"class":254,"line":1318},[252,125400,125401],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[252,125403,125404],{"class":254,"line":1333},[252,125405,125406],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[252,125408,125409],{"class":254,"line":1339},[252,125410,125163],{},[252,125412,125413],{"class":254,"line":1353},[252,125414,125415],{},"Categories=Audio;Music;Player;\n",[252,125417,125418],{"class":254,"line":1359},[252,125419,125420],{},"Comment=QQ Music Client for Linux\n",[19,125422,125423],{},"将文件复制进去",[19,125425,125426],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125428,125429],{},[1601,125430],{"alt":169,"src":125431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125433,125434],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125436,125437],{},[1601,125438],{"alt":169,"src":125439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125441,125442,125443,125446,125447,125450],{},"如果你用的不是KDE，那么也可以直接修改",[22,125444,125445],{},"qqmuic.desktop","：在exec的末尾加上",[22,125448,125449],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[244,125452,125454],{"className":120952,"code":125453,"language":120954,"meta":120955,"style":169},"[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",[22,125455,125456,125460,125464,125469,125473,125477,125481],{"__ignoreMap":169},[252,125457,125458],{"class":254,"line":255},[252,125459,125153],{},[252,125461,125462],{"class":254,"line":170},[252,125463,125396],{},[252,125465,125466],{"class":254,"line":1318},[252,125467,125468],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[252,125470,125471],{"class":254,"line":1333},[252,125472,125406],{},[252,125474,125475],{"class":254,"line":1339},[252,125476,125163],{},[252,125478,125479],{"class":254,"line":1353},[252,125480,125415],{},[252,125482,125483],{"class":254,"line":1359},[252,125484,125420],{},[19,125486,125487],{},[1601,125488],{"alt":169,"src":125489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125491,125492],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[244,125494,125496],{"className":120952,"code":125495,"language":120954,"meta":120955,"style":169},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[22,125497,125498],{"__ignoreMap":169},[252,125499,125500],{"class":254,"line":255},[252,125501,125495],{},[207,125503,125504],{"start":1333},[210,125505,125506],{},"去Flathub上安装软件",[19,125508,125509],{},[501,125510,125511],{"href":125511,"rel":125512},"https:\u002F\u002Fflathub.org\u002F",[24004],[19,125514,125515],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125517,125518],{},[1601,125519],{"alt":169,"src":125520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[244,125522,125524],{"className":120952,"code":125523,"language":120954,"meta":120955,"style":169},"flatpak install flathub com.obsproject.Studio\n",[22,125525,125526],{"__ignoreMap":169},[252,125527,125528],{"class":254,"line":255},[252,125529,125523],{},[19,125531,125532],{},[1601,125533],{"alt":169,"src":125534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125536,125537],{},"2️⃣运行软件",[19,125539,125540],{},"a.官方方式：",[19,125542,125543],{},[1601,125544],{"alt":169,"src":125545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[244,125547,125548],{"className":120952,"code":125523,"language":120954,"meta":120955,"style":169},[22,125549,125550],{"__ignoreMap":169},[252,125551,125552],{"class":254,"line":255},[252,125553,125523],{},[19,125555,125556],{},"b.当普通软件运行：",[19,125558,125559],{},[1601,125560],{"alt":169,"src":125561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125563,125564],{},[1601,125565],{"alt":169,"src":125566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5266,125568,125569],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":169,"searchDepth":170,"depth":170,"links":125571},[125572,125573,125578,125579,125585,125586],{"id":122305,"depth":170,"text":122306},{"id":122647,"depth":170,"text":122648,"children":125574},[125575,125576,125577],{"id":122651,"depth":1318,"text":122652},{"id":122718,"depth":1318,"text":122719},{"id":122979,"depth":1318,"text":122980},{"id":123132,"depth":170,"text":123133},{"id":123370,"depth":170,"text":123371,"children":125580},[125581,125582,125583,125584],{"id":123422,"depth":1318,"text":123423},{"id":123707,"depth":1318,"text":123708},{"id":123978,"depth":1318,"text":123979},{"id":124237,"depth":1318,"text":124238},{"id":124296,"depth":170,"text":124297},{"id":124597,"depth":170,"text":124598,"children":125587},[125588,125589,125590,125591,125592,125593,125594,125595],{"id":124601,"depth":1318,"text":124602},{"id":124613,"depth":1318,"text":124614},{"id":124825,"depth":1318,"text":124826},{"id":124849,"depth":1318,"text":124850},{"id":124915,"depth":1318,"text":124916},{"id":125009,"depth":1318,"text":125010},{"id":125016,"depth":1318,"text":125017},{"id":125040,"depth":1318,"text":125041},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122297,"description":178},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125602,"title":125603,"body":125604,"description":178,"extension":179,"meta":125608,"navigation":181,"path":125609,"seo":125610,"stem":125611,"__hash__":125612},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125605,"toc":125606},[],{"title":169,"searchDepth":170,"depth":170,"links":125607},[],{"category":30403},"\u002Fwiki\u002F2025-01-27-linux",{"title":125603,"description":178},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125614,"title":125615,"body":125616,"description":125620,"extension":179,"meta":126011,"navigation":181,"path":126012,"seo":126013,"stem":126014,"__hash__":126015},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125617,"toc":126009},[125618,125621,125625,125642,125645,125698,125702,125704,125744,125753,125757,125760,126001,126006],[19,125619,125620],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125622,125624],{"id":125623},"_1ubuntu环境配置","1.Ubuntu环境配置",[207,125626,125627,125630,125633,125636,125639],{},[210,125628,125629],{},"ubuntu环境换源",[210,125631,125632],{},"安装cuda",[210,125634,125635],{},"安装miniconda",[210,125637,125638],{},"安装pytorch",[210,125640,125641],{},"安装genesis",[19,125643,125644],{},"参考链接：",[244,125646,125648],{"className":23961,"code":125647,"language":23963,"meta":169,"style":169},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[22,125649,125650],{"__ignoreMap":169},[252,125651,125652,125655,125658,125661,125663,125666,125669,125671,125674,125677,125679,125682,125685,125687,125690,125693,125695],{"class":254,"line":255},[252,125653,125654],{"class":2102},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[252,125656,125657],{"class":367},"=blogdetail",[252,125659,125660],{"class":262},"&sharetype",[252,125662,308],{"class":258},[252,125664,125665],{"class":367},"blogdetail",[252,125667,125668],{"class":262},"&sharerId",[252,125670,308],{"class":258},[252,125672,125673],{"class":367},"144728092",[252,125675,125676],{"class":262},"&sharerefer",[252,125678,308],{"class":258},[252,125680,125681],{"class":367},"PC",[252,125683,125684],{"class":262},"&sharesource",[252,125686,308],{"class":258},[252,125688,125689],{"class":367},"qq_69379513",[252,125691,125692],{"class":262},"&sharefrom",[252,125694,308],{"class":258},[252,125696,125697],{"class":367},"from_link\n",[10,125699,125701],{"id":125700},"_2genesis-报错issue","2.Genesis 报错issue",[19,125703,125644],{},[244,125705,125706],{"className":23961,"code":125647,"language":23963,"meta":169,"style":169},[22,125707,125708],{"__ignoreMap":169},[252,125709,125710,125712,125714,125716,125718,125720,125722,125724,125726,125728,125730,125732,125734,125736,125738,125740,125742],{"class":254,"line":255},[252,125711,125654],{"class":2102},[252,125713,125657],{"class":367},[252,125715,125660],{"class":262},[252,125717,308],{"class":258},[252,125719,125665],{"class":367},[252,125721,125668],{"class":262},[252,125723,308],{"class":258},[252,125725,125673],{"class":367},[252,125727,125676],{"class":262},[252,125729,308],{"class":258},[252,125731,125681],{"class":367},[252,125733,125684],{"class":262},[252,125735,308],{"class":258},[252,125737,125689],{"class":367},[252,125739,125692],{"class":262},[252,125741,308],{"class":258},[252,125743,125697],{"class":367},[244,125745,125747],{"className":23961,"code":125746,"language":23963,"meta":169,"style":169},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[22,125748,125749],{"__ignoreMap":169},[252,125750,125751],{"class":254,"line":255},[252,125752,125746],{"class":2102},[10,125754,125756],{"id":125755},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,125758,125759],{},"hello_robot.py",[244,125761,125763],{"className":30518,"code":125762,"language":30520,"meta":169,"style":169},"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",[22,125764,125765,125771,125786,125790,125802,125814,125818,125831,125835,125854,125864,125874,125888,125892,125896,125901,125905,125915,125922,125936,125943,125953,125958,125962,125980,125985,125989,125996],{"__ignoreMap":169},[252,125766,125767,125769],{"class":254,"line":255},[252,125768,30532],{"class":258},[252,125770,45445],{"class":262},[252,125772,125773,125776,125779,125781,125783],{"class":254,"line":170},[252,125774,125775],{"class":262},"os.environ[",[252,125777,125778],{"class":367},"'PYOPENGL_PLATFORM'",[252,125780,4582],{"class":262},[252,125782,308],{"class":258},[252,125784,125785],{"class":367}," 'glx'\n",[252,125787,125788],{"class":254,"line":1318},[252,125789,2539],{"emptyLinePlaceholder":181},[252,125791,125792,125794,125797,125799],{"class":254,"line":1333},[252,125793,30532],{"class":258},[252,125795,125796],{"class":262}," genesis ",[252,125798,31523],{"class":258},[252,125800,125801],{"class":262}," gs\n",[252,125803,125804,125806,125809,125811],{"class":254,"line":1339},[252,125805,30877],{"class":258},[252,125807,125808],{"class":262}," pynput ",[252,125810,30532],{"class":258},[252,125812,125813],{"class":262}," keyboard\n",[252,125815,125816],{"class":254,"line":1353},[252,125817,2539],{"emptyLinePlaceholder":181},[252,125819,125820,125823,125826,125828],{"class":254,"line":1359},[252,125821,125822],{"class":262},"gs.init(",[252,125824,125825],{"class":5356},"backend",[252,125827,308],{"class":258},[252,125829,125830],{"class":262},"gs.gpu)\n",[252,125832,125833],{"class":254,"line":1450},[252,125834,2539],{"emptyLinePlaceholder":181},[252,125836,125837,125840,125842,125845,125848,125850,125852],{"class":254,"line":1456},[252,125838,125839],{"class":262},"scene ",[252,125841,308],{"class":258},[252,125843,125844],{"class":262}," gs.Scene(",[252,125846,125847],{"class":5356},"show_viewer",[252,125849,308],{"class":258},[252,125851,31616],{"class":311},[252,125853,269],{"class":262},[252,125855,125856,125859,125861],{"class":254,"line":1468},[252,125857,125858],{"class":262},"plane ",[252,125860,308],{"class":258},[252,125862,125863],{"class":262}," scene.add_entity(gs.morphs.Plane())\n",[252,125865,125866,125869,125871],{"class":254,"line":1751},[252,125867,125868],{"class":262},"franka ",[252,125870,308],{"class":258},[252,125872,125873],{"class":262}," scene.add_entity(\n",[252,125875,125876,125879,125881,125883,125886],{"class":254,"line":1756},[252,125877,125878],{"class":262},"    gs.morphs.MJCF(",[252,125880,45494],{"class":5356},[252,125882,308],{"class":258},[252,125884,125885],{"class":367},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[252,125887,38187],{"class":262},[252,125889,125890],{"class":254,"line":1762},[252,125891,269],{"class":262},[252,125893,125894],{"class":254,"line":1767},[252,125895,2539],{"emptyLinePlaceholder":181},[252,125897,125898],{"class":254,"line":1781},[252,125899,125900],{"class":262},"scene.build()\n",[252,125902,125903],{"class":254,"line":1786},[252,125904,2539],{"emptyLinePlaceholder":181},[252,125906,125907,125909,125912],{"class":254,"line":1792},[252,125908,32087],{"class":258},[252,125910,125911],{"class":2102}," on_press",[252,125913,125914],{"class":262},"(key):\n",[252,125916,125917,125920],{"class":254,"line":1813},[252,125918,125919],{"class":258},"    try",[252,125921,3878],{"class":262},[252,125923,125924,125926,125929,125931,125934],{"class":254,"line":1818},[252,125925,2636],{"class":258},[252,125927,125928],{"class":262}," key.char ",[252,125930,3088],{"class":258},[252,125932,125933],{"class":367}," 'q'",[252,125935,3878],{"class":262},[252,125937,125938,125940],{"class":254,"line":1832},[252,125939,15872],{"class":258},[252,125941,125942],{"class":311}," False\n",[252,125944,125945,125948,125951],{"class":254,"line":1837},[252,125946,125947],{"class":258},"    except",[252,125949,125950],{"class":311}," AttributeError",[252,125952,3878],{"class":262},[252,125954,125955],{"class":254,"line":1866},[252,125956,125957],{"class":258},"        pass\n",[252,125959,125960],{"class":254,"line":1871},[252,125961,2539],{"emptyLinePlaceholder":181},[252,125963,125964,125967,125969,125972,125975,125977],{"class":254,"line":1888},[252,125965,125966],{"class":262},"listener ",[252,125968,308],{"class":258},[252,125970,125971],{"class":262}," keyboard.Listener(",[252,125973,125974],{"class":5356},"on_press",[252,125976,308],{"class":258},[252,125978,125979],{"class":262},"on_press)\n",[252,125981,125982],{"class":254,"line":1893},[252,125983,125984],{"class":262},"listener.start()\n",[252,125986,125987],{"class":254,"line":1898},[252,125988,2539],{"emptyLinePlaceholder":181},[252,125990,125991,125993],{"class":254,"line":1903},[252,125992,108799],{"class":258},[252,125994,125995],{"class":262}," listener.running:\n",[252,125997,125998],{"class":254,"line":1917},[252,125999,126000],{"class":262},"    scene.step()\n",[19,126002,126003],{},[1601,126004],{"alt":169,"src":126005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5266,126007,126008],{},"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":169,"searchDepth":170,"depth":170,"links":126010},[],{"category":23517},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125615,"description":125620},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126017,"title":126018,"body":126019,"description":178,"extension":179,"meta":126034,"navigation":181,"path":126035,"seo":126036,"stem":126037,"__hash__":126038},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126020,"toc":126031},[126021,126024,126028],[10,126022,126018],{"id":126023},"_1-基础知识",[14,126025,126027],{"id":126026},"_11-js的组成","1.1 js的组成",[19,126029,126030],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":169,"searchDepth":170,"depth":170,"links":126032},[126033],{"id":126026,"depth":170,"text":126027},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126018,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126040,"title":126041,"body":126042,"description":178,"extension":179,"meta":126181,"navigation":181,"path":126182,"seo":126183,"stem":126184,"__hash__":126185},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126043,"toc":126169},[126044,126047,126051,126054,126058,126068,126072,126075,126078,126081,126085,126092,126098,126102,126108,126119,126123,126126,126130,126133,126137,126140,126144,126147,126151,126154,126157,126160,126163,126166],[10,126045,126041],{"id":126046},"_2-vscode必备内容",[14,126048,126050],{"id":126049},"_21-标签分类","2.1 标签分类",[19,126052,126053],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126055,126057],{"id":126056},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126059,126060,126061,126063,126064,126067],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[22,126062,489],{}," 然后按 ",[22,126065,126066],{},"Tab","，快速自动生成基本结构。",[14,126069,126071],{"id":126070},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126073,126074],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126076,126077],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126079,126080],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126082,126084],{"id":126083},"_24-视图缩放","2.4 视图缩放",[19,126086,126087,126088,126091],{},"缩放视图 ",[22,126089,126090],{},"ctrl+"," 可实现代码增大。",[19,126093,126094,126097],{},[22,126095,126096],{},"ctrl-"," 可实现代码减小。",[14,126099,126101],{"id":126100},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126103,126104,126105,28525],{},"VSCode 新建文件快捷键为 ",[22,126106,126107],{},"ctrl+N",[19,126109,126110,126111,126114,126115,126118],{},"保存快捷键为 ",[22,126112,126113],{},"ctrl+S","，将文本保存为 ",[22,126116,126117],{},".html"," 文件。",[14,126120,126122],{"id":126121},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126124,126125],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126127,126129],{"id":126128},"_27-vscode-icons","2.7 vscode-icons",[19,126131,126132],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126134,126136],{"id":126135},"_28-easy-less","2.8 Easy LESS",[19,126138,126139],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126141,126143],{"id":126142},"_29-会了吧插件","2.9 会了吧插件",[19,126145,126146],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126148,126150],{"id":126149},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126152,126153],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126155,126156],{},"②选定多个相同的单词:ctrl+D",[19,126158,126159],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126161,126162],{},"④全局替换某些单词:ctrl+h",[19,126164,126165],{},"⑤快速定位到某一行:ctrl+g",[19,126167,126168],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":169,"searchDepth":170,"depth":170,"links":126170},[126171,126172,126173,126174,126175,126176,126177,126178,126179,126180],{"id":126049,"depth":170,"text":126050},{"id":126056,"depth":170,"text":126057},{"id":126070,"depth":170,"text":126071},{"id":126083,"depth":170,"text":126084},{"id":126100,"depth":170,"text":126101},{"id":126121,"depth":170,"text":126122},{"id":126128,"depth":170,"text":126129},{"id":126135,"depth":170,"text":126136},{"id":126142,"depth":170,"text":126143},{"id":126149,"depth":170,"text":126150},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126041,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":4,"title":5,"body":126187,"description":178,"extension":179,"meta":126296,"navigation":181,"path":182,"seo":126297,"stem":184,"__hash__":185},{"type":7,"value":126188,"toc":126289},[126189,126191,126193,126199,126205,126209,126211,126217,126219,126223,126225,126227,126229,126231,126237,126243,126249,126255,126261,126267,126271,126275,126283],[10,126190,5],{"id":12},[14,126192,17],{"id":16},[19,126194,126195,25,126197,29],{},[22,126196,24],{},[22,126198,28],{},[19,126200,126201,25,126203],{},[22,126202,24],{},[22,126204,28],{},[19,126206,38,126207,42],{},[22,126208,41],{},[14,126210,46],{"id":45},[19,126212,126213,52,126215],{},[22,126214,51],{},[22,126216,55],{},[14,126218,59],{"id":58},[19,126220,126221],{},[22,126222,64],{},[19,126224,67],{},[19,126226,70],{},[14,126228,74],{"id":73},[19,126230,77],{},[19,126232,80,126233,84,126235,88],{},[22,126234,83],{},[22,126236,87],{},[19,126238,91,126239,84,126241,88],{},[22,126240,94],{},[22,126242,97],{},[19,126244,100,126245,84,126247,88],{},[22,126246,103],{},[22,126248,106],{},[19,126250,109,126251,84,126253,88],{},[22,126252,112],{},[22,126254,115],{},[14,126256,119,126257,123,126259,127],{"id":118},[22,126258,122],{},[22,126260,126],{},[19,126262,126263,132,126265,135],{},[22,126264,122],{},[22,126266,126],{},[19,126268,126269],{},[22,126270,140],{},[19,126272,126273],{},[22,126274,145],{},[19,126276,148,126277,151,126279,154,126281,158],{},[22,126278,122],{},[22,126280,122],{},[22,126282,157],{},[19,126284,161,126285,164,126287,167],{},[22,126286,126],{},[22,126288,126],{},{"title":169,"searchDepth":170,"depth":170,"links":126290},[126291,126292,126293,126294,126295],{"id":16,"depth":170,"text":17},{"id":45,"depth":170,"text":46},{"id":58,"depth":170,"text":59},{"id":73,"depth":170,"text":74},{"id":118,"depth":170,"text":177},{},{"title":5,"description":178},{"id":126299,"title":126300,"body":126301,"description":178,"extension":179,"meta":126498,"navigation":181,"path":126499,"seo":126500,"stem":126501,"__hash__":126502},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126302,"toc":126490},[126303,126306,126310,126313,126319,126326,126332,126338,126341,126344,126347,126350,126353,126356,126359,126363,126366,126369,126372,126378,126384,126390,126397,126401,126407,126413,126416,126419,126425,126431,126437,126440,126443,126447,126450,126460,126466,126470,126479,126483,126486],[10,126304,126300],{"id":126305},"_4-html图像与链接",[14,126307,126309],{"id":126308},"_41-图像标签","4.1 图像标签",[19,126311,126312],{},"（1）标签",[19,126314,126315,126318],{},[22,126316,126317],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126320,126321,126322,126325],{},"src是",[22,126323,126324],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126327,126328,126329],{},"alt:文本，替换文本。图像不能显示的文字 ",[22,126330,126331],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126333,126334,126335],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[22,126336,126337],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126339,126340],{},"width:像素，设置图像的宽度",[19,126342,126343],{},"height:像素，设置图像的高度",[19,126345,126346],{},"border：像素，设置图像的边框粗细",[19,126348,126349],{},"（2）图像标签属性的注意点：",[19,126351,126352],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126354,126355],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126357,126358],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126360,126362],{"id":126361},"_42-路径注意要点","4.2 路径注意要点：",[19,126364,126365],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126367,126368],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126370,126371],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126373,126374,126375],{},"①同一级路径：图像文件位于HTML文件同一级，如",[22,126376,126377],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126379,126380,126381],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[22,126382,126383],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126385,126386,126387],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[22,126388,126389],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126391,126392,126393,514],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[501,126394,126395],{"href":126395,"rel":126396},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24004],[14,126398,126400],{"id":126399},"_43-超链接标签","4.3 超链接标签",[19,126402,126403,126406],{},[22,126404,126405],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126408,126409,126410],{},"①语法格式：",[22,126411,126412],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126414,126415],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126417,126418],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126420,126421,126422],{},"③链接分类：外部链接：",[22,126423,126424],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126426,126427,126428],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[22,126429,126430],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126432,126433,126434],{},"空链接：如果当时没有确定链接目标时，",[22,126435,126436],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126438,126439],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126441,126442],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126444,126446],{"id":126445},"_44-锚点链接","4.4 锚点链接",[19,126448,126449],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126451,126452,126453,126456,126457],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[22,126454,126455],{},"\u003Ca href=\"#two\">","第二级",[22,126458,126459],{},"\u003C\u002Fa>",[19,126461,126462,126463],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[22,126464,126465],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126467,126469],{"id":126468},"_45-注释标签","4.5 注释标签",[19,126471,126472,126475,126476],{},[22,126473,126474],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[22,126477,126478],{},"ctrl+\u002F",[14,126480,126482],{"id":126481},"_46-特殊字符","4.6 特殊字符",[19,126484,126485],{},"可以实现添加多个空格",[1601,126487],{"style":126488,"src":126489},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":169,"searchDepth":170,"depth":170,"links":126491},[126492,126493,126494,126495,126496,126497],{"id":126308,"depth":170,"text":126309},{"id":126361,"depth":170,"text":126362},{"id":126399,"depth":170,"text":126400},{"id":126445,"depth":170,"text":126446},{"id":126468,"depth":170,"text":126469},{"id":126481,"depth":170,"text":126482},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126300,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126504,"title":126505,"body":126506,"description":178,"extension":179,"meta":126799,"navigation":181,"path":126800,"seo":126801,"stem":126802,"__hash__":126803},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126507,"toc":126790},[126508,126511,126515,126518,126521,126524,126527,126530,126533,126536,126539,126542,126562,126568,126572,126575,126578,126581,126584,126587,126590,126594,126597,126600,126603,126606,126619,126624,126627,126630,126645,126648,126651,126654,126657,126660,126664,126667,126674,126677,126680,126683,126686,126689,126695,126698,126701,126707,126710,126713,126716,126722,126725,126728,126742,126749,126752,126755,126762,126771,126774,126777,126780,126784,126787],[10,126509,126505],{"id":126510},"_5-html表格列表与表单",[14,126512,126514],{"id":126513},"_51-表格标签","5.1 表格标签",[19,126516,126517],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126519,126520],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126522,126523],{},"②表格基本语法：",[1601,126525],{"style":126488,"src":126526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126528,126529],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1601,126531],{"style":126488,"src":126532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126534,126535],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1601,126537],{"style":126488,"src":126538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126540,126541],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126543,126544,126547,126548,126550,126551,126554,126555,126557,126558,126561],{},[22,126545,126546],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[22,126549,126546],{},"内部必须拥有",[22,126552,126553],{},"\u003Ctr>","标签，一般位于第一行，",[22,126556,126546],{},"比",[22,126559,126560],{},"\u003Cth>","范围广",[19,126563,126564,126567],{},[22,126565,126566],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126569,126571],{"id":126570},"_52-合并单元格","5.2 合并单元格",[19,126573,126574],{},"（1）合并单元格方式：",[19,126576,126577],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126579,126580],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126582,126583],{},"（2）目标单元格：",[19,126585,126586],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126588,126589],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126591,126593],{"id":126592},"_53-列表标签","5.3 列表标签",[19,126595,126596],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126598,126599],{},"①无序列表：",[1601,126601],{"style":126488,"src":126602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126604,126605],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126607,126608,126611,126612,126615,126616,126618],{},[22,126609,126610],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[22,126613,126614],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[22,126617,126610],{},"中输入其他标签或文字是不对的",[19,126620,126621,126623],{},[22,126622,126614],{},"之间相当于一个容器，可以容纳所有元素",[19,126625,126626],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126628,126629],{},"在css中去除前边的小圆点采用如下代码:",[244,126631,126635],{"className":126632,"code":126633,"language":126634,"meta":169,"style":169},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[22,126636,126637],{"__ignoreMap":169},[252,126638,126639,126642],{"class":254,"line":255},[252,126640,126641],{"class":51440},"list-style",[252,126643,126644],{"class":262},": none;\n",[19,126646,126647],{},"②有序列表：",[1601,126649],{"style":126488,"src":126650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126652,126653],{},"③自定义列表：",[1601,126655],{"style":126488,"src":126656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1601,126658],{"style":126488,"src":126659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126661,126663],{"id":126662},"_54-表单标签","5.4 表单标签",[19,126665,126666],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126668,126669,126670,126673],{},"（1）表单域：包含单元素的区域，",[22,126671,126672],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1601,126675],{"style":126488,"src":126676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126678,126679],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,126681,126682],{},"表单元素提交必须有name属性",[19,126684,126685],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,126687,126688],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,126690,77366,126691,126694],{},[22,126692,126693],{},"\u003Cinput>","输入表单元素",[1601,126696],{"style":126488,"src":126697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1601,126699],{"style":126488,"src":126700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,126702,126703,126704],{},"单选按钮：",[22,126705,126706],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1601,126708],{"style":126488,"src":126709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,126711,126712],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1601,126714],{"style":126488,"src":126715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,126717,126718,126721],{},[412,126719,126720],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,126723,126724],{},"②select下拉表单元素：可以节约页面控件",[1601,126726],{"style":126488,"src":126727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,126729,126730,13935,126732,126735,126736,126738,126739,126741],{},[412,126731,292],{},[22,126733,126734],{},"\u003Cselect>","中至少包含一对",[22,126737,102850],{},"；在",[22,126740,102850],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,126743,126744,126745,126748],{},"③",[22,126746,126747],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1601,126750],{"style":126488,"src":126751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,126753,126754],{},"3行20列",[14,126756,126758,126759,127],{"id":126757},"_55-lable标签","5.5 ",[22,126760,126761],{},"\u003Clable>",[19,126763,126764,126765,126767,126768,126770],{},"它不是表单标签，但常常与表单标签搭配使用，",[22,126766,126761],{},"标签用于绑定一个表单标签，当点击",[22,126769,126761],{},"标签内的文本",[19,126772,126773],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1601,126775],{"style":126488,"src":126776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1601,126778],{"style":126488,"src":126779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126781,126783],{"id":126782},"_56-实例","5.6 实例",[1601,126785],{"style":126488,"src":126786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5266,126788,126789],{},"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":169,"searchDepth":170,"depth":170,"links":126791},[126792,126793,126794,126795,126796,126798],{"id":126513,"depth":170,"text":126514},{"id":126570,"depth":170,"text":126571},{"id":126592,"depth":170,"text":126593},{"id":126662,"depth":170,"text":126663},{"id":126757,"depth":170,"text":126797},"5.5 \u003Clable>标签",{"id":126782,"depth":170,"text":126783},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126505,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126805,"title":126806,"body":126807,"description":178,"extension":179,"meta":127356,"navigation":181,"path":127357,"seo":127358,"stem":127359,"__hash__":127360},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126808,"toc":127331},[126809,126812,126816,126819,126822,126826,126829,126832,126835,126838,126841,126844,126847,126851,126854,126858,126861,126864,126867,126871,126874,126877,126880,126886,126889,126892,126895,126898,126901,126904,126907,126940,126944,126947,126950,126953,126957,126960,126963,126966,126969,126972,126976,126979,126982,126985,126989,126992,126996,126999,127003,127006,127011,127015,127018,127022,127025,127028,127031,127034,127061,127064,127068,127071,127074,127079,127082,127085,127089,127092,127097,127100,127103,127106,127110,127113,127116,127119,127123,127126,127129,127132,127136,127140,127143,127183,127186,127190,127197,127200,127204,127207,127253,127257,127260,127263,127266,127294,127298,127301,127328],[10,126810,126806],{"id":126811},"_6-css语法与文本样式",[14,126813,126815],{"id":126814},"_61-css语法规范","6.1 css语法规范",[19,126817,126818],{},"由两部分组成，选择器及一条或多条声明",[1601,126820],{"style":126488,"src":126821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,126823,126824],{},[412,126825,292],{},[19,126827,126828],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,126830,126831],{},"②属性与属性值以“键值对”的形式出现",[19,126833,126834],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,126836,126837],{},"④属性和属性值之间用英文“;”分开",[1601,126839],{"style":126488,"src":126840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1601,126842],{"style":126488,"src":126843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1601,126845],{"style":126488,"src":126846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126848,126850],{"id":126849},"_62-css选择器","6.2 css选择器",[19,126852,126853],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[224,126855,126857],{"id":126856},"_621-标签选择器","6.2.1 标签选择器",[19,126859,126860],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,126862,126863],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1601,126865],{"style":126488,"src":126866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[224,126868,126870],{"id":126869},"_622-类选择器","6.2.2 类选择器",[19,126872,126873],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,126875,126876],{},"②样例",[1601,126878],{"style":126488,"src":126879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,126881,126882,126883,126885],{},"③ ",[412,126884,126720],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,126887,126888],{},"可以理解为给这个标签起了个名字，来表示；",[19,126890,126891],{},"长名称或词组可以使用横线来为选择器命名；",[19,126893,126894],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,126896,126897],{},"命名要有意义；",[1601,126899],{"style":126488,"src":126900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,126902,126903],{},"类选择器也可以指定特殊的元素p.center{}",[19,126905,126906],{},"p.center和.center都对",[244,126908,126910],{"className":126632,"code":126909,"language":126634,"meta":169,"style":169},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[22,126911,126912,126917,126926,126936],{"__ignoreMap":169},[252,126913,126914],{"class":254,"line":255},[252,126915,126916],{"class":321},"\u002F* 类选择器指定特殊元素 *\u002F\n",[252,126918,126919,126921,126924],{"class":254,"line":170},[252,126920,19],{"class":51440},[252,126922,126923],{"class":2102},".center",[252,126925,15712],{"class":262},[252,126927,126928,126930,126932,126934],{"class":254,"line":1318},[252,126929,70666],{"class":311},[252,126931,51577],{"class":262},[252,126933,51732],{"class":311},[252,126935,1429],{"class":262},[252,126937,126938],{"class":254,"line":1333},[252,126939,1704],{"class":262},[224,126941,126943],{"id":126942},"_623-多类名使用","6.2.3 多类名使用",[19,126945,126946],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1601,126948],{"style":126488,"src":126949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,126951,126952],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[224,126954,126956],{"id":126955},"_624-id选择器","6.2.4 id选择器",[19,126958,126959],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,126961,126962],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1601,126964],{"style":126488,"src":126965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,126967,126968],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,126970,126971],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[224,126973,126975],{"id":126974},"_625-通配符选择器","6.2.5 通配符选择器",[19,126977,126978],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,126980,126981],{},"* {",[19,126983,126984],{},"color=\"red\"}",[224,126986,126988],{"id":126987},"_626-总结","6.2.6 总结",[1601,126990],{"style":126488,"src":126991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,126993,126995],{"id":126994},"_63-css字体属性","6.3 css字体属性",[19,126997,126998],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[224,127000,127002],{"id":127001},"_631-字体系列","6.3.1 字体系列",[19,127004,127005],{},"font-family: '宋体';",[19,127007,127008,127010],{},[412,127009,292],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[224,127012,127014],{"id":127013},"_632-字体大小","6.3.2 字体大小",[19,127016,127017],{},"font-size: 20px",[19,127019,127020,26613],{},[412,127021,126720],{},[19,127023,127024],{},"①px（像素）大小是网页的最常用单位",[19,127026,127027],{},"②谷歌浏览器默认为16px",[19,127029,127030],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127032,127033],{},"④可以给body指定整个页面的大小：会自动引用",[244,127035,127037],{"className":126632,"code":127036,"language":126634,"meta":169,"style":169},"body {\n  font-size: 16px;\n}\n",[22,127038,127039,127045,127057],{"__ignoreMap":169},[252,127040,127041,127043],{"class":254,"line":255},[252,127042,51940],{"class":51440},[252,127044,15712],{"class":262},[252,127046,127047,127049,127051,127053,127055],{"class":254,"line":170},[252,127048,70766],{"class":311},[252,127050,51577],{"class":262},[252,127052,864],{"class":311},[252,127054,51632],{"class":258},[252,127056,1429],{"class":262},[252,127058,127059],{"class":254,"line":1318},[252,127060,1704],{"class":262},[19,127062,127063],{},"⑤标题标签比较特殊，需要单独指定大小",[224,127065,127067],{"id":127066},"_633-字体粗细","6.3.3 字体粗细",[19,127069,127070],{},"font-weight: bold;",[19,127072,127073],{},"font-weight: 100；",[19,127075,127076,127078],{},[412,127077,292],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127080,127081],{},"font-weight= 400;",[19,127083,127084],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[224,127086,127088],{"id":127087},"_634-文字样式","6.3.4 文字样式",[19,127090,127091],{},"font-style: normal；",[19,127093,127094,26613],{},[412,127095,127096],{},"属性值",[19,127098,127099],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127101,127102],{},"②italic：浏览器会显示斜体的字体样式",[1601,127104],{"style":126488,"src":127105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[224,127107,127109],{"id":127108},"_635-字体符合属性","6.3.5 字体符合属性",[1601,127111],{"style":126488,"src":127112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1601,127114],{"style":126488,"src":127115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127117,127118],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127120,127121,26613],{},[412,127122,126720],{},[19,127124,127125],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127127,127128],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127130,127131],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127133,127135],{"id":127134},"_64-css-test文本属性","6.4 css test文本属性",[224,127137,127139],{"id":127138},"_641-文本颜色","6.4.1 文本颜色",[19,127141,127142],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[244,127144,127146],{"className":126632,"code":127145,"language":126634,"meta":169,"style":169},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[22,127147,127148,127153,127159,127169,127174,127179],{"__ignoreMap":169},[252,127149,127150],{"class":254,"line":255},[252,127151,127152],{"class":321},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[252,127154,127155,127157],{"class":254,"line":170},[252,127156,19],{"class":51440},[252,127158,15712],{"class":262},[252,127160,127161,127163,127165,127167],{"class":254,"line":1318},[252,127162,71045],{"class":311},[252,127164,51577],{"class":262},[252,127166,57561],{"class":311},[252,127168,1429],{"class":262},[252,127170,127171],{"class":254,"line":1333},[252,127172,127173],{"class":321},"  \u002F* color: #ff0000; *\u002F\n",[252,127175,127176],{"class":254,"line":1339},[252,127177,127178],{"class":321},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[252,127180,127181],{"class":254,"line":1353},[252,127182,1704],{"class":262},[1601,127184],{"style":126488,"src":127185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[224,127187,127189],{"id":127188},"_642-对齐文本","6.4.2 对齐文本",[19,127191,127192,127193,127196],{},"text-align属于用于设置元素内文本内容的 ",[412,127194,127195],{},"水平对齐"," 方式",[19,127198,127199],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[224,127201,127203],{"id":127202},"_643-装饰文本","6.4.3 装饰文本",[19,127205,127206],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[244,127208,127210],{"className":126632,"code":127209,"language":126634,"meta":169,"style":169},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[22,127211,127212,127218,127228,127232,127238,127249],{"__ignoreMap":169},[252,127213,127214,127216],{"class":254,"line":255},[252,127215,501],{"class":51440},[252,127217,15712],{"class":262},[252,127219,127220,127222,127224,127226],{"class":254,"line":170},[252,127221,70642],{"class":311},[252,127223,51577],{"class":262},[252,127225,54877],{"class":311},[252,127227,1429],{"class":262},[252,127229,127230],{"class":254,"line":1318},[252,127231,1704],{"class":262},[252,127233,127234,127236],{"class":254,"line":1333},[252,127235,19],{"class":51440},[252,127237,15712],{"class":262},[252,127239,127240,127242,127244,127247],{"class":254,"line":1339},[252,127241,70642],{"class":311},[252,127243,51577],{"class":262},[252,127245,127246],{"class":311},"underline",[252,127248,1429],{"class":262},[252,127250,127251],{"class":254,"line":1353},[252,127252,1704],{"class":262},[224,127254,127256],{"id":127255},"_644-文本缩进","6.4.4 文本缩进",[19,127258,127259],{},"实现文本的第一行首行缩进自己指定的距离",[19,127261,127262],{},"20px往右边走；-20px往左边走",[19,127264,127265],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[244,127267,127269],{"className":126632,"code":127268,"language":126634,"meta":169,"style":169},"p {\n  text-indent: 2em;\n}\n",[22,127270,127271,127277,127290],{"__ignoreMap":169},[252,127272,127273,127275],{"class":254,"line":255},[252,127274,19],{"class":51440},[252,127276,15712],{"class":262},[252,127278,127279,127282,127284,127286,127288],{"class":254,"line":170},[252,127280,127281],{"class":311},"  text-indent",[252,127283,51577],{"class":262},[252,127285,340],{"class":311},[252,127287,23692],{"class":258},[252,127289,1429],{"class":262},[252,127291,127292],{"class":254,"line":1318},[252,127293,1704],{"class":262},[224,127295,127297],{"id":127296},"_645-行间距","6.4.5 行间距",[19,127299,127300],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[244,127302,127304],{"className":126632,"code":127303,"language":126634,"meta":169,"style":169},"p {\n  line-height: 1.6;\n}\n",[22,127305,127306,127312,127324],{"__ignoreMap":169},[252,127307,127308,127310],{"class":254,"line":255},[252,127309,19],{"class":51440},[252,127311,15712],{"class":262},[252,127313,127314,127317,127319,127322],{"class":254,"line":170},[252,127315,127316],{"class":311},"  line-height",[252,127318,51577],{"class":262},[252,127320,127321],{"class":311},"1.6",[252,127323,1429],{"class":262},[252,127325,127326],{"class":254,"line":1318},[252,127327,1704],{"class":262},[5266,127329,127330],{},"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":169,"searchDepth":170,"depth":170,"links":127332},[127333,127334,127342,127349],{"id":126814,"depth":170,"text":126815},{"id":126849,"depth":170,"text":126850,"children":127335},[127336,127337,127338,127339,127340,127341],{"id":126856,"depth":1318,"text":126857},{"id":126869,"depth":1318,"text":126870},{"id":126942,"depth":1318,"text":126943},{"id":126955,"depth":1318,"text":126956},{"id":126974,"depth":1318,"text":126975},{"id":126987,"depth":1318,"text":126988},{"id":126994,"depth":170,"text":126995,"children":127343},[127344,127345,127346,127347,127348],{"id":127001,"depth":1318,"text":127002},{"id":127013,"depth":1318,"text":127014},{"id":127066,"depth":1318,"text":127067},{"id":127087,"depth":1318,"text":127088},{"id":127108,"depth":1318,"text":127109},{"id":127134,"depth":170,"text":127135,"children":127350},[127351,127352,127353,127354,127355],{"id":127138,"depth":1318,"text":127139},{"id":127188,"depth":1318,"text":127189},{"id":127202,"depth":1318,"text":127203},{"id":127255,"depth":1318,"text":127256},{"id":127296,"depth":1318,"text":127297},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126806,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127362,"title":127363,"body":127364,"description":178,"extension":179,"meta":128013,"navigation":181,"path":128014,"seo":128015,"stem":128016,"__hash__":128017},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127365,"toc":127994},[127366,127369,127373,127377,127437,127441,127451,127454,127457,127461,127486,127490,127493,127496,127499,127502,127505,127509,127512,127515,127557,127560,127586,127592,127595,127599,127603,127609,127612,127615,127618,127621,127624,127627,127672,127676,127679,127682,127686,127690,127719,127722,127727,127730,127733,127736,127739,127743,127747,127750,127752,127755,127759,127762,127766,127769,127772,127775,127779,127783,127789,127799,127802,127805,127808,127811,127814,127937,127945,127953,127991],[10,127367,127363],{"id":127368},"_7-css引入方式与选择器进阶",[14,127370,127372],{"id":127371},"_71-css引入方式","7.1 css引入方式",[224,127374,127376],{"id":127375},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[244,127378,127382],{"className":127379,"code":127380,"language":127381,"meta":169,"style":169},"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",[22,127383,127384,127392,127399,127411,127424,127429],{"__ignoreMap":169},[252,127385,127386,127388,127390],{"class":254,"line":255},[252,127387,1173],{"class":262},[252,127389,5266],{"class":51440},[252,127391,51447],{"class":262},[252,127393,127394,127397],{"class":254,"line":170},[252,127395,127396],{"class":51440},"  h1",[252,127398,15712],{"class":262},[252,127400,127401,127404,127406,127409],{"class":254,"line":1318},[252,127402,127403],{"class":311},"    color",[252,127405,51577],{"class":262},[252,127407,127408],{"class":311},"blue",[252,127410,1429],{"class":262},[252,127412,127413,127416,127418,127420,127422],{"class":254,"line":1333},[252,127414,127415],{"class":311},"    font-size",[252,127417,51577],{"class":262},[252,127419,1063],{"class":311},[252,127421,51632],{"class":258},[252,127423,1429],{"class":262},[252,127425,127426],{"class":254,"line":1339},[252,127427,127428],{"class":262},"  }\n",[252,127430,127431,127433,127435],{"class":254,"line":1353},[252,127432,51925],{"class":262},[252,127434,5266],{"class":51440},[252,127436,51447],{"class":262},[19,127438,127439,26613],{},[412,127440,126720],{},[19,127442,77366,127443,127446,127447,127450],{},[22,127444,127445],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[22,127448,127449],{},"\u003Chead>","标签中",[19,127452,127453],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127455,127456],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[224,127458,127460],{"id":127459},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[244,127462,127464],{"className":127379,"code":127463,"language":127381,"meta":169,"style":169},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[22,127465,127466],{"__ignoreMap":169},[252,127467,127468,127470,127472,127474,127476,127479,127482,127484],{"class":254,"line":255},[252,127469,1173],{"class":262},[252,127471,19],{"class":51440},[252,127473,62766],{"class":2102},[252,127475,308],{"class":262},[252,127477,127478],{"class":367},"\"color: red; font-size: 16px;\"",[252,127480,127481],{"class":262},">这是一个段落\u003C\u002F",[252,127483,19],{"class":51440},[252,127485,51447],{"class":262},[19,127487,127488,26613],{},[412,127489,126720],{},[19,127491,127492],{},"①style其实就是标签的属性",[19,127494,127495],{},"②在双引号中间，写法要符合css规范",[19,127497,127498],{},"③可以控制当前的标签设置样式",[19,127500,127501],{},"④书写繁琐，简单时才用",[19,127503,127504],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[224,127506,127508],{"id":127507},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127510,127511],{},"使用最多，单独建一个css文件，然后html引用",[19,127513,127514],{},"①css文件部分： style.css",[244,127516,127518],{"className":126632,"code":127517,"language":126634,"meta":169,"style":169},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[22,127519,127520,127525,127531,127541,127553],{"__ignoreMap":169},[252,127521,127522],{"class":254,"line":255},[252,127523,127524],{"class":321},"\u002F* style.css *\u002F\n",[252,127526,127527,127529],{"class":254,"line":170},[252,127528,10],{"class":51440},[252,127530,15712],{"class":262},[252,127532,127533,127535,127537,127539],{"class":254,"line":1318},[252,127534,71045],{"class":311},[252,127536,51577],{"class":262},[252,127538,127408],{"class":311},[252,127540,1429],{"class":262},[252,127542,127543,127545,127547,127549,127551],{"class":254,"line":1333},[252,127544,70766],{"class":311},[252,127546,51577],{"class":262},[252,127548,1063],{"class":311},[252,127550,51632],{"class":258},[252,127552,1429],{"class":262},[252,127554,127555],{"class":254,"line":1339},[252,127556,1704],{"class":262},[19,127558,127559],{},"②html部分",[244,127561,127563],{"className":127379,"code":127562,"language":127381,"meta":169,"style":169},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[22,127564,127565],{"__ignoreMap":169},[252,127566,127567,127569,127571,127573,127575,127577,127579,127581,127584],{"class":254,"line":255},[252,127568,1173],{"class":262},[252,127570,69145],{"class":51440},[252,127572,69148],{"class":2102},[252,127574,308],{"class":262},[252,127576,69153],{"class":367},[252,127578,61197],{"class":2102},[252,127580,308],{"class":262},[252,127582,127583],{"class":367},"\"style.css\"",[252,127585,51447],{"class":262},[19,127587,127588,127591],{},[22,127589,127590],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127593,127594],{},"ctrl+0回到页面原来大小",[14,127596,127598],{"id":127597},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[224,127600,127602],{"id":127601},"_721-快速生成html","7.2.1 快速生成html",[19,127604,127605,127606],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[22,127607,127608],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127610,127611],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127613,127614],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127616,127617],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127619,127620],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127622,127623],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127625,127626],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[244,127628,127630],{"className":127379,"code":127629,"language":127381,"meta":169,"style":169},"\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",[22,127631,127632,127637,127642,127647,127652,127657,127662,127667],{"__ignoreMap":169},[252,127633,127634],{"class":254,"line":255},[252,127635,127636],{"class":321},"\u003C!-- Emmet 语法示例 -->\n",[252,127638,127639],{"class":254,"line":170},[252,127640,127641],{"class":321},"\u003C!-- div*3        → 生成3个div -->\n",[252,127643,127644],{"class":254,"line":1318},[252,127645,127646],{"class":321},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[252,127648,127649],{"class":254,"line":1333},[252,127650,127651],{"class":321},"\u003C!-- div+p        → 兄弟div和p -->\n",[252,127653,127654],{"class":254,"line":1339},[252,127655,127656],{"class":321},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[252,127658,127659],{"class":254,"line":1353},[252,127660,127661],{"class":321},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[252,127663,127664],{"class":254,"line":1359},[252,127665,127666],{"class":321},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[252,127668,127669],{"class":254,"line":1450},[252,127670,127671],{"class":321},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[224,127673,127675],{"id":127674},"_722-快速生成css","7.2.2 快速生成css",[19,127677,127678],{},"简写开头",[19,127680,127681],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127683,127685],{"id":127684},"_73-css复合选择器","7.3 css复合选择器",[224,127687,127689],{"id":127688},"_731-后代选择器","7.3.1 后代选择器",[244,127691,127693],{"className":126632,"code":127692,"language":126634,"meta":169,"style":169},".parent .child {\n  color: blue;\n}\n",[22,127694,127695,127705,127715],{"__ignoreMap":169},[252,127696,127697,127700,127703],{"class":254,"line":255},[252,127698,127699],{"class":2102},".parent",[252,127701,127702],{"class":2102}," .child",[252,127704,15712],{"class":262},[252,127706,127707,127709,127711,127713],{"class":254,"line":170},[252,127708,71045],{"class":311},[252,127710,51577],{"class":262},[252,127712,127408],{"class":311},[252,127714,1429],{"class":262},[252,127716,127717],{"class":254,"line":1318},[252,127718,1704],{"class":262},[19,127720,127721],{},"元素1 元素2 {样式声明}",[19,127723,127724],{},[412,127725,127726],{},"注意点:",[19,127728,127729],{},"①元素1和元素2中间用空格隔开",[19,127731,127732],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,127734,127735],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,127737,127738],{},"④元素1和元素2可以是任意基础选择器",[224,127740,127742],{"id":127741},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,127744,127745],{},[412,127746,127726],{},[19,127748,127749],{},"①元素1和元素2中间用大于号隔开",[19,127751,127732],{},[19,127753,127754],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[224,127756,127758],{"id":127757},"_733-并集选择器","7.3.3 并集选择器",[19,127760,127761],{},"元素1，元素2 {样式声明}",[19,127763,127764],{},[412,127765,127726],{},[19,127767,127768],{},"①元素1和元素2中间用逗号隔开",[19,127770,127771],{},"②逗号可以理解为和的意思",[19,127773,127774],{},"③并集选择器通常用于集体声明",[224,127776,127778],{"id":127777},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,127780,127781],{},[412,127782,127726],{},[19,127784,127785,127786,127788],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69145,127787],{},"－:visited－:hover－:active。",[19,127790,127791,127792,127795,127796,25880],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127793,127794],"hover",{}," 、 ",[127797,127798],"first-child",{},[19,127800,127801],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,127803,127804],{},"link对没访问的进行设置",[19,127806,127807],{},"vistied对已访问的进行改变",[19,127809,127810],{},"hover鼠标经过就会变",[19,127812,127813],{},"active常按(点)就会变",[244,127815,127817],{"className":126632,"code":127816,"language":126634,"meta":169,"style":169},"\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",[22,127818,127819,127824,127833,127843,127853,127857,127866,127877,127881,127889,127899,127909,127913,127922,127933],{"__ignoreMap":169},[252,127820,127821],{"class":254,"line":255},[252,127822,127823],{"class":321},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[252,127825,127826,127828,127831],{"class":254,"line":170},[252,127827,501],{"class":51440},[252,127829,127830],{"class":2102},":link",[252,127832,15712],{"class":262},[252,127834,127835,127837,127839,127841],{"class":254,"line":1318},[252,127836,71045],{"class":311},[252,127838,51577],{"class":262},[252,127840,62509],{"class":311},[252,127842,1429],{"class":262},[252,127844,127845,127847,127849,127851],{"class":254,"line":1333},[252,127846,70642],{"class":311},[252,127848,51577],{"class":262},[252,127850,54877],{"class":311},[252,127852,1429],{"class":262},[252,127854,127855],{"class":254,"line":1339},[252,127856,1704],{"class":262},[252,127858,127859,127861,127864],{"class":254,"line":1353},[252,127860,501],{"class":51440},[252,127862,127863],{"class":2102},":visited",[252,127865,15712],{"class":262},[252,127867,127868,127870,127872,127875],{"class":254,"line":1359},[252,127869,71045],{"class":311},[252,127871,51577],{"class":262},[252,127873,127874],{"class":311},"purple",[252,127876,1429],{"class":262},[252,127878,127879],{"class":254,"line":1450},[252,127880,1704],{"class":262},[252,127882,127883,127885,127887],{"class":254,"line":1456},[252,127884,501],{"class":51440},[252,127886,61080],{"class":2102},[252,127888,15712],{"class":262},[252,127890,127891,127893,127895,127897],{"class":254,"line":1468},[252,127892,71045],{"class":311},[252,127894,51577],{"class":262},[252,127896,55029],{"class":311},[252,127898,1429],{"class":262},[252,127900,127901,127903,127905,127907],{"class":254,"line":1751},[252,127902,70642],{"class":311},[252,127904,51577],{"class":262},[252,127906,127246],{"class":311},[252,127908,1429],{"class":262},[252,127910,127911],{"class":254,"line":1756},[252,127912,1704],{"class":262},[252,127914,127915,127917,127920],{"class":254,"line":1762},[252,127916,501],{"class":51440},[252,127918,127919],{"class":2102},":active",[252,127921,15712],{"class":262},[252,127923,127924,127926,127928,127931],{"class":254,"line":1767},[252,127925,71045],{"class":311},[252,127927,51577],{"class":262},[252,127929,127930],{"class":311},"green",[252,127932,1429],{"class":262},[252,127934,127935],{"class":254,"line":1781},[252,127936,1704],{"class":262},[224,127938,127940,127941,127944],{"id":127939},"_735-伪类选择器","7.3.5 ",[127942,127943],"focus",{},"伪类选择器",[19,127946,127947,127949,127950,127952],{},[127942,127948],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[22,127951,126693],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[244,127954,127956],{"className":126632,"code":127955,"language":126634,"meta":169,"style":169},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[22,127957,127958,127966,127977,127987],{"__ignoreMap":169},[252,127959,127960,127962,127964],{"class":254,"line":255},[252,127961,53961],{"class":51440},[252,127963,62040],{"class":2102},[252,127965,15712],{"class":262},[252,127967,127968,127971,127973,127975],{"class":254,"line":170},[252,127969,127970],{"class":311},"  border-color",[252,127972,51577],{"class":262},[252,127974,55029],{"class":311},[252,127976,1429],{"class":262},[252,127978,127979,127981,127983,127985],{"class":254,"line":1318},[252,127980,70938],{"class":311},[252,127982,51577],{"class":262},[252,127984,54877],{"class":311},[252,127986,1429],{"class":262},[252,127988,127989],{"class":254,"line":1333},[252,127990,1704],{"class":262},[5266,127992,127993],{},"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":169,"searchDepth":170,"depth":170,"links":127995},[127996,128001,128005],{"id":127371,"depth":170,"text":127372,"children":127997},[127998,127999,128000],{"id":127375,"depth":1318,"text":127376},{"id":127459,"depth":1318,"text":127460},{"id":127507,"depth":1318,"text":127508},{"id":127597,"depth":170,"text":127598,"children":128002},[128003,128004],{"id":127601,"depth":1318,"text":127602},{"id":127674,"depth":1318,"text":127675},{"id":127684,"depth":170,"text":127685,"children":128006},[128007,128008,128009,128010,128011],{"id":127688,"depth":1318,"text":127689},{"id":127741,"depth":1318,"text":127742},{"id":127757,"depth":1318,"text":127758},{"id":127777,"depth":1318,"text":127778},{"id":127939,"depth":1318,"text":128012},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127363,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128019,"title":128020,"body":128021,"description":178,"extension":179,"meta":129944,"navigation":181,"path":129945,"seo":129946,"stem":129947,"__hash__":129948},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128022,"toc":129918},[128023,128026,128030,128039,128043,128069,128074,128077,128080,128083,128086,128090,128093,128103,128111,128115,128150,128155,128158,128161,128164,128167,128171,128174,128183,128187,128200,128205,128208,128211,128214,128218,128221,128225,128228,128283,128286,128317,128320,128374,128378,128381,128547,128670,128673,128676,128679,128682,128686,128689,128693,128696,128699,128703,128706,128737,128764,128792,128795,128799,128825,128868,128872,128966,128969,128996,128999,129002,129005,129008,129011,129014,129017,129020,129023,129027,129084,129111,129115,129163,129167,129208,129210,129213,129216,129219,129222,129226,129318,129321,129324,129327,129331,129454,129655,129659,129663,129666,129669,129672,129676,129679,129682,129707,129710,129713,129716,129719,129722,129726,129734,129796,129799,129857,129860,129863,129866,129869,129872,129875,129878,129915],[10,128024,128020],{"id":128025},"_8-css显示模式与背景特性",[14,128027,128029],{"id":128028},"_81-css元素显示模式","8.1 css元素显示模式",[19,128031,128032,128033,128035,128036,128038],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[22,128034,122],{},"自己占一行，比如一行可以放多个",[22,128037,126],{},"，HTML 元素一般分为块元素和行内元素两种类型",[224,128040,128042],{"id":128041},"_811-块元素","8.1.1 块元素",[19,128044,128045,128046,128048,128049,475,128052,475,128054,475,128056,475,128059,475,128062,128065,128066,128068],{},"常见的块元素有",[22,128047,24],{},"~",[22,128050,128051],{},"\u003Ch6>",[22,128053,51],{},[22,128055,122],{},[22,128057,128058],{},"\u003Cul>",[22,128060,128061],{},"\u003Col>",[22,128063,128064],{},"\u003Cli>","等，其中 ",[22,128067,122],{}," 标签是最典型的块元素",[19,128070,128071],{},[412,128072,128073],{},"块级元素的特点：",[19,128075,128076],{},"① 比较霸道，自己独占一行。",[19,128078,128079],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128081,128082],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128084,128085],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128087,128088],{},[412,128089,292],{},[19,128091,128092],{},"①文字类的元素内不能使用块级元素",[19,128094,161,128095,128097,128098,128100,128101],{},[22,128096,51],{}," 标签主要用于存放文字，因此 ",[22,128099,51],{}," 里面不能放块级元素，特别是不能放",[22,128102,122],{},[19,128104,128105,128106,128048,128108,128110],{},"⑥同理， ",[22,128107,24],{},[22,128109,128051],{},"等都是文字类块级标签，里面也不能放其他块级元素",[224,128112,128114],{"id":128113},"_812-行内元素","8.1.2 行内元素",[19,128116,128117,128118,475,128120,475,128123,475,128126,475,128129,475,128132,475,128135,475,128138,475,128141,475,128144,128146,128147,128149],{},"常见的行内元素有 ",[22,128119,126405],{},[22,128121,128122],{},"\u003Cstrong>",[22,128124,128125],{},"\u003Cb>",[22,128127,128128],{},"\u003Cem>",[22,128130,128131],{},"\u003Ci>",[22,128133,128134],{},"\u003Cdel>",[22,128136,128137],{},"\u003Cs>",[22,128139,128140],{},"\u003Cins>",[22,128142,128143],{},"\u003Cu>",[22,128145,126],{}," 等，其中 ",[22,128148,126],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128151,128152],{},[412,128153,128154],{},"特点：",[19,128156,128157],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128159,128160],{},"② 高、宽直接设置是无效的。",[19,128162,128163],{},"③ 默认宽度就是它本身内容的宽度。",[19,128165,128166],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128168,128169],{},[412,128170,292],{},[19,128172,128173],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128175,128176,128177,128179,128180,128182],{},"②特殊情况链接 ",[22,128178,126405],{}," 里面可以放块级元素，但是给 ",[22,128181,126405],{}," 转换一下块级模式最安全",[224,128184,128186],{"id":128185},"_813-行内块元素","8.1.3 行内块元素",[19,128188,128189,128190,475,128193,475,128196,128199],{},"在行内元素中有几个特殊的标签 —— ",[22,128191,128192],{},"\u003Cimg \u002F>",[22,128194,128195],{},"\u003Cinput \u002F>",[22,128197,128198],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128201,128202],{},[412,128203,128204],{},"行内块元素的特点：",[19,128206,128207],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128209,128210],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128212,128213],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[224,128215,128217],{"id":128216},"_814-总结","8.1.4 总结",[1601,128219],{"style":126488,"src":128220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[224,128222,128224],{"id":128223},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128226,128227],{},"①转换为块元素：display:block;",[244,128229,128231],{"className":126632,"code":128230,"language":126634,"meta":169,"style":169},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[22,128232,128233,128238,128244,128255,128267,128279],{"__ignoreMap":169},[252,128234,128235],{"class":254,"line":255},[252,128236,128237],{"class":321},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[252,128239,128240,128242],{"class":254,"line":170},[252,128241,501],{"class":51440},[252,128243,15712],{"class":262},[252,128245,128246,128249,128251,128253],{"class":254,"line":1318},[252,128247,128248],{"class":311},"  display",[252,128250,51577],{"class":262},[252,128252,61009],{"class":311},[252,128254,1429],{"class":262},[252,128256,128257,128259,128261,128263,128265],{"class":254,"line":1333},[252,128258,70708],{"class":311},[252,128260,51577],{"class":262},[252,128262,574],{"class":311},[252,128264,51632],{"class":258},[252,128266,1429],{"class":262},[252,128268,128269,128271,128273,128275,128277],{"class":254,"line":1339},[252,128270,70928],{"class":311},[252,128272,51577],{"class":262},[252,128274,664],{"class":311},[252,128276,51632],{"class":258},[252,128278,1429],{"class":262},[252,128280,128281],{"class":254,"line":1353},[252,128282,1704],{"class":262},[19,128284,128285],{},"②转换为行内元素：display:inline;",[244,128287,128289],{"className":126632,"code":128288,"language":126634,"meta":169,"style":169},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[22,128290,128291,128296,128302,128313],{"__ignoreMap":169},[252,128292,128293],{"class":254,"line":255},[252,128294,128295],{"class":321},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[252,128297,128298,128300],{"class":254,"line":170},[252,128299,51751],{"class":51440},[252,128301,15712],{"class":262},[252,128303,128304,128306,128308,128311],{"class":254,"line":1318},[252,128305,128248],{"class":311},[252,128307,51577],{"class":262},[252,128309,128310],{"class":311},"inline",[252,128312,1429],{"class":262},[252,128314,128315],{"class":254,"line":1333},[252,128316,1704],{"class":262},[19,128318,128319],{},"③转换为行内块：display:inline-block;",[244,128321,128323],{"className":126632,"code":128322,"language":126634,"meta":169,"style":169},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[22,128324,128325,128330,128336,128346,128358,128370],{"__ignoreMap":169},[252,128326,128327],{"class":254,"line":255},[252,128328,128329],{"class":321},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[252,128331,128332,128334],{"class":254,"line":170},[252,128333,252],{"class":51440},[252,128335,15712],{"class":262},[252,128337,128338,128340,128342,128344],{"class":254,"line":1318},[252,128339,128248],{"class":311},[252,128341,51577],{"class":262},[252,128343,72523],{"class":311},[252,128345,1429],{"class":262},[252,128347,128348,128350,128352,128354,128356],{"class":254,"line":1333},[252,128349,70708],{"class":311},[252,128351,51577],{"class":262},[252,128353,875],{"class":311},[252,128355,51632],{"class":258},[252,128357,1429],{"class":262},[252,128359,128360,128362,128364,128366,128368],{"class":254,"line":1339},[252,128361,70928],{"class":311},[252,128363,51577],{"class":262},[252,128365,1214],{"class":311},[252,128367,51632],{"class":258},[252,128369,1429],{"class":262},[252,128371,128372],{"class":254,"line":1353},[252,128373,1704],{"class":262},[224,128375,128377],{"id":128376},"_816-小米侧边栏","8.1.6 小米侧边栏",[1601,128379],{"style":126488,"src":128380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[244,128382,128384],{"className":127379,"code":128383,"language":127381,"meta":169,"style":169},"\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",[22,128385,128386,128391,128406,128425,128444,128463,128482,128501,128520,128539],{"__ignoreMap":169},[252,128387,128388],{"class":254,"line":255},[252,128389,128390],{"class":321},"\u003C!-- 小米侧边栏案例 -->\n",[252,128392,128393,128395,128397,128399,128401,128404],{"class":254,"line":170},[252,128394,1173],{"class":262},[252,128396,51751],{"class":51440},[252,128398,53626],{"class":2102},[252,128400,308],{"class":262},[252,128402,128403],{"class":367},"\"sidebar\"",[252,128405,51447],{"class":262},[252,128407,128408,128410,128412,128414,128416,128418,128421,128423],{"class":254,"line":1318},[252,128409,52284],{"class":262},[252,128411,501],{"class":51440},[252,128413,61197],{"class":2102},[252,128415,308],{"class":262},[252,128417,61202],{"class":367},[252,128419,128420],{"class":262},">手机 电话卡\u003C\u002F",[252,128422,501],{"class":51440},[252,128424,51447],{"class":262},[252,128426,128427,128429,128431,128433,128435,128437,128440,128442],{"class":254,"line":1333},[252,128428,52284],{"class":262},[252,128430,501],{"class":51440},[252,128432,61197],{"class":2102},[252,128434,308],{"class":262},[252,128436,61202],{"class":367},[252,128438,128439],{"class":262},">电视 盒子\u003C\u002F",[252,128441,501],{"class":51440},[252,128443,51447],{"class":262},[252,128445,128446,128448,128450,128452,128454,128456,128459,128461],{"class":254,"line":1339},[252,128447,52284],{"class":262},[252,128449,501],{"class":51440},[252,128451,61197],{"class":2102},[252,128453,308],{"class":262},[252,128455,61202],{"class":367},[252,128457,128458],{"class":262},">笔记本 平板\u003C\u002F",[252,128460,501],{"class":51440},[252,128462,51447],{"class":262},[252,128464,128465,128467,128469,128471,128473,128475,128478,128480],{"class":254,"line":1353},[252,128466,52284],{"class":262},[252,128468,501],{"class":51440},[252,128470,61197],{"class":2102},[252,128472,308],{"class":262},[252,128474,61202],{"class":367},[252,128476,128477],{"class":262},">出行 穿戴\u003C\u002F",[252,128479,501],{"class":51440},[252,128481,51447],{"class":262},[252,128483,128484,128486,128488,128490,128492,128494,128497,128499],{"class":254,"line":1359},[252,128485,52284],{"class":262},[252,128487,501],{"class":51440},[252,128489,61197],{"class":2102},[252,128491,308],{"class":262},[252,128493,61202],{"class":367},[252,128495,128496],{"class":262},">智能 路由器\u003C\u002F",[252,128498,501],{"class":51440},[252,128500,51447],{"class":262},[252,128502,128503,128505,128507,128509,128511,128513,128516,128518],{"class":254,"line":1450},[252,128504,52284],{"class":262},[252,128506,501],{"class":51440},[252,128508,61197],{"class":2102},[252,128510,308],{"class":262},[252,128512,61202],{"class":367},[252,128514,128515],{"class":262},">健康 儿童\u003C\u002F",[252,128517,501],{"class":51440},[252,128519,51447],{"class":262},[252,128521,128522,128524,128526,128528,128530,128532,128535,128537],{"class":254,"line":1456},[252,128523,52284],{"class":262},[252,128525,501],{"class":51440},[252,128527,61197],{"class":2102},[252,128529,308],{"class":262},[252,128531,61202],{"class":367},[252,128533,128534],{"class":262},">耳机 音响\u003C\u002F",[252,128536,501],{"class":51440},[252,128538,51447],{"class":262},[252,128540,128541,128543,128545],{"class":254,"line":1468},[252,128542,51925],{"class":262},[252,128544,51751],{"class":51440},[252,128546,51447],{"class":262},[244,128548,128550],{"className":126632,"code":128549,"language":126634,"meta":169,"style":169},".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",[22,128551,128552,128561,128571,128584,128596,128608,128620,128630,128641,128645,128655,128666],{"__ignoreMap":169},[252,128553,128554,128557,128559],{"class":254,"line":255},[252,128555,128556],{"class":2102},".sidebar",[252,128558,1537],{"class":51440},[252,128560,15712],{"class":262},[252,128562,128563,128565,128567,128569],{"class":254,"line":170},[252,128564,128248],{"class":311},[252,128566,51577],{"class":262},[252,128568,61009],{"class":311},[252,128570,1429],{"class":262},[252,128572,128573,128575,128577,128580,128582],{"class":254,"line":1318},[252,128574,70708],{"class":311},[252,128576,51577],{"class":262},[252,128578,128579],{"class":311},"234",[252,128581,51632],{"class":258},[252,128583,1429],{"class":262},[252,128585,128586,128588,128590,128592,128594],{"class":254,"line":1333},[252,128587,70928],{"class":311},[252,128589,51577],{"class":262},[252,128591,715],{"class":311},[252,128593,51632],{"class":258},[252,128595,1429],{"class":262},[252,128597,128598,128600,128602,128604,128606],{"class":254,"line":1339},[252,128599,127316],{"class":311},[252,128601,51577],{"class":262},[252,128603,715],{"class":311},[252,128605,51632],{"class":258},[252,128607,1429],{"class":262},[252,128609,128610,128612,128614,128616,128618],{"class":254,"line":1353},[252,128611,70963],{"class":311},[252,128613,51577],{"class":262},[252,128615,1214],{"class":311},[252,128617,51632],{"class":258},[252,128619,1429],{"class":262},[252,128621,128622,128624,128626,128628],{"class":254,"line":1359},[252,128623,71045],{"class":311},[252,128625,51577],{"class":262},[252,128627,60982],{"class":311},[252,128629,1429],{"class":262},[252,128631,128632,128634,128636,128639],{"class":254,"line":1450},[252,128633,71018],{"class":311},[252,128635,51577],{"class":262},[252,128637,128638],{"class":311},"#55585a",[252,128640,1429],{"class":262},[252,128642,128643],{"class":254,"line":1456},[252,128644,1704],{"class":262},[252,128646,128647,128649,128651,128653],{"class":254,"line":1468},[252,128648,128556],{"class":2102},[252,128650,1537],{"class":51440},[252,128652,61080],{"class":2102},[252,128654,15712],{"class":262},[252,128656,128657,128659,128661,128664],{"class":254,"line":1751},[252,128658,71018],{"class":311},[252,128660,51577],{"class":262},[252,128662,128663],{"class":311},"#ff6700",[252,128665,1429],{"class":262},[252,128667,128668],{"class":254,"line":1756},[252,128669,1704],{"class":262},[1601,128671],{"style":126488,"src":128672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128674,128675],{},"行高=盒子高度：实现文字的垂直居中",[19,128677,128678],{},"原理讲解：",[1601,128680],{"style":126488,"src":128681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128683,128685],{"id":128684},"_82-css背景","8.2 css背景",[19,128687,128688],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[224,128690,128692],{"id":128691},"_821-背景颜色","8.2.1 背景颜色",[19,128694,128695],{},"background-color:颜色值;",[19,128697,128698],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[224,128700,128702],{"id":128701},"_822-背景图片","8.2.2 背景图片",[19,128704,128705],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[244,128707,128709],{"className":126632,"code":128708,"language":126634,"meta":169,"style":169},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[22,128710,128711,128717,128733],{"__ignoreMap":169},[252,128712,128713,128715],{"class":254,"line":255},[252,128714,51751],{"class":51440},[252,128716,15712],{"class":262},[252,128718,128719,128722,128724,128726,128728,128731],{"class":254,"line":170},[252,128720,128721],{"class":311},"  background-image",[252,128723,51577],{"class":262},[252,128725,61866],{"class":311},[252,128727,263],{"class":262},[252,128729,128730],{"class":5356},"images\u002Fbg.png",[252,128732,2858],{"class":262},[252,128734,128735],{"class":254,"line":1318},[252,128736,1704],{"class":262},[400,128738,128739,128748],{},[403,128740,128741],{},[406,128742,128743,128746],{},[409,128744,128745],{"align":23875},"参数值",[409,128747,102832],{"align":23875},[447,128749,128750,128757],{},[406,128751,128752,128754],{},[452,128753,54877],{"align":23875},[452,128755,128756],{"align":23875},"无背景图（默认的）",[406,128758,128759,128761],{},[452,128760,61866],{"align":23875},[452,128762,128763],{"align":23875},"使用绝对或相对地址指定背景图像",[244,128765,128766],{"className":126632,"code":128708,"language":126634,"meta":169,"style":169},[22,128767,128768,128774,128788],{"__ignoreMap":169},[252,128769,128770,128772],{"class":254,"line":255},[252,128771,51751],{"class":51440},[252,128773,15712],{"class":262},[252,128775,128776,128778,128780,128782,128784,128786],{"class":254,"line":170},[252,128777,128721],{"class":311},[252,128779,51577],{"class":262},[252,128781,61866],{"class":311},[252,128783,263],{"class":262},[252,128785,128730],{"class":5356},[252,128787,2858],{"class":262},[252,128789,128790],{"class":254,"line":1318},[252,128791,1704],{"class":262},[19,128793,128794],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[224,128796,128798],{"id":128797},"_823-背景平铺","8.2.3 背景平铺",[244,128800,128802],{"className":126632,"code":128801,"language":126634,"meta":169,"style":169},"div {\n  background-repeat: no-repeat;\n}\n",[22,128803,128804,128810,128821],{"__ignoreMap":169},[252,128805,128806,128808],{"class":254,"line":255},[252,128807,51751],{"class":51440},[252,128809,15712],{"class":262},[252,128811,128812,128815,128817,128819],{"class":254,"line":170},[252,128813,128814],{"class":311},"  background-repeat",[252,128816,51577],{"class":262},[252,128818,61876],{"class":311},[252,128820,1429],{"class":262},[252,128822,128823],{"class":254,"line":1318},[252,128824,1704],{"class":262},[400,128826,128827,128835],{},[403,128828,128829],{},[406,128830,128831,128833],{},[409,128832,128745],{"align":23875},[409,128834,102832],{"align":23875},[447,128836,128837,128845,128852,128860],{},[406,128838,128839,128842],{},[452,128840,128841],{"align":23875},"repeat",[452,128843,128844],{"align":23875},"背景图像在纵向和横向上平铺（默认的）",[406,128846,128847,128849],{},[452,128848,61876],{"align":23875},[452,128850,128851],{"align":23875},"背景图像不平铺",[406,128853,128854,128857],{},[452,128855,128856],{"align":23875},"repeat-x",[452,128858,128859],{"align":23875},"背景图像在横向上平铺",[406,128861,128862,128865],{},[452,128863,128864],{"align":23875},"repeat-y",[452,128866,128867],{"align":23875},"背景图像在纵向平铺",[224,128869,128871],{"id":128870},"_824-背景图片位置","8.2.4 背景图片位置",[244,128873,128875],{"className":126632,"code":128874,"language":126634,"meta":169,"style":169},"\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",[22,128876,128877,128882,128888,128902,128906,128911,128917,128933,128937,128942,128948,128962],{"__ignoreMap":169},[252,128878,128879],{"class":254,"line":255},[252,128880,128881],{"class":321},"\u002F* 方位名词 *\u002F\n",[252,128883,128884,128886],{"class":254,"line":170},[252,128885,51751],{"class":51440},[252,128887,15712],{"class":262},[252,128889,128890,128893,128895,128897,128900],{"class":254,"line":1318},[252,128891,128892],{"class":311},"  background-position",[252,128894,51577],{"class":262},[252,128896,51732],{"class":311},[252,128898,128899],{"class":311}," top",[252,128901,1429],{"class":262},[252,128903,128904],{"class":254,"line":1333},[252,128905,1704],{"class":262},[252,128907,128908],{"class":254,"line":1339},[252,128909,128910],{"class":321},"\u002F* 精确单位 *\u002F\n",[252,128912,128913,128915],{"class":254,"line":1353},[252,128914,51751],{"class":51440},[252,128916,15712],{"class":262},[252,128918,128919,128921,128923,128925,128927,128929,128931],{"class":254,"line":1359},[252,128920,128892],{"class":311},[252,128922,51577],{"class":262},[252,128924,963],{"class":311},[252,128926,51632],{"class":258},[252,128928,57644],{"class":311},[252,128930,51632],{"class":258},[252,128932,1429],{"class":262},[252,128934,128935],{"class":254,"line":1450},[252,128936,1704],{"class":262},[252,128938,128939],{"class":254,"line":1456},[252,128940,128941],{"class":321},"\u002F* 混合单位 *\u002F\n",[252,128943,128944,128946],{"class":254,"line":1468},[252,128945,51751],{"class":51440},[252,128947,15712],{"class":262},[252,128949,128950,128952,128954,128956,128958,128960],{"class":254,"line":1751},[252,128951,128892],{"class":311},[252,128953,51577],{"class":262},[252,128955,963],{"class":311},[252,128957,51632],{"class":258},[252,128959,17284],{"class":311},[252,128961,1429],{"class":262},[252,128963,128964],{"class":254,"line":1756},[252,128965,1704],{"class":262},[19,128967,128968],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[400,128970,128971,128979],{},[403,128972,128973],{},[406,128974,128975,128977],{},[409,128976,128745],{"align":23875},[409,128978,26009],{"align":23875},[447,128980,128981,128988],{},[406,128982,128983,128985],{},[452,128984,52108],{"align":23875},[452,128986,128987],{"align":23875},"百分数|由浮点数和单位标识符组成的长度值",[406,128989,128990,128993],{},[452,128991,128992],{"align":23875},"position",[452,128994,128995],{"align":23875},"top|center|bottom|left|center|right 方位名词",[19,128997,128998],{},"其他说明：",[19,129000,129001],{},"①参数是方位名词",[19,129003,129004],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129006,129007],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129009,129010],{},"②参数是精确单位",[19,129012,129013],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129015,129016],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129018,129019],{},"③参数是混合单位",[19,129021,129022],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[224,129024,129026],{"id":129025},"_825-背景图片固定","8.2.5 背景图片固定",[244,129028,129030],{"className":126632,"code":129029,"language":126634,"meta":169,"style":169},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[22,129031,129032,129037,129043,129055,129059,129064,129070,129080],{"__ignoreMap":169},[252,129033,129034],{"class":254,"line":255},[252,129035,129036],{"class":321},"\u002F* 背景滚动（默认） *\u002F\n",[252,129038,129039,129041],{"class":254,"line":170},[252,129040,51751],{"class":51440},[252,129042,15712],{"class":262},[252,129044,129045,129048,129050,129053],{"class":254,"line":1318},[252,129046,129047],{"class":311},"  background-attachment",[252,129049,51577],{"class":262},[252,129051,129052],{"class":311},"scroll",[252,129054,1429],{"class":262},[252,129056,129057],{"class":254,"line":1333},[252,129058,1704],{"class":262},[252,129060,129061],{"class":254,"line":1339},[252,129062,129063],{"class":321},"\u002F* 背景固定 *\u002F\n",[252,129065,129066,129068],{"class":254,"line":1353},[252,129067,51751],{"class":51440},[252,129069,15712],{"class":262},[252,129071,129072,129074,129076,129078],{"class":254,"line":1359},[252,129073,129047],{"class":311},[252,129075,51577],{"class":262},[252,129077,86371],{"class":311},[252,129079,1429],{"class":262},[252,129081,129082],{"class":254,"line":1450},[252,129083,1704],{"class":262},[400,129085,129086,129095],{},[403,129087,129088],{},[406,129089,129090,129093],{},[409,129091,129092],{"align":23875},"参数",[409,129094,102832],{"align":23875},[447,129096,129097,129104],{},[406,129098,129099,129101],{},[452,129100,129052],{"align":23875},[452,129102,129103],{"align":23875},"背景图像是随对象内容滚动",[406,129105,129106,129108],{},[452,129107,86371],{"align":23875},[452,129109,129110],{"align":23875},"背景图像固定",[224,129112,129114],{"id":129113},"_826-背景样式合写","8.2.6 背景样式合写",[244,129116,129118],{"className":126632,"code":129117,"language":126634,"meta":169,"style":169},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[22,129119,129120,129125,129131,129159],{"__ignoreMap":169},[252,129121,129122],{"class":254,"line":255},[252,129123,129124],{"class":321},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[252,129126,129127,129129],{"class":254,"line":170},[252,129128,51751],{"class":51440},[252,129130,15712],{"class":262},[252,129132,129133,129135,129137,129139,129142,129144,129146,129148,129150,129153,129155,129157],{"class":254,"line":1318},[252,129134,70751],{"class":311},[252,129136,51577],{"class":262},[252,129138,60982],{"class":311},[252,129140,129141],{"class":311}," url",[252,129143,263],{"class":262},[252,129145,128730],{"class":5356},[252,129147,13854],{"class":262},[252,129149,61876],{"class":311},[252,129151,129152],{"class":311}," fixed",[252,129154,17284],{"class":311},[252,129156,128899],{"class":311},[252,129158,1429],{"class":262},[252,129160,129161],{"class":254,"line":1333},[252,129162,1704],{"class":262},[224,129164,129166],{"id":129165},"_827-背景色半透明","8.2.7 背景色半透明",[244,129168,129170],{"className":126632,"code":129169,"language":126634,"meta":169,"style":169},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[22,129171,129172,129178,129204],{"__ignoreMap":169},[252,129173,129174,129176],{"class":254,"line":255},[252,129175,51751],{"class":51440},[252,129177,15712],{"class":262},[252,129179,129180,129182,129184,129186,129188,129190,129192,129194,129196,129198,129200,129202],{"class":254,"line":170},[252,129181,70751],{"class":311},[252,129183,51577],{"class":262},[252,129185,55250],{"class":311},[252,129187,263],{"class":262},[252,129189,454],{"class":311},[252,129191,12575],{"class":262},[252,129193,454],{"class":311},[252,129195,12575],{"class":262},[252,129197,454],{"class":311},[252,129199,12575],{"class":262},[252,129201,100659],{"class":311},[252,129203,2858],{"class":262},[252,129205,129206],{"class":254,"line":1318},[252,129207,1704],{"class":262},[19,129209,99534],{},[19,129211,129212],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129214,129215],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129217,129218],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129220,129221],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[224,129223,129225],{"id":129224},"_828-总结","8.2.8 总结",[400,129227,129228,129239],{},[403,129229,129230],{},[406,129231,129232,129235,129237],{},[409,129233,129234],{"align":23875},"属性",[409,129236,102832],{"align":23875},[409,129238,415],{"align":23875},[447,129240,129241,129252,129263,129274,129285,129296,129307],{},[406,129242,129243,129246,129249],{},[452,129244,129245],{"align":23875},"background-color",[452,129247,129248],{"align":23875},"背景颜色",[452,129250,129251],{"align":23875},"预定义的颜色值\u002F十六进制\u002FRGB代码",[406,129253,129254,129257,129260],{},[452,129255,129256],{"align":23875},"background-image",[452,129258,129259],{"align":23875},"背景图片",[452,129261,129262],{"align":23875},"url(图片路径)",[406,129264,129265,129268,129271],{},[452,129266,129267],{"align":23875},"background-repeat",[452,129269,129270],{"align":23875},"是否平铺",[452,129272,129273],{"align":23875},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[406,129275,129276,129279,129282],{},[452,129277,129278],{"align":23875},"background-position",[452,129280,129281],{"align":23875},"背景位置",[452,129283,129284],{"align":23875},"length\u002Fposition 分别是x和y坐标",[406,129286,129287,129290,129293],{},[452,129288,129289],{"align":23875},"background-attachment",[452,129291,129292],{"align":23875},"背景附着",[452,129294,129295],{"align":23875},"scroll(背景滚动) \u002Ffixed (背景固定)",[406,129297,129298,129301,129304],{},[452,129299,129300],{"align":23875},"背景简写",[452,129302,129303],{"align":23875},"书写更简单",[452,129305,129306],{"align":23875},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[406,129308,129309,129312,129315],{},[452,129310,129311],{"align":23875},"背景半透明",[452,129313,129314],{"align":23875},"背景颜色半透明",[452,129316,129317],{"align":23875},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129319,129320],{},"颜色渐变：",[1601,129322],{"style":126488,"src":129323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1601,129325],{"style":126488,"src":129326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[224,129328,129330],{"id":129329},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[244,129332,129334],{"className":127379,"code":129333,"language":127381,"meta":169,"style":169},"\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",[22,129335,129336,129351,129370,129389,129408,129427,129446],{"__ignoreMap":169},[252,129337,129338,129340,129342,129344,129346,129349],{"class":254,"line":255},[252,129339,1173],{"class":262},[252,129341,51751],{"class":51440},[252,129343,53626],{"class":2102},[252,129345,308],{"class":262},[252,129347,129348],{"class":367},"\"nav\"",[252,129350,51447],{"class":262},[252,129352,129353,129355,129357,129359,129361,129363,129366,129368],{"class":254,"line":170},[252,129354,52284],{"class":262},[252,129356,501],{"class":51440},[252,129358,61197],{"class":2102},[252,129360,308],{"class":262},[252,129362,61202],{"class":367},[252,129364,129365],{"class":262},">五彩导航1\u003C\u002F",[252,129367,501],{"class":51440},[252,129369,51447],{"class":262},[252,129371,129372,129374,129376,129378,129380,129382,129385,129387],{"class":254,"line":1318},[252,129373,52284],{"class":262},[252,129375,501],{"class":51440},[252,129377,61197],{"class":2102},[252,129379,308],{"class":262},[252,129381,61202],{"class":367},[252,129383,129384],{"class":262},">五彩导航2\u003C\u002F",[252,129386,501],{"class":51440},[252,129388,51447],{"class":262},[252,129390,129391,129393,129395,129397,129399,129401,129404,129406],{"class":254,"line":1333},[252,129392,52284],{"class":262},[252,129394,501],{"class":51440},[252,129396,61197],{"class":2102},[252,129398,308],{"class":262},[252,129400,61202],{"class":367},[252,129402,129403],{"class":262},">五彩导航3\u003C\u002F",[252,129405,501],{"class":51440},[252,129407,51447],{"class":262},[252,129409,129410,129412,129414,129416,129418,129420,129423,129425],{"class":254,"line":1339},[252,129411,52284],{"class":262},[252,129413,501],{"class":51440},[252,129415,61197],{"class":2102},[252,129417,308],{"class":262},[252,129419,61202],{"class":367},[252,129421,129422],{"class":262},">五彩导航4\u003C\u002F",[252,129424,501],{"class":51440},[252,129426,51447],{"class":262},[252,129428,129429,129431,129433,129435,129437,129439,129442,129444],{"class":254,"line":1353},[252,129430,52284],{"class":262},[252,129432,501],{"class":51440},[252,129434,61197],{"class":2102},[252,129436,308],{"class":262},[252,129438,61202],{"class":367},[252,129440,129441],{"class":262},">五彩导航5\u003C\u002F",[252,129443,501],{"class":51440},[252,129445,51447],{"class":262},[252,129447,129448,129450,129452],{"class":254,"line":1359},[252,129449,51925],{"class":262},[252,129451,51751],{"class":51440},[252,129453,51447],{"class":262},[244,129455,129457],{"className":126632,"code":129456,"language":126634,"meta":169,"style":169},".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",[22,129458,129459,129468,129478,129490,129502,129512,129524,129534,129538,129563,129586,129609,129632],{"__ignoreMap":169},[252,129460,129461,129464,129466],{"class":254,"line":255},[252,129462,129463],{"class":2102},".nav",[252,129465,1537],{"class":51440},[252,129467,15712],{"class":262},[252,129469,129470,129472,129474,129476],{"class":254,"line":170},[252,129471,128248],{"class":311},[252,129473,51577],{"class":262},[252,129475,72523],{"class":311},[252,129477,1429],{"class":262},[252,129479,129480,129482,129484,129486,129488],{"class":254,"line":1318},[252,129481,70708],{"class":311},[252,129483,51577],{"class":262},[252,129485,1080],{"class":311},[252,129487,51632],{"class":258},[252,129489,1429],{"class":262},[252,129491,129492,129494,129496,129498,129500],{"class":254,"line":1333},[252,129493,70928],{"class":311},[252,129495,51577],{"class":262},[252,129497,1119],{"class":311},[252,129499,51632],{"class":258},[252,129501,1429],{"class":262},[252,129503,129504,129506,129508,129510],{"class":254,"line":1339},[252,129505,70666],{"class":311},[252,129507,51577],{"class":262},[252,129509,51732],{"class":311},[252,129511,1429],{"class":262},[252,129513,129514,129516,129518,129520,129522],{"class":254,"line":1353},[252,129515,127316],{"class":311},[252,129517,51577],{"class":262},[252,129519,1119],{"class":311},[252,129521,51632],{"class":258},[252,129523,1429],{"class":262},[252,129525,129526,129528,129530,129532],{"class":254,"line":1359},[252,129527,71045],{"class":311},[252,129529,51577],{"class":262},[252,129531,60982],{"class":311},[252,129533,1429],{"class":262},[252,129535,129536],{"class":254,"line":1450},[252,129537,1704],{"class":262},[252,129539,129540,129542,129544,129547,129549,129551,129554,129556,129558,129560],{"class":254,"line":1456},[252,129541,129463],{"class":2102},[252,129543,1537],{"class":51440},[252,129545,129546],{"class":2102},":nth-child",[252,129548,263],{"class":262},[252,129550,480],{"class":311},[252,129552,129553],{"class":262},") { ",[252,129555,129245],{"class":311},[252,129557,51577],{"class":262},[252,129559,128663],{"class":311},[252,129561,129562],{"class":262},"; }\n",[252,129564,129565,129567,129569,129571,129573,129575,129577,129579,129581,129584],{"class":254,"line":1468},[252,129566,129463],{"class":2102},[252,129568,1537],{"class":51440},[252,129570,129546],{"class":2102},[252,129572,263],{"class":262},[252,129574,340],{"class":311},[252,129576,129553],{"class":262},[252,129578,129245],{"class":311},[252,129580,51577],{"class":262},[252,129582,129583],{"class":311},"#ff0000",[252,129585,129562],{"class":262},[252,129587,129588,129590,129592,129594,129596,129598,129600,129602,129604,129607],{"class":254,"line":1751},[252,129589,129463],{"class":2102},[252,129591,1537],{"class":51440},[252,129593,129546],{"class":2102},[252,129595,263],{"class":262},[252,129597,334],{"class":311},[252,129599,129553],{"class":262},[252,129601,129245],{"class":311},[252,129603,51577],{"class":262},[252,129605,129606],{"class":311},"#00a4ff",[252,129608,129562],{"class":262},[252,129610,129611,129613,129615,129617,129619,129621,129623,129625,129627,129630],{"class":254,"line":1756},[252,129612,129463],{"class":2102},[252,129614,1537],{"class":51440},[252,129616,129546],{"class":2102},[252,129618,263],{"class":262},[252,129620,556],{"class":311},[252,129622,129553],{"class":262},[252,129624,129245],{"class":311},[252,129626,51577],{"class":262},[252,129628,129629],{"class":311},"#ff00ff",[252,129631,129562],{"class":262},[252,129633,129634,129636,129638,129640,129642,129644,129646,129648,129650,129653],{"class":254,"line":1762},[252,129635,129463],{"class":2102},[252,129637,1537],{"class":51440},[252,129639,129546],{"class":2102},[252,129641,263],{"class":262},[252,129643,582],{"class":311},[252,129645,129553],{"class":262},[252,129647,129245],{"class":311},[252,129649,51577],{"class":262},[252,129651,129652],{"class":311},"#00ff00",[252,129654,129562],{"class":262},[14,129656,129658],{"id":129657},"_83-css三大特性","8.3 css三大特性",[224,129660,129662],{"id":129661},"_831-层叠性","8.3.1 层叠性",[19,129664,129665],{},"为了解决样式冲突问题",[19,129667,129668],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129670,129671],{},"   ②样式不冲突，不会层叠",[224,129673,129675],{"id":129674},"_832-继承性","8.3.2 继承性",[19,129677,129678],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129680,129681],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[244,129683,129685],{"className":126632,"code":129684,"language":126634,"meta":169,"style":169},"p {\n  color: #333;\n}\n",[22,129686,129687,129693,129703],{"__ignoreMap":169},[252,129688,129689,129691],{"class":254,"line":255},[252,129690,19],{"class":51440},[252,129692,15712],{"class":262},[252,129694,129695,129697,129699,129701],{"class":254,"line":170},[252,129696,71045],{"class":311},[252,129698,51577],{"class":262},[252,129700,62509],{"class":311},[252,129702,1429],{"class":262},[252,129704,129705],{"class":254,"line":1318},[252,129706,1704],{"class":262},[1601,129708],{"style":126488,"src":129709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,129711,129712],{},"解释：①行高可以跟单位也可以不跟单位",[19,129714,129715],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,129717,129718],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,129720,129721],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[224,129723,129725],{"id":129724},"_833-优先级","8.3.3 优先级",[207,129727,129728,129731],{},[210,129729,129730],{},"选择器相同，则执行层叠性",[210,129732,129733],{},"选择器不同，则根据选择器权重执行",[400,129735,129736,129746],{},[403,129737,129738],{},[406,129739,129740,129743],{},[409,129741,129742],{"align":23875},"选择器",[409,129744,129745],{"align":23875},"选择器权重",[447,129747,129748,129756,129764,129772,129780,129788],{},[406,129749,129750,129753],{},[452,129751,129752],{"align":23875},"继承 或者*",[452,129754,129755],{"align":23875},"0，0，0，0",[406,129757,129758,129761],{},[452,129759,129760],{"align":23875},"标签选择器",[452,129762,129763],{"align":23875},"0，0，0，1",[406,129765,129766,129769],{},[452,129767,129768],{"align":23875},"类选择器，伪类选择器",[452,129770,129771],{"align":23875},"0，0，1，0",[406,129773,129774,129777],{},[452,129775,129776],{"align":23875},"ID选择器",[452,129778,129779],{"align":23875},"0，1，0，0",[406,129781,129782,129785],{},[452,129783,129784],{"align":23875},"行内样式",[452,129786,129787],{"align":23875},"1，0，0，0",[406,129789,129790,129793],{},[452,129791,129792],{"align":23875},"！important",[452,129794,129795],{"align":23875},"无穷大",[19,129797,129798],{},"! important用法：",[244,129800,129802],{"className":126632,"code":129801,"language":126634,"meta":169,"style":169},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[22,129803,129804,129809,129815,129828,129832,129837,129843,129853],{"__ignoreMap":169},[252,129805,129806],{"class":254,"line":255},[252,129807,129808],{"class":321},"\u002F* !important 拥有最高优先级 *\u002F\n",[252,129810,129811,129813],{"class":254,"line":170},[252,129812,51751],{"class":51440},[252,129814,15712],{"class":262},[252,129816,129817,129819,129821,129823,129826],{"class":254,"line":1318},[252,129818,71045],{"class":311},[252,129820,51577],{"class":262},[252,129822,51785],{"class":311},[252,129824,129825],{"class":258}," !important",[252,129827,1429],{"class":262},[252,129829,129830],{"class":254,"line":1333},[252,129831,1704],{"class":262},[252,129833,129834],{"class":254,"line":1339},[252,129835,129836],{"class":321},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[252,129838,129839,129841],{"class":254,"line":1353},[252,129840,51751],{"class":51440},[252,129842,15712],{"class":262},[252,129844,129845,129847,129849,129851],{"class":254,"line":1359},[252,129846,71045],{"class":311},[252,129848,51577],{"class":262},[252,129850,57561],{"class":311},[252,129852,1429],{"class":262},[252,129854,129855],{"class":254,"line":1450},[252,129856,1704],{"class":262},[19,129858,129859],{},"优先级注意点：",[19,129861,129862],{},"①权重是有4组数字组成,但是不会有进位",[19,129864,129865],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,129867,129868],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,129870,129871],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,129873,129874],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,129876,129877],{},"⑥复合选择器",[400,129879,129880,129890],{},[403,129881,129882],{},[406,129883,129884,129887],{},[409,129885,129886],{"align":23875},"div ul li",[409,129888,129889],{"align":23875},"0,0,0,3",[447,129891,129892,129900,129908],{},[406,129893,129894,129897],{},[452,129895,129896],{"align":23875},".nav ul li",[452,129898,129899],{"align":23875},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[406,129901,129902,129905],{},[452,129903,129904],{"align":23875},"a:hover",[452,129906,129907],{"align":23875},"0,0,1,1",[406,129909,129910,129913],{},[452,129911,129912],{"align":23875},".nav a",[452,129914,129907],{"align":23875},[5266,129916,129917],{},"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":169,"searchDepth":170,"depth":170,"links":129919},[129920,129928,129939],{"id":128028,"depth":170,"text":128029,"children":129921},[129922,129923,129924,129925,129926,129927],{"id":128041,"depth":1318,"text":128042},{"id":128113,"depth":1318,"text":128114},{"id":128185,"depth":1318,"text":128186},{"id":128216,"depth":1318,"text":128217},{"id":128223,"depth":1318,"text":128224},{"id":128376,"depth":1318,"text":128377},{"id":128684,"depth":170,"text":128685,"children":129929},[129930,129931,129932,129933,129934,129935,129936,129937,129938],{"id":128691,"depth":1318,"text":128692},{"id":128701,"depth":1318,"text":128702},{"id":128797,"depth":1318,"text":128798},{"id":128870,"depth":1318,"text":128871},{"id":129025,"depth":1318,"text":129026},{"id":129113,"depth":1318,"text":129114},{"id":129165,"depth":1318,"text":129166},{"id":129224,"depth":1318,"text":129225},{"id":129329,"depth":1318,"text":129330},{"id":129657,"depth":170,"text":129658,"children":129940},[129941,129942,129943],{"id":129661,"depth":1318,"text":129662},{"id":129674,"depth":1318,"text":129675},{"id":129724,"depth":1318,"text":129725},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128020,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129950,"title":129951,"body":129952,"description":178,"extension":179,"meta":131542,"navigation":181,"path":131543,"seo":131544,"stem":131545,"__hash__":131546},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129953,"toc":131521},[129954,129957,129961,129964,129967,129970,129973,129976,129979,129982,129986,129994,130031,130067,130070,130084,130089,130123,130126,130219,130224,130227,130257,130260,130265,130273,130277,130284,130330,130374,130379,130382,130385,130388,130391,130394,130397,130399,130402,130406,130411,130455,130460,130463,130466,130503,130508,130511,130514,130517,130520,130552,130555,130558,130561,130593,130596,130599,130602,130606,130609,130641,130644,130648,130668,130671,130679,130682,130686,130691,130694,130726,130731,130734,130772,130776,130781,130784,130787,130818,130821,130838,130843,130895,130955,130960,131014,131052,131056,131060,131063,131067,131075,131078,131080,131091,131096,131144,131178,131181,131184,131187,131190,131234,131237,131240,131243,131246,131249,131252,131296,131299,131302,131305,131308,131311,131314,131320,131323,131367,131370,131373,131376,131379,131382,131426,131429,131431,131434,131438,131442,131480,131484,131487,131490,131494,131502,131506,131509,131512,131515,131518],[10,129955,129951],{"id":129956},"_9-css盒模型浮动与切图",[14,129958,129960],{"id":129959},"_91-盒子模型","9.1 盒子模型",[19,129962,129963],{},"利用盒子来设计网页",[19,129965,129966],{},"盒子包含：边框、外边距、内边距、实际内容",[19,129968,129969],{},"网页布局设置：",[19,129971,129972],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,129974,129975],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,129977,129978],{},"③往盒子里装内容",[1601,129980],{"style":126488,"src":129981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[224,129983,129985],{"id":129984},"_911-边框border","9.1.1 边框（border）",[207,129987,129988,129991],{},[210,129989,129990],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[210,129992,129993],{},"语法",[244,129995,129997],{"className":126632,"code":129996,"language":126634,"meta":169,"style":169},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[22,129998,129999,130004,130010,130027],{"__ignoreMap":169},[252,130000,130001],{"class":254,"line":255},[252,130002,130003],{"class":321},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[252,130005,130006,130008],{"class":254,"line":170},[252,130007,51751],{"class":51440},[252,130009,15712],{"class":262},[252,130011,130012,130014,130016,130018,130020,130022,130025],{"class":254,"line":1318},[252,130013,71036],{"class":311},[252,130015,51577],{"class":262},[252,130017,480],{"class":311},[252,130019,51632],{"class":258},[252,130021,51661],{"class":311},[252,130023,130024],{"class":311}," #ccc",[252,130026,1429],{"class":262},[252,130028,130029],{"class":254,"line":1333},[252,130030,1704],{"class":262},[400,130032,130033,130041],{},[403,130034,130035],{},[406,130036,130037,130039],{},[409,130038,129234],{"align":23875},[409,130040,102832],{"align":23875},[447,130042,130043,130051,130059],{},[406,130044,130045,130048],{},[452,130046,130047],{"align":23875},"border-width",[452,130049,130050],{"align":23875},"定义边框粗细，单位是px",[406,130052,130053,130056],{},[452,130054,130055],{"align":23875},"border-style",[452,130057,130058],{"align":23875},"边框的样式",[406,130060,130061,130064],{},[452,130062,130063],{"align":23875},"border-color",[452,130065,130066],{"align":23875},"边框的颜色",[19,130068,130069],{},"边框样式 border-style 可以设置如下值：",[1270,130071,130072,130075,130078,130081],{},[210,130073,130074],{},"none：没有边框即忽略所有边框的宽度（默认值）",[210,130076,130077],{},"solid：边框为单实线(最为常用的)",[210,130079,130080],{},"dashed：边框为虚线",[210,130082,130083],{},"dotted：边框为点线",[207,130085,130086],{"start":1318},[210,130087,130088],{},"边框的合写分写",[244,130090,130091],{"className":126632,"code":129996,"language":126634,"meta":169,"style":169},[22,130092,130093,130097,130103,130119],{"__ignoreMap":169},[252,130094,130095],{"class":254,"line":255},[252,130096,130003],{"class":321},[252,130098,130099,130101],{"class":254,"line":170},[252,130100,51751],{"class":51440},[252,130102,15712],{"class":262},[252,130104,130105,130107,130109,130111,130113,130115,130117],{"class":254,"line":1318},[252,130106,71036],{"class":311},[252,130108,51577],{"class":262},[252,130110,480],{"class":311},[252,130112,51632],{"class":258},[252,130114,51661],{"class":311},[252,130116,130024],{"class":311},[252,130118,1429],{"class":262},[252,130120,130121],{"class":254,"line":1333},[252,130122,1704],{"class":262},[19,130124,130125],{},"边框分开写法：",[244,130127,130129],{"className":126632,"code":130128,"language":126634,"meta":169,"style":169},"\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",[22,130130,130131,130136,130142,130160,130178,130197,130215],{"__ignoreMap":169},[252,130132,130133],{"class":254,"line":255},[252,130134,130135],{"class":321},"\u002F* 边框分开写法 *\u002F\n",[252,130137,130138,130140],{"class":254,"line":170},[252,130139,51751],{"class":51440},[252,130141,15712],{"class":262},[252,130143,130144,130147,130149,130151,130153,130155,130158],{"class":254,"line":1318},[252,130145,130146],{"class":311},"  border-top",[252,130148,51577],{"class":262},[252,130150,480],{"class":311},[252,130152,51632],{"class":258},[252,130154,51661],{"class":311},[252,130156,130157],{"class":311}," #000",[252,130159,1429],{"class":262},[252,130161,130162,130165,130167,130169,130171,130173,130176],{"class":254,"line":1333},[252,130163,130164],{"class":311},"  border-right",[252,130166,51577],{"class":262},[252,130168,340],{"class":311},[252,130170,51632],{"class":258},[252,130172,62381],{"class":311},[252,130174,130175],{"class":311}," #333",[252,130177,1429],{"class":262},[252,130179,130180,130183,130185,130187,130189,130192,130195],{"class":254,"line":1339},[252,130181,130182],{"class":311},"  border-bottom",[252,130184,51577],{"class":262},[252,130186,334],{"class":311},[252,130188,51632],{"class":258},[252,130190,130191],{"class":311}," dotted",[252,130193,130194],{"class":311}," #666",[252,130196,1429],{"class":262},[252,130198,130199,130202,130204,130206,130208,130210,130213],{"class":254,"line":1353},[252,130200,130201],{"class":311},"  border-left",[252,130203,51577],{"class":262},[252,130205,480],{"class":311},[252,130207,51632],{"class":258},[252,130209,51661],{"class":311},[252,130211,130212],{"class":311}," #999",[252,130214,1429],{"class":262},[252,130216,130217],{"class":254,"line":1359},[252,130218,1704],{"class":262},[207,130220,130221],{"start":1333},[210,130222,130223],{},"表格的细线边框",[19,130225,130226],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[244,130228,130230],{"className":126632,"code":130229,"language":126634,"meta":169,"style":169},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[22,130231,130232,130237,130243,130253],{"__ignoreMap":169},[252,130233,130234],{"class":254,"line":255},[252,130235,130236],{"class":321},"\u002F* 表格细线边框合并 *\u002F\n",[252,130238,130239,130241],{"class":254,"line":170},[252,130240,400],{"class":51440},[252,130242,15712],{"class":262},[252,130244,130245,130247,130249,130251],{"class":254,"line":1318},[252,130246,70718],{"class":311},[252,130248,51577],{"class":262},[252,130250,65175],{"class":311},[252,130252,1429],{"class":262},[252,130254,130255],{"class":254,"line":1333},[252,130256,1704],{"class":262},[19,130258,130259],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[207,130261,130262],{"start":1339},[210,130263,130264],{},"解决边框额外增加盒子的实际大小的方法：",[1270,130266,130267,130270],{},[210,130268,130269],{},"测量盒子大小的时候,不量边框",[210,130271,130272],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[224,130274,130276],{"id":130275},"_912-内边距","9.1.2 内边距",[207,130278,130279,130282],{},[210,130280,130281],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[210,130283,129993],{},[400,130285,130286,130296],{},[403,130287,130288],{},[406,130289,130290,130293],{},[409,130291,130292],{"align":23875},"值的个数",[409,130294,130295],{"align":23875},"表达意思",[447,130297,130298,130306,130314,130322],{},[406,130299,130300,130303],{},[452,130301,130302],{"align":23875},"padding: 5px;",[452,130304,130305],{"align":23875},"1个值，代表上下左右都有5个元素",[406,130307,130308,130311],{},[452,130309,130310],{"align":23875},"padding: 5px 10px;",[452,130312,130313],{"align":23875},"2个值，代表上下内边距为5像素，左右内边距为10像素",[406,130315,130316,130319],{},[452,130317,130318],{"align":23875},"padding: 5px 10px 20px;",[452,130320,130321],{"align":23875},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[406,130323,130324,130327],{},[452,130325,130326],{"align":23875},"padding: 5px 10px 20px 30px;",[452,130328,130329],{"align":23875},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[400,130331,130332,130340],{},[403,130333,130334],{},[406,130335,130336,130338],{},[409,130337,129234],{"align":23875},[409,130339,102832],{"align":23875},[447,130341,130342,130350,130358,130366],{},[406,130343,130344,130347],{},[452,130345,130346],{"align":23875},"padding-left",[452,130348,130349],{"align":23875},"左内边距",[406,130351,130352,130355],{},[452,130353,130354],{"align":23875},"padding-right",[452,130356,130357],{"align":23875},"右内边距",[406,130359,130360,130363],{},[452,130361,130362],{"align":23875},"padding-top",[452,130364,130365],{"align":23875},"上内边距",[406,130367,130368,130371],{},[452,130369,130370],{"align":23875},"padding-bottom",[452,130372,130373],{"align":23875},"下内边距",[207,130375,130376],{"start":1318},[210,130377,130378],{},"内边距会影响盒子的实际大小",[19,130380,130381],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130383,130384],{},"①内容和边框有了距离，添加了内边距",[19,130386,130387],{},"②padding影响了盒子实际大小",[19,130389,130390],{},"内边距对盒子大小的影响：",[19,130392,130393],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130395,130396],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130398,95358],{},[19,130400,130401],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[224,130403,130405],{"id":130404},"_913-外边距","9.1.3 外边距",[207,130407,130408],{},[210,130409,130410],{},"控制盒子与盒子之间的距离",[400,130412,130413,130421],{},[403,130414,130415],{},[406,130416,130417,130419],{},[409,130418,129234],{"align":23875},[409,130420,102832],{"align":23875},[447,130422,130423,130431,130439,130447],{},[406,130424,130425,130428],{},[452,130426,130427],{"align":23875},"margin-left",[452,130429,130430],{"align":23875},"左外边距",[406,130432,130433,130436],{},[452,130434,130435],{"align":23875},"margin-right",[452,130437,130438],{"align":23875},"右外边距",[406,130440,130441,130444],{},[452,130442,130443],{"align":23875},"margin-top",[452,130445,130446],{"align":23875},"上外边距",[406,130448,130449,130452],{},[452,130450,130451],{"align":23875},"margin-bottom",[452,130453,130454],{"align":23875},"下外边距",[207,130456,130457],{"start":170},[210,130458,130459],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130461,130462],{},"①盒子必须指定了宽度（width）",[19,130464,130465],{},"②盒子左右的外边距都设置为 auto",[244,130467,130469],{"className":126632,"code":130468,"language":126634,"meta":169,"style":169},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[22,130470,130471,130476,130483,130499],{"__ignoreMap":169},[252,130472,130473],{"class":254,"line":255},[252,130474,130475],{"class":321},"\u002F* margin 复合写法（同上） *\u002F\n",[252,130477,130478,130481],{"class":254,"line":170},[252,130479,130480],{"class":2102},".box",[252,130482,15712],{"class":262},[252,130484,130485,130487,130489,130491,130493,130496],{"class":254,"line":1318},[252,130486,70610],{"class":311},[252,130488,51577],{"class":262},[252,130490,454],{"class":311},[252,130492,51696],{"class":311},[252,130494,130495],{"class":262},";  ",[252,130497,130498],{"class":321},"\u002F* 块级盒子水平居中 *\u002F\n",[252,130500,130501],{"class":254,"line":1333},[252,130502,1704],{"class":262},[207,130504,130505],{"start":1318},[210,130506,130507],{},"外边距塌陷问题",[19,130509,130510],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1601,130512],{"style":126488,"src":130513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130515,130516],{},"解决方案：",[19,130518,130519],{},"①可以为父亲元素定义上边距",[244,130521,130522],{"className":126632,"code":130468,"language":126634,"meta":169,"style":169},[22,130523,130524,130528,130534,130548],{"__ignoreMap":169},[252,130525,130526],{"class":254,"line":255},[252,130527,130475],{"class":321},[252,130529,130530,130532],{"class":254,"line":170},[252,130531,130480],{"class":2102},[252,130533,15712],{"class":262},[252,130535,130536,130538,130540,130542,130544,130546],{"class":254,"line":1318},[252,130537,70610],{"class":311},[252,130539,51577],{"class":262},[252,130541,454],{"class":311},[252,130543,51696],{"class":311},[252,130545,130495],{"class":262},[252,130547,130498],{"class":321},[252,130549,130550],{"class":254,"line":1333},[252,130551,1704],{"class":262},[19,130553,130554],{},"②可以为父亲元素定义上内边距",[19,130556,130557],{},"③可以为父亲元素添加overflow:hidden",[1601,130559],{"style":126488,"src":130560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[244,130562,130563],{"className":126632,"code":130468,"language":126634,"meta":169,"style":169},[22,130564,130565,130569,130575,130589],{"__ignoreMap":169},[252,130566,130567],{"class":254,"line":255},[252,130568,130475],{"class":321},[252,130570,130571,130573],{"class":254,"line":170},[252,130572,130480],{"class":2102},[252,130574,15712],{"class":262},[252,130576,130577,130579,130581,130583,130585,130587],{"class":254,"line":1318},[252,130578,70610],{"class":311},[252,130580,51577],{"class":262},[252,130582,454],{"class":311},[252,130584,51696],{"class":311},[252,130586,130495],{"class":262},[252,130588,130498],{"class":321},[252,130590,130591],{"class":254,"line":1333},[252,130592,1704],{"class":262},[1601,130594],{"style":126488,"src":130595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130597,130598],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130600,130601],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[224,130603,130605],{"id":130604},"_914-清除内外边距","9.1.4 清除内外边距",[19,130607,130608],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[244,130610,130611],{"className":126632,"code":130468,"language":126634,"meta":169,"style":169},[22,130612,130613,130617,130623,130637],{"__ignoreMap":169},[252,130614,130615],{"class":254,"line":255},[252,130616,130475],{"class":321},[252,130618,130619,130621],{"class":254,"line":170},[252,130620,130480],{"class":2102},[252,130622,15712],{"class":262},[252,130624,130625,130627,130629,130631,130633,130635],{"class":254,"line":1318},[252,130626,70610],{"class":311},[252,130628,51577],{"class":262},[252,130630,454],{"class":311},[252,130632,51696],{"class":311},[252,130634,130495],{"class":262},[252,130636,130498],{"class":321},[252,130638,130639],{"class":254,"line":1333},[252,130640,1704],{"class":262},[19,130642,130643],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[224,130645,130647],{"id":130646},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1270,130649,130650,130653,130656,130659,130662,130665],{},[210,130651,130652],{},"文件→打开 ：可以打开我们要测量的图片",[210,130654,130655],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[210,130657,130658],{},"右击标尺，把里面的单位改为像素",[210,130660,130661],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[210,130663,130664],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[210,130666,130667],{},"用选区拖动 可以测量大小",[1601,130669],{"style":126488,"src":130670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1270,130672,130673,130676],{},[210,130674,130675],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[210,130677,130678],{},"吸管取色工具",[1601,130680],{"style":126488,"src":130681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[224,130683,130685],{"id":130684},"_916-案例","9.1.6 案例",[207,130687,130688],{},[210,130689,130690],{},"小米商品",[1601,130692],{"style":126488,"src":130693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[244,130695,130696],{"className":126632,"code":130468,"language":126634,"meta":169,"style":169},[22,130697,130698,130702,130708,130722],{"__ignoreMap":169},[252,130699,130700],{"class":254,"line":255},[252,130701,130475],{"class":321},[252,130703,130704,130706],{"class":254,"line":170},[252,130705,130480],{"class":2102},[252,130707,15712],{"class":262},[252,130709,130710,130712,130714,130716,130718,130720],{"class":254,"line":1318},[252,130711,70610],{"class":311},[252,130713,51577],{"class":262},[252,130715,454],{"class":311},[252,130717,51696],{"class":311},[252,130719,130495],{"class":262},[252,130721,130498],{"class":321},[252,130723,130724],{"class":254,"line":1333},[252,130725,1704],{"class":262},[207,130727,130728],{"start":170},[210,130729,130730],{},"快报模块",[1601,130732],{"style":126488,"src":130733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[244,130735,130737],{"className":127379,"code":130736,"language":127381,"meta":169,"style":169},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[22,130738,130739,130744,130759,130764],{"__ignoreMap":169},[252,130740,130741],{"class":254,"line":255},[252,130742,130743],{"class":321},"\u003C!-- HTML 代码示例 -->\n",[252,130745,130746,130748,130750,130752,130754,130757],{"class":254,"line":170},[252,130747,1173],{"class":262},[252,130749,51751],{"class":51440},[252,130751,53626],{"class":2102},[252,130753,308],{"class":262},[252,130755,130756],{"class":367},"\"example\"",[252,130758,51447],{"class":262},[252,130760,130761],{"class":254,"line":1318},[252,130762,130763],{"class":262},"  示例内容\n",[252,130765,130766,130768,130770],{"class":254,"line":1333},[252,130767,51925],{"class":262},[252,130769,51751],{"class":51440},[252,130771,51447],{"class":262},[224,130773,130775],{"id":130774},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[207,130777,130778],{},[210,130779,130780],{},"圆角边框",[19,130782,130783],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1601,130785],{"style":126488,"src":130786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[244,130788,130790],{"className":126632,"code":130789,"language":126634,"meta":169,"style":169},"div {\n  border: 1px solid #ccc;\n}\n",[22,130791,130792,130798,130814],{"__ignoreMap":169},[252,130793,130794,130796],{"class":254,"line":255},[252,130795,51751],{"class":51440},[252,130797,15712],{"class":262},[252,130799,130800,130802,130804,130806,130808,130810,130812],{"class":254,"line":170},[252,130801,71036],{"class":311},[252,130803,51577],{"class":262},[252,130805,480],{"class":311},[252,130807,51632],{"class":258},[252,130809,51661],{"class":311},[252,130811,130024],{"class":311},[252,130813,1429],{"class":262},[252,130815,130816],{"class":254,"line":1318},[252,130817,1704],{"class":262},[19,130819,130820],{},"解释:",[1270,130822,130823,130826,130829,130832,130835],{},[210,130824,130825],{},"参数值可以为数值或百分比的形式",[210,130827,130828],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[210,130830,130831],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[210,130833,130834],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[210,130836,130837],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[207,130839,130840],{"start":170},[210,130841,130842],{},"盒子阴影",[244,130844,130846],{"className":126632,"code":130845,"language":126634,"meta":169,"style":169},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[22,130847,130848,130854,130891],{"__ignoreMap":169},[252,130849,130850,130852],{"class":254,"line":255},[252,130851,51751],{"class":51440},[252,130853,15712],{"class":262},[252,130855,130856,130859,130861,130863,130865,130867,130869,130871,130873,130875,130877,130879,130881,130883,130885,130887,130889],{"class":254,"line":170},[252,130857,130858],{"class":311},"  box-shadow",[252,130860,51577],{"class":262},[252,130862,454],{"class":311},[252,130864,14895],{"class":311},[252,130866,51632],{"class":258},[252,130868,2177],{"class":311},[252,130870,51632],{"class":258},[252,130872,78906],{"class":311},[252,130874,263],{"class":262},[252,130876,454],{"class":311},[252,130878,12575],{"class":262},[252,130880,454],{"class":311},[252,130882,12575],{"class":262},[252,130884,454],{"class":311},[252,130886,12575],{"class":262},[252,130888,86348],{"class":311},[252,130890,2858],{"class":262},[252,130892,130893],{"class":254,"line":1318},[252,130894,1704],{"class":262},[400,130896,130897,130905],{},[403,130898,130899],{},[406,130900,130901,130903],{},[409,130902,415],{"align":23875},[409,130904,27629],{"align":23875},[447,130906,130907,130915,130923,130931,130939,130947],{},[406,130908,130909,130912],{},[452,130910,130911],{"align":23875},"h-shadow",[452,130913,130914],{"align":23875},"必需,水平阴影的位置,允许负值",[406,130916,130917,130920],{},[452,130918,130919],{"align":23875},"v-shadow",[452,130921,130922],{"align":23875},"必需,垂直阴影的位置,允许负值",[406,130924,130925,130928],{},[452,130926,130927],{"align":23875},"blur",[452,130929,130930],{"align":23875},"可选,模糊距离,就是影子的虚实",[406,130932,130933,130936],{},[452,130934,130935],{"align":23875},"spread",[452,130937,130938],{"align":23875},"可选,阴影尺寸",[406,130940,130941,130944],{},[452,130942,130943],{"align":23875},"color",[452,130945,130946],{"align":23875},"可选,阴影的颜色",[406,130948,130949,130952],{},[452,130950,130951],{"align":23875},"inset",[452,130953,130954],{"align":23875},"可选,将外部阴影(outset)改为内部阴影",[207,130956,130957],{"start":1318},[210,130958,130959],{},"文字阴影",[244,130961,130963],{"className":126632,"code":130962,"language":126634,"meta":169,"style":169},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[22,130964,130965,130971,131010],{"__ignoreMap":169},[252,130966,130967,130969],{"class":254,"line":255},[252,130968,19],{"class":51440},[252,130970,15712],{"class":262},[252,130972,130973,130976,130978,130980,130982,130984,130986,130988,130990,130992,130994,130996,130998,131000,131002,131004,131006,131008],{"class":254,"line":170},[252,130974,130975],{"class":311},"  text-shadow",[252,130977,51577],{"class":262},[252,130979,480],{"class":311},[252,130981,51632],{"class":258},[252,130983,25258],{"class":311},[252,130985,51632],{"class":258},[252,130987,14895],{"class":311},[252,130989,51632],{"class":258},[252,130991,78906],{"class":311},[252,130993,263],{"class":262},[252,130995,454],{"class":311},[252,130997,12575],{"class":262},[252,130999,454],{"class":311},[252,131001,12575],{"class":262},[252,131003,454],{"class":311},[252,131005,12575],{"class":262},[252,131007,100659],{"class":311},[252,131009,2858],{"class":262},[252,131011,131012],{"class":254,"line":1318},[252,131013,1704],{"class":262},[400,131015,131016,131024],{},[403,131017,131018],{},[406,131019,131020,131022],{},[409,131021,415],{"align":23875},[409,131023,27629],{"align":23875},[447,131025,131026,131032,131039,131046],{},[406,131027,131028,131030],{},[452,131029,130911],{"align":23875},[452,131031,130914],{"align":23875},[406,131033,131034,131036],{},[452,131035,130919],{"align":23875},[452,131037,131038],{"align":23875},"必需,垂直阴影位置,允许负值",[406,131040,131041,131043],{},[452,131042,130927],{"align":23875},[452,131044,131045],{"align":23875},"可选,模糊的距离",[406,131047,131048,131050],{},[452,131049,130943],{"align":23875},[452,131051,130946],{"align":23875},[14,131053,131055],{"id":131054},"_92-浮动","9.2 浮动",[224,131057,131059],{"id":131058},"_921-浮动介绍","9.2.1 浮动介绍",[19,131061,131062],{},"在16.2中详细介绍",[224,131064,131066],{"id":131065},"_922-清除浮动","9.2.2 清除浮动",[207,131068,131069,131072],{},[210,131070,131071],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[210,131073,131074],{},"清除浮动的本质",[19,131076,131077],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131079,9165],{},[1270,131081,131082,131085,131088],{},[210,131083,131084],{},"如果父盒子本身有高度，则不需要清除浮动",[210,131086,131087],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[210,131089,131090],{},"父级有了高度，就不会影响下面的标准流了",[207,131092,131093],{"start":1318},[210,131094,131095],{},"清除浮动样式",[244,131097,131099],{"className":126632,"code":131098,"language":126634,"meta":169,"style":169},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[22,131100,131101,131108,131119,131123,131130,131140],{"__ignoreMap":169},[252,131102,131103,131106],{"class":254,"line":255},[252,131104,131105],{"class":2102},".left",[252,131107,15712],{"class":262},[252,131109,131110,131113,131115,131117],{"class":254,"line":170},[252,131111,131112],{"class":311},"  float",[252,131114,51577],{"class":262},[252,131116,23875],{"class":311},[252,131118,1429],{"class":262},[252,131120,131121],{"class":254,"line":1318},[252,131122,1704],{"class":262},[252,131124,131125,131128],{"class":254,"line":1333},[252,131126,131127],{"class":2102},".right",[252,131129,15712],{"class":262},[252,131131,131132,131134,131136,131138],{"class":254,"line":1339},[252,131133,131112],{"class":311},[252,131135,51577],{"class":262},[252,131137,72662],{"class":311},[252,131139,1429],{"class":262},[252,131141,131142],{"class":254,"line":1353},[252,131143,1704],{"class":262},[400,131145,131146,131154],{},[403,131147,131148],{},[406,131149,131150,131152],{},[409,131151,127096],{"align":23875},[409,131153,27629],{"align":23875},[447,131155,131156,131163,131170],{},[406,131157,131158,131160],{},[452,131159,23875],{"align":23875},[452,131161,131162],{"align":23875},"不允许左侧有浮动元素（清除左侧浮动的影响）",[406,131164,131165,131167],{},[452,131166,72662],{"align":23875},[452,131168,131169],{"align":23875},"不允许右侧有浮动元素（清除右侧浮动的影响）",[406,131171,131172,131175],{},[452,131173,131174],{"align":23875},"both",[452,131176,131177],{"align":23875},"同时清除左右侧浮动的影响",[19,131179,131180],{},"法一",[19,131182,131183],{},"额外标签法也称为隔墙法",[19,131185,131186],{},"使用方式：",[19,131188,131189],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[244,131191,131192],{"className":126632,"code":131098,"language":126634,"meta":169,"style":169},[22,131193,131194,131200,131210,131214,131220,131230],{"__ignoreMap":169},[252,131195,131196,131198],{"class":254,"line":255},[252,131197,131105],{"class":2102},[252,131199,15712],{"class":262},[252,131201,131202,131204,131206,131208],{"class":254,"line":170},[252,131203,131112],{"class":311},[252,131205,51577],{"class":262},[252,131207,23875],{"class":311},[252,131209,1429],{"class":262},[252,131211,131212],{"class":254,"line":1318},[252,131213,1704],{"class":262},[252,131215,131216,131218],{"class":254,"line":1333},[252,131217,131127],{"class":2102},[252,131219,15712],{"class":262},[252,131221,131222,131224,131226,131228],{"class":254,"line":1339},[252,131223,131112],{"class":311},[252,131225,51577],{"class":262},[252,131227,72662],{"class":311},[252,131229,1429],{"class":262},[252,131231,131232],{"class":254,"line":1353},[252,131233,1704],{"class":262},[19,131235,131236],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131238,131239],{},"优点： 通俗易懂，书写方便",[19,131241,131242],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131244,131245],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131247,131248],{},"法二",[19,131250,131251],{},"父级添加overflow属性",[244,131253,131254],{"className":126632,"code":131098,"language":126634,"meta":169,"style":169},[22,131255,131256,131262,131272,131276,131282,131292],{"__ignoreMap":169},[252,131257,131258,131260],{"class":254,"line":255},[252,131259,131105],{"class":2102},[252,131261,15712],{"class":262},[252,131263,131264,131266,131268,131270],{"class":254,"line":170},[252,131265,131112],{"class":311},[252,131267,51577],{"class":262},[252,131269,23875],{"class":311},[252,131271,1429],{"class":262},[252,131273,131274],{"class":254,"line":1318},[252,131275,1704],{"class":262},[252,131277,131278,131280],{"class":254,"line":1333},[252,131279,131127],{"class":2102},[252,131281,15712],{"class":262},[252,131283,131284,131286,131288,131290],{"class":254,"line":1339},[252,131285,131112],{"class":311},[252,131287,51577],{"class":262},[252,131289,72662],{"class":311},[252,131291,1429],{"class":262},[252,131293,131294],{"class":254,"line":1353},[252,131295,1704],{"class":262},[19,131297,131298],{},"overflow: hidden;",[19,131300,131301],{},"优点：代码简洁",[19,131303,131304],{},"缺点：无法显示溢出的部分",[19,131306,131307],{},"注意：是给父元素添加代码",[19,131309,131310],{},"法三",[19,131312,131313],{},"父级添加after伪元素",[19,131315,131316,131319],{},[131317,131318],"after",{}," 方式是额外标签法的升级版",[19,131321,131322],{},"使用的时候复制就可以",[244,131324,131325],{"className":126632,"code":131098,"language":126634,"meta":169,"style":169},[22,131326,131327,131333,131343,131347,131353,131363],{"__ignoreMap":169},[252,131328,131329,131331],{"class":254,"line":255},[252,131330,131105],{"class":2102},[252,131332,15712],{"class":262},[252,131334,131335,131337,131339,131341],{"class":254,"line":170},[252,131336,131112],{"class":311},[252,131338,51577],{"class":262},[252,131340,23875],{"class":311},[252,131342,1429],{"class":262},[252,131344,131345],{"class":254,"line":1318},[252,131346,1704],{"class":262},[252,131348,131349,131351],{"class":254,"line":1333},[252,131350,131127],{"class":2102},[252,131352,15712],{"class":262},[252,131354,131355,131357,131359,131361],{"class":254,"line":1339},[252,131356,131112],{"class":311},[252,131358,51577],{"class":262},[252,131360,72662],{"class":311},[252,131362,1429],{"class":262},[252,131364,131365],{"class":254,"line":1353},[252,131366,1704],{"class":262},[19,131368,131369],{},"优点：没有增加标签，结构更简单",[19,131371,131372],{},"缺点：照顾低版本浏览器",[19,131374,131375],{},"代表网站： 百度、淘宝网、网易等",[19,131377,131378],{},"法四",[19,131380,131381],{},"父级添加双伪元素",[244,131383,131384],{"className":126632,"code":131098,"language":126634,"meta":169,"style":169},[22,131385,131386,131392,131402,131406,131412,131422],{"__ignoreMap":169},[252,131387,131388,131390],{"class":254,"line":255},[252,131389,131105],{"class":2102},[252,131391,15712],{"class":262},[252,131393,131394,131396,131398,131400],{"class":254,"line":170},[252,131395,131112],{"class":311},[252,131397,51577],{"class":262},[252,131399,23875],{"class":311},[252,131401,1429],{"class":262},[252,131403,131404],{"class":254,"line":1318},[252,131405,1704],{"class":262},[252,131407,131408,131410],{"class":254,"line":1333},[252,131409,131127],{"class":2102},[252,131411,15712],{"class":262},[252,131413,131414,131416,131418,131420],{"class":254,"line":1339},[252,131415,131112],{"class":311},[252,131417,51577],{"class":262},[252,131419,72662],{"class":311},[252,131421,1429],{"class":262},[252,131423,131424],{"class":254,"line":1353},[252,131425,1704],{"class":262},[19,131427,131428],{},"优点：代码更简洁",[19,131430,131372],{},[19,131432,131433],{},"代表网站：小米、腾讯等",[14,131435,131437],{"id":131436},"_93-ps切图","9.3 PS切图",[224,131439,131441],{"id":131440},"_931-常见图片格式","9.3.1 常见图片格式",[400,131443,131444,131454],{},[403,131445,131446],{},[406,131447,131448,131451],{},[409,131449,131450],{"align":23875},"jpg图像格式",[409,131452,131453],{"align":23875},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[447,131455,131456,131464,131472],{},[406,131457,131458,131461],{},[452,131459,131460],{"align":23875},"gif图像格式",[452,131462,131463],{"align":23875},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[406,131465,131466,131469],{},[452,131467,131468],{"align":23875},"png图像格式",[452,131470,131471],{"align":23875},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[406,131473,131474,131477],{},[452,131475,131476],{"align":23875},"PSD图像格式",[452,131478,131479],{"align":23875},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[224,131481,131483],{"id":131482},"_932-图层切图","9.3.2 图层切图",[19,131485,131486],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131488,131489],{},"按住shift选中两个图层->图层菜单->合并图层",[224,131491,131493],{"id":131492},"_933-切片切图","9.3.3 切片切图",[1270,131495,131496,131499],{},[210,131497,131498],{},"利用切片工具手动划出",[210,131500,131501],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[224,131503,131505],{"id":131504},"_934-切图步骤","9.3.4 切图步骤",[19,131507,131508],{},"用切片工具选中：",[1601,131510],{"style":126488,"src":131511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131513,131514],{},"文件 -> 导出",[1601,131516],{"style":126488,"src":131517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5266,131519,131520],{},"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":169,"searchDepth":170,"depth":170,"links":131522},[131523,131532,131536],{"id":129959,"depth":170,"text":129960,"children":131524},[131525,131526,131527,131528,131529,131530,131531],{"id":129984,"depth":1318,"text":129985},{"id":130275,"depth":1318,"text":130276},{"id":130404,"depth":1318,"text":130405},{"id":130604,"depth":1318,"text":130605},{"id":130646,"depth":1318,"text":130647},{"id":130684,"depth":1318,"text":130685},{"id":130774,"depth":1318,"text":130775},{"id":131054,"depth":170,"text":131055,"children":131533},[131534,131535],{"id":131058,"depth":1318,"text":131059},{"id":131065,"depth":1318,"text":131066},{"id":131436,"depth":170,"text":131437,"children":131537},[131538,131539,131540,131541],{"id":131440,"depth":1318,"text":131441},{"id":131482,"depth":1318,"text":131483},{"id":131492,"depth":1318,"text":131493},{"id":131504,"depth":1318,"text":131505},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129951,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131548,"title":131549,"body":131550,"description":178,"extension":179,"meta":132191,"navigation":181,"path":132192,"seo":132193,"stem":132194,"__hash__":132195},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131551,"toc":132179},[131552,131555,131559,131585,131619,131623,131627,131630,131672,131679,131689,131697,131699,131702,131705,131708,131715,131729,131733,131736,131765,131769,131772,131786,131790,131793,131821,131825,131828,131854,131858,131863,131896,131901,131929,131933,131950,131996,132001,132045,132062,132169,132177],[10,131553,131549],{"id":131554},"_10-css规范与学成在线案例",[14,131556,131558],{"id":131557},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[207,131560,131561,131567,131573,131579],{},[210,131562,131563,131566],{},[412,131564,131565],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[210,131568,131569,131572],{},[412,131570,131571],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[210,131574,131575,131578],{},[412,131576,131577],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[210,131580,131581,131584],{},[412,131582,131583],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[244,131586,131587],{"className":126632,"code":129996,"language":126634,"meta":169,"style":169},[22,131588,131589,131593,131599,131615],{"__ignoreMap":169},[252,131590,131591],{"class":254,"line":255},[252,131592,130003],{"class":321},[252,131594,131595,131597],{"class":254,"line":170},[252,131596,51751],{"class":51440},[252,131598,15712],{"class":262},[252,131600,131601,131603,131605,131607,131609,131611,131613],{"class":254,"line":1318},[252,131602,71036],{"class":311},[252,131604,51577],{"class":262},[252,131606,480],{"class":311},[252,131608,51632],{"class":258},[252,131610,51661],{"class":311},[252,131612,130024],{"class":311},[252,131614,1429],{"class":262},[252,131616,131617],{"class":254,"line":1333},[252,131618,1704],{"class":262},[14,131620,131622],{"id":131621},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[224,131624,131626],{"id":131625},"_1021-header头部制作","10.2.1 header头部制作",[1601,131628],{"style":126488,"src":131629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1270,131631,131632,131639,131646,131652,131659,131666],{},[210,131633,131634,131635,131638],{},"1号是版心盒子 ",[412,131636,131637],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[210,131640,131641,131642,131645],{},"版心盒子 里面包含 2号盒子 ",[412,131643,131644],{},"logo"," 图标",[210,131647,131648,131649,131651],{},"版心盒子 里面包含 3号盒子 ",[412,131650,53853],{}," 导航栏",[210,131653,131654,131655,131658],{},"版心盒子 里面包含 4号盒子 ",[412,131656,131657],{},"search"," 搜索框",[210,131660,131661,131662,131665],{},"版心盒子 里面包含 5号盒子 ",[412,131663,131664],{},"user"," 个人信息",[210,131667,131668,131669],{},"注意，要求里面的 ",[412,131670,131671],{},"4个子盒子 必须都浮动",[207,131673,131674],{},[210,131675,131676],{},[412,131677,131678],{},"导航栏注意点:",[19,131680,131681,131682,131685,131686],{},"实际开发中， ",[412,131683,131684],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[412,131687,131688],{},"用 li 包含链接(li+a)的做法",[1270,131690,131691,131694],{},[210,131692,131693],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[210,131695,131696],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131698,9165],{},[19,131700,131701],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,131703,131704],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,131706,131707],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[207,131709,131710],{"start":170},[210,131711,131712],{},[412,131713,131714],{},"4号盒子search的细节：",[1270,131716,131717,131720,131723],{},[210,131718,131719],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[210,131721,131722],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[210,131724,131725,131728],{},[22,131726,131727],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[224,131730,131732],{"id":131731},"_1022-banner制作","10.2.2 banner制作",[1601,131734],{"style":126488,"src":131735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1270,131737,131738,131745,131751,131758],{},[210,131739,131740,131741,131744],{},"1号盒子是通栏的大盒子 ",[412,131742,131743],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[210,131746,131747,131748,131750],{},"2号盒子是版心 ",[412,131749,1058],{}," ， 要水平居中对齐",[210,131752,131753,131754,131757],{},"3号盒子版心内，左对齐 ",[412,131755,131756],{},"subnav"," 侧导航栏",[210,131759,131760,131761,131764],{},"4号盒子版心内，右对齐 ",[412,131762,131763],{},"course"," 课程",[224,131766,131768],{"id":131767},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1601,131770],{"style":126488,"src":131771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1270,131773,131774,131777,131780,131783],{},[210,131775,131776],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[210,131778,131779],{},"1号盒子是标题 H3 左侧浮动",[210,131781,131782],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[210,131784,131785],{},"3号盒子 右浮动 mod 修改",[224,131787,131789],{"id":131788},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1601,131791],{"style":126488,"src":131792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1270,131794,131795,131801,131808,131815,131818],{},[210,131796,131797,131798,131800],{},"1号盒子为最大的盒子 ",[412,131799,53854],{}," 版心水平居中对齐",[210,131802,131803,131804,131807],{},"2号盒子为上面部分 ",[412,131805,131806],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[210,131809,131810,131811,131814],{},"3号盒子为底下部分 ",[412,131812,131813],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[210,131816,131817],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[210,131819,131820],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[224,131822,131824],{"id":131823},"_1025-底部模块制作","10.2.5 底部模块制作",[1601,131826],{"style":126488,"src":131827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1270,131829,131830,131837,131840,131847],{},[210,131831,131832,131833,131836],{},"1号盒子通栏大盒子 底部 ",[412,131834,131835],{},"footer"," 给高度 底色是白色",[210,131838,131839],{},"2号盒子版心水平居中",[210,131841,131842,131843,131846],{},"3号盒子版权 ",[412,131844,131845],{},"copyright"," 左对齐",[210,131848,131849,131850,131853],{},"4号盒子 链接组 ",[412,131851,131852],{},"links"," 右对齐",[224,131855,131857],{"id":131856},"_1026-代码模块","10.2.6 代码模块",[207,131859,131860],{},[210,131861,131862],{},"html部分",[244,131864,131866],{"className":127379,"code":131865,"language":127381,"meta":169,"style":169},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[22,131867,131868],{"__ignoreMap":169},[252,131869,131870,131872,131874,131876,131878,131881,131884,131886,131889,131892,131894],{"class":254,"line":255},[252,131871,1173],{"class":262},[252,131873,501],{"class":51440},[252,131875,61197],{"class":2102},[252,131877,308],{"class":262},[252,131879,131880],{"class":367},"\"https:\u002F\u002Fexample.com\"",[252,131882,131883],{"class":2102}," target",[252,131885,308],{"class":262},[252,131887,131888],{"class":367},"\"_blank\"",[252,131890,131891],{"class":262},">链接文字\u003C\u002F",[252,131893,501],{"class":51440},[252,131895,51447],{"class":262},[207,131897,131898],{"start":170},[210,131899,131900],{},"css部分",[244,131902,131903],{"className":127379,"code":131865,"language":127381,"meta":169,"style":169},[22,131904,131905],{"__ignoreMap":169},[252,131906,131907,131909,131911,131913,131915,131917,131919,131921,131923,131925,131927],{"class":254,"line":255},[252,131908,1173],{"class":262},[252,131910,501],{"class":51440},[252,131912,61197],{"class":2102},[252,131914,308],{"class":262},[252,131916,131880],{"class":367},[252,131918,131883],{"class":2102},[252,131920,308],{"class":262},[252,131922,131888],{"class":367},[252,131924,131891],{"class":262},[252,131926,501],{"class":51440},[252,131928,51447],{"class":262},[224,131930,131932],{"id":131931},"_1027-收获","10.2.7 收获",[207,131934,131935,131938,131941,131944,131947],{},[210,131936,131937],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[210,131939,131940],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[210,131942,131943],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[210,131945,131946],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[210,131948,131949],{},"遗忘代码",[244,131951,131953],{"className":126632,"code":131952,"language":126634,"meta":169,"style":169},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[22,131954,131955,131977,131982,131992],{"__ignoreMap":169},[252,131956,131957,131959,131961,131963,131965,131967,131969,131971,131973,131975],{"class":254,"line":255},[252,131958,51751],{"class":51440},[252,131960,12575],{"class":262},[252,131962,19],{"class":51440},[252,131964,12575],{"class":262},[252,131966,10],{"class":51440},[252,131968,12575],{"class":262},[252,131970,1270],{"class":51440},[252,131972,12575],{"class":262},[252,131974,210],{"class":51440},[252,131976,15712],{"class":262},[252,131978,131979],{"class":254,"line":170},[252,131980,131981],{"class":321},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[252,131983,131984,131986,131988,131990],{"class":254,"line":1318},[252,131985,128248],{"class":311},[252,131987,51577],{"class":262},[252,131989,61009],{"class":311},[252,131991,1429],{"class":262},[252,131993,131994],{"class":254,"line":1333},[252,131995,1704],{"class":262},[207,131997,131998],{"start":1353},[210,131999,132000],{},"html引css的程序",[244,132002,132003],{"className":126632,"code":131952,"language":126634,"meta":169,"style":169},[22,132004,132005,132027,132031,132041],{"__ignoreMap":169},[252,132006,132007,132009,132011,132013,132015,132017,132019,132021,132023,132025],{"class":254,"line":255},[252,132008,51751],{"class":51440},[252,132010,12575],{"class":262},[252,132012,19],{"class":51440},[252,132014,12575],{"class":262},[252,132016,10],{"class":51440},[252,132018,12575],{"class":262},[252,132020,1270],{"class":51440},[252,132022,12575],{"class":262},[252,132024,210],{"class":51440},[252,132026,15712],{"class":262},[252,132028,132029],{"class":254,"line":170},[252,132030,131981],{"class":321},[252,132032,132033,132035,132037,132039],{"class":254,"line":1318},[252,132034,128248],{"class":311},[252,132036,51577],{"class":262},[252,132038,61009],{"class":311},[252,132040,1429],{"class":262},[252,132042,132043],{"class":254,"line":1333},[252,132044,1704],{"class":262},[207,132046,132047,132050,132053,132056,132059],{"start":1359},[210,132048,132049],{},"浮动的盒子不会有外边距合并问题",[210,132051,132052],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[210,132054,132055],{},"ctrl+g快速定位行；shift+alt多个光标",[210,132057,132058],{},"学习上方各个模块的选择器起名方法，以后就这样用",[210,132060,132061],{},"在写选择器时尽量写全一些，例如",[244,132063,132065],{"className":126632,"code":132064,"language":126634,"meta":169,"style":169},"\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",[22,132066,132067,132072,132088,132093,132108,132113,132128,132133,132148,132153],{"__ignoreMap":169},[252,132068,132069],{"class":254,"line":255},[252,132070,132071],{"class":321},"\u002F* 静态定位（默认） *\u002F\n",[252,132073,132074,132077,132079,132081,132083,132086],{"class":254,"line":170},[252,132075,132076],{"class":2102},".static",[252,132078,79946],{"class":262},[252,132080,128992],{"class":311},[252,132082,51577],{"class":262},[252,132084,132085],{"class":311},"static",[252,132087,129562],{"class":262},[252,132089,132090],{"class":254,"line":1318},[252,132091,132092],{"class":321},"\u002F* 相对定位 *\u002F\n",[252,132094,132095,132098,132100,132102,132104,132106],{"class":254,"line":1333},[252,132096,132097],{"class":2102},".relative",[252,132099,79946],{"class":262},[252,132101,128992],{"class":311},[252,132103,51577],{"class":262},[252,132105,54904],{"class":311},[252,132107,129562],{"class":262},[252,132109,132110],{"class":254,"line":1339},[252,132111,132112],{"class":321},"\u002F* 绝对定位 *\u002F\n",[252,132114,132115,132118,132120,132122,132124,132126],{"class":254,"line":1353},[252,132116,132117],{"class":2102},".absolute",[252,132119,79946],{"class":262},[252,132121,128992],{"class":311},[252,132123,51577],{"class":262},[252,132125,54971],{"class":311},[252,132127,129562],{"class":262},[252,132129,132130],{"class":254,"line":1359},[252,132131,132132],{"class":321},"\u002F* 固定定位 *\u002F\n",[252,132134,132135,132138,132140,132142,132144,132146],{"class":254,"line":1450},[252,132136,132137],{"class":2102},".fixed",[252,132139,79946],{"class":262},[252,132141,128992],{"class":311},[252,132143,51577],{"class":262},[252,132145,86371],{"class":311},[252,132147,129562],{"class":262},[252,132149,132150],{"class":254,"line":1456},[252,132151,132152],{"class":321},"\u002F* 粘性定位 *\u002F\n",[252,132154,132155,132158,132160,132162,132164,132167],{"class":254,"line":1468},[252,132156,132157],{"class":2102},".sticky",[252,132159,79946],{"class":262},[252,132161,128992],{"class":311},[252,132163,51577],{"class":262},[252,132165,132166],{"class":311},"sticky",[252,132168,129562],{"class":262},[207,132170,132171,132174],{"start":1756},[210,132172,132173],{},"一定要用好注释",[210,132175,132176],{},"浮动的盒子不会有外边距合并的问题",[5266,132178,131520],{},{"title":169,"searchDepth":170,"depth":170,"links":132180},[132181,132182],{"id":131557,"depth":170,"text":131558},{"id":131621,"depth":170,"text":131622,"children":132183},[132184,132185,132186,132187,132188,132189,132190],{"id":131625,"depth":1318,"text":131626},{"id":131731,"depth":1318,"text":131732},{"id":131767,"depth":1318,"text":131768},{"id":131788,"depth":1318,"text":131789},{"id":131823,"depth":1318,"text":131824},{"id":131856,"depth":1318,"text":131857},{"id":131931,"depth":1318,"text":131932},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131549,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132197,"title":132198,"body":132199,"description":178,"extension":179,"meta":133685,"navigation":181,"path":133686,"seo":133687,"stem":133688,"__hash__":133689},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132200,"toc":133677},[132201,132204,132208,132212,132223,132227,132244,132288,132321,132324,132341,132344,132347,132391,132395,132399,132402,132405,132409,132412,132423,132486,132527,132530,132545,132599,132607,132610,132621,132675,132701,132704,132717,132771,132803,132857,132880,132934,132937,132940,132947,133001,133022,133076,133079,133082,133167,133175,133232,133255,133259,133262,133280,133284,133303,133357,133395,133399,133402,133405,133427,133431,133439,133442,133447,133458,133461,133465,133479,133523,133526,133530,133533,133538,133564,133569,133646,133649,133653,133656,133659,133662,133665,133668,133671,133674],[10,132202,132198],{"id":132203},"_11-传统布局与定位体系",[14,132205,132207],{"id":132206},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[224,132209,132211],{"id":132210},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1270,132213,132214,132217,132220],{},[210,132215,132216],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[210,132218,132219],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[210,132221,132222],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[224,132224,132226],{"id":132225},"_1112-浮动","11.1.2 浮动",[1270,132228,132229,132232,132235,132238,132241],{},[210,132230,132231],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[210,132233,132234],{},"浮动可以改变元素标签默认的排列方式",[210,132236,132237],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[210,132239,132240],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[210,132242,132243],{},"在使用行内块转换时盒子之间是有空隙的",[244,132245,132246],{"className":126632,"code":131098,"language":126634,"meta":169,"style":169},[22,132247,132248,132254,132264,132268,132274,132284],{"__ignoreMap":169},[252,132249,132250,132252],{"class":254,"line":255},[252,132251,131105],{"class":2102},[252,132253,15712],{"class":262},[252,132255,132256,132258,132260,132262],{"class":254,"line":170},[252,132257,131112],{"class":311},[252,132259,51577],{"class":262},[252,132261,23875],{"class":311},[252,132263,1429],{"class":262},[252,132265,132266],{"class":254,"line":1318},[252,132267,1704],{"class":262},[252,132269,132270,132272],{"class":254,"line":1333},[252,132271,131127],{"class":2102},[252,132273,15712],{"class":262},[252,132275,132276,132278,132280,132282],{"class":254,"line":1339},[252,132277,131112],{"class":311},[252,132279,51577],{"class":262},[252,132281,72662],{"class":311},[252,132283,1429],{"class":262},[252,132285,132286],{"class":254,"line":1353},[252,132287,1704],{"class":262},[400,132289,132290,132298],{},[403,132291,132292],{},[406,132293,132294,132296],{},[409,132295,127096],{"align":23875},[409,132297,27629],{"align":23875},[447,132299,132300,132307,132314],{},[406,132301,132302,132304],{},[452,132303,54877],{"align":23875},[452,132305,132306],{"align":23875},"元素不浮动（默认值）",[406,132308,132309,132311],{},[452,132310,23875],{"align":23875},[452,132312,132313],{"align":23875},"元素向左浮动",[406,132315,132316,132318],{},[452,132317,72662],{"align":23875},[452,132319,132320],{"align":23875},"元素向右浮动",[19,132322,132323],{},"浮动重点：",[1270,132325,132326,132329,132332,132335,132338],{},[210,132327,132328],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[210,132330,132331],{},"浮动的元素会一行内显示并且元素顶部对齐",[210,132333,132334],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[210,132336,132337],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[210,132339,132340],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132342,132343],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132345,132346],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[244,132348,132349],{"className":126632,"code":131098,"language":126634,"meta":169,"style":169},[22,132350,132351,132357,132367,132371,132377,132387],{"__ignoreMap":169},[252,132352,132353,132355],{"class":254,"line":255},[252,132354,131105],{"class":2102},[252,132356,15712],{"class":262},[252,132358,132359,132361,132363,132365],{"class":254,"line":170},[252,132360,131112],{"class":311},[252,132362,51577],{"class":262},[252,132364,23875],{"class":311},[252,132366,1429],{"class":262},[252,132368,132369],{"class":254,"line":1318},[252,132370,1704],{"class":262},[252,132372,132373,132375],{"class":254,"line":1333},[252,132374,131127],{"class":2102},[252,132376,15712],{"class":262},[252,132378,132379,132381,132383,132385],{"class":254,"line":1339},[252,132380,131112],{"class":311},[252,132382,51577],{"class":262},[252,132384,72662],{"class":311},[252,132386,1429],{"class":262},[252,132388,132389],{"class":254,"line":1353},[252,132390,1704],{"class":262},[224,132392,132394],{"id":132393},"_1113-定位","11.1.3 定位",[22137,132396,132398],{"id":132397},"_11131-使用场景","11.1.3.1 使用场景",[19,132400,132401],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132403,132404],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22137,132406,132408],{"id":132407},"_11132-定位组成","11.1.3.2 定位组成",[19,132410,132411],{},"定位 = 定位模式 + 边偏移",[207,132413,132414],{},[210,132415,132416,132419,132420],{},[412,132417,132418],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[412,132421,132422],{},"定位模式",[244,132424,132426],{"className":126632,"code":132425,"language":126634,"meta":169,"style":169},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[22,132427,132428,132434,132448,132465,132482],{"__ignoreMap":169},[252,132429,132430,132432],{"class":254,"line":255},[252,132431,130480],{"class":2102},[252,132433,15712],{"class":262},[252,132435,132436,132439,132441,132443,132445],{"class":254,"line":170},[252,132437,132438],{"class":311},"  position",[252,132440,51577],{"class":262},[252,132442,54904],{"class":311},[252,132444,130495],{"class":262},[252,132446,132447],{"class":321},"\u002F* 定位模式 *\u002F\n",[252,132449,132450,132453,132455,132457,132459,132462],{"class":254,"line":1318},[252,132451,132452],{"class":311},"  top",[252,132454,51577],{"class":262},[252,132456,709],{"class":311},[252,132458,51632],{"class":258},[252,132460,132461],{"class":262},";           ",[252,132463,132464],{"class":321},"\u002F* 边偏移：上 *\u002F\n",[252,132466,132467,132470,132472,132474,132476,132479],{"class":254,"line":1333},[252,132468,132469],{"class":311},"  left",[252,132471,51577],{"class":262},[252,132473,963],{"class":311},[252,132475,51632],{"class":258},[252,132477,132478],{"class":262},";          ",[252,132480,132481],{"class":321},"\u002F* 边偏移：左 *\u002F\n",[252,132483,132484],{"class":254,"line":1339},[252,132485,1704],{"class":262},[400,132487,132488,132497],{},[403,132489,132490],{},[406,132491,132492,132494],{},[409,132493,415],{"align":23875},[409,132495,132496],{"align":23875},"语义",[447,132498,132499,132506,132513,132520],{},[406,132500,132501,132503],{},[452,132502,132085],{"align":23875},[452,132504,132505],{"align":23875},"静态定位",[406,132507,132508,132510],{},[452,132509,54904],{"align":23875},[452,132511,132512],{"align":23875},"相对定位",[406,132514,132515,132517],{},[452,132516,54971],{"align":23875},[452,132518,132519],{"align":23875},"绝对定位",[406,132521,132522,132524],{},[452,132523,86371],{"align":23875},[452,132525,132526],{"align":23875},"固定定位",[19,132528,132529],{},"（1）静态定位：",[1270,132531,132532,132543],{},[210,132533,132534,132535,132538,132539,132542],{},"静态定位是元素的 ",[412,132536,132537],{},"默认定位方式"," ， ",[412,132540,132541],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[210,132544,5321],{},[244,132546,132547],{"className":126632,"code":132425,"language":126634,"meta":169,"style":169},[22,132548,132549,132555,132567,132581,132595],{"__ignoreMap":169},[252,132550,132551,132553],{"class":254,"line":255},[252,132552,130480],{"class":2102},[252,132554,15712],{"class":262},[252,132556,132557,132559,132561,132563,132565],{"class":254,"line":170},[252,132558,132438],{"class":311},[252,132560,51577],{"class":262},[252,132562,54904],{"class":311},[252,132564,130495],{"class":262},[252,132566,132447],{"class":321},[252,132568,132569,132571,132573,132575,132577,132579],{"class":254,"line":1318},[252,132570,132452],{"class":311},[252,132572,51577],{"class":262},[252,132574,709],{"class":311},[252,132576,51632],{"class":258},[252,132578,132461],{"class":262},[252,132580,132464],{"class":321},[252,132582,132583,132585,132587,132589,132591,132593],{"class":254,"line":1333},[252,132584,132469],{"class":311},[252,132586,51577],{"class":262},[252,132588,963],{"class":311},[252,132590,51632],{"class":258},[252,132592,132478],{"class":262},[252,132594,132481],{"class":321},[252,132596,132597],{"class":254,"line":1339},[252,132598,1704],{"class":262},[1270,132600,132601,132604],{},[210,132602,132603],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[210,132605,132606],{},"静态定位在布局时我们几乎不用的",[19,132608,132609],{},"（2）相对定位",[1270,132611,132612,132619],{},[210,132613,132614,132615,132618],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[412,132616,132617],{},"原来的位置"," 来说的（自恋型）",[210,132620,5321],{},[244,132622,132623],{"className":126632,"code":132425,"language":126634,"meta":169,"style":169},[22,132624,132625,132631,132643,132657,132671],{"__ignoreMap":169},[252,132626,132627,132629],{"class":254,"line":255},[252,132628,130480],{"class":2102},[252,132630,15712],{"class":262},[252,132632,132633,132635,132637,132639,132641],{"class":254,"line":170},[252,132634,132438],{"class":311},[252,132636,51577],{"class":262},[252,132638,54904],{"class":311},[252,132640,130495],{"class":262},[252,132642,132447],{"class":321},[252,132644,132645,132647,132649,132651,132653,132655],{"class":254,"line":1318},[252,132646,132452],{"class":311},[252,132648,51577],{"class":262},[252,132650,709],{"class":311},[252,132652,51632],{"class":258},[252,132654,132461],{"class":262},[252,132656,132464],{"class":321},[252,132658,132659,132661,132663,132665,132667,132669],{"class":254,"line":1333},[252,132660,132469],{"class":311},[252,132662,51577],{"class":262},[252,132664,963],{"class":311},[252,132666,51632],{"class":258},[252,132668,132478],{"class":262},[252,132670,132481],{"class":321},[252,132672,132673],{"class":254,"line":1339},[252,132674,1704],{"class":262},[1270,132676,132677],{},[210,132678,132679,132680,132682,132683,132685,132686,132689,132690,132693,132694,132696,132697,132700],{},"相对定位的特点：",[53856,132681],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53856,132684],{},"  ② ",[412,132687,132688],{},"原来"," 在标准流的 ",[412,132691,132692],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53856,132695],{},"  ③因此， ",[412,132698,132699],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,132702,132703],{},"（3）绝对定位",[1270,132705,132706,132715],{},[210,132707,132708,132710,132711,132714],{},[412,132709,132519],{}," 是元素在移动位置的时候，是相对于它 ",[412,132712,132713],{},"祖先元素"," 来说的（拼爹型）",[210,132716,5321],{},[244,132718,132719],{"className":126632,"code":132425,"language":126634,"meta":169,"style":169},[22,132720,132721,132727,132739,132753,132767],{"__ignoreMap":169},[252,132722,132723,132725],{"class":254,"line":255},[252,132724,130480],{"class":2102},[252,132726,15712],{"class":262},[252,132728,132729,132731,132733,132735,132737],{"class":254,"line":170},[252,132730,132438],{"class":311},[252,132732,51577],{"class":262},[252,132734,54904],{"class":311},[252,132736,130495],{"class":262},[252,132738,132447],{"class":321},[252,132740,132741,132743,132745,132747,132749,132751],{"class":254,"line":1318},[252,132742,132452],{"class":311},[252,132744,51577],{"class":262},[252,132746,709],{"class":311},[252,132748,51632],{"class":258},[252,132750,132461],{"class":262},[252,132752,132464],{"class":321},[252,132754,132755,132757,132759,132761,132763,132765],{"class":254,"line":1333},[252,132756,132469],{"class":311},[252,132758,51577],{"class":262},[252,132760,963],{"class":311},[252,132762,51632],{"class":258},[252,132764,132478],{"class":262},[252,132766,132481],{"class":321},[252,132768,132769],{"class":254,"line":1339},[252,132770,1704],{"class":262},[1270,132772,132773,132788,132797,132800],{},[210,132774,132775,132776,132778,132779,132781,132782,132784,132785,132787],{},"绝对定位的特点：",[53856,132777],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53856,132780],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53856,132783],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53856,132786],{},"  (4)固定定位",[210,132789,132790,132792,132793,132796],{},[412,132791,132526],{}," 是元素 ",[412,132794,132795],{},"固定于浏览器可视区的位置"," 。（认死理型）",[210,132798,132799],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[210,132801,132802],{},"语法:",[244,132804,132805],{"className":126632,"code":132425,"language":126634,"meta":169,"style":169},[22,132806,132807,132813,132825,132839,132853],{"__ignoreMap":169},[252,132808,132809,132811],{"class":254,"line":255},[252,132810,130480],{"class":2102},[252,132812,15712],{"class":262},[252,132814,132815,132817,132819,132821,132823],{"class":254,"line":170},[252,132816,132438],{"class":311},[252,132818,51577],{"class":262},[252,132820,54904],{"class":311},[252,132822,130495],{"class":262},[252,132824,132447],{"class":321},[252,132826,132827,132829,132831,132833,132835,132837],{"class":254,"line":1318},[252,132828,132452],{"class":311},[252,132830,51577],{"class":262},[252,132832,709],{"class":311},[252,132834,51632],{"class":258},[252,132836,132461],{"class":262},[252,132838,132464],{"class":321},[252,132840,132841,132843,132845,132847,132849,132851],{"class":254,"line":1333},[252,132842,132469],{"class":311},[252,132844,51577],{"class":262},[252,132846,963],{"class":311},[252,132848,51632],{"class":258},[252,132850,132478],{"class":262},[252,132852,132481],{"class":321},[252,132854,132855],{"class":254,"line":1339},[252,132856,1704],{"class":262},[1270,132858,132859,132868],{},[210,132860,132861,132862,132864,132865,132867],{},"特点:",[53856,132863],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53856,132866],{},"  ②固定定位不再占有原先的位置,完全脱标",[210,132869,132870,132871,132873,132874,132876,132877,132879],{},"固定在版心位置的方法:",[53856,132872],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53856,132875],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53856,132878],{},"  实例：",[244,132881,132882],{"className":126632,"code":132425,"language":126634,"meta":169,"style":169},[22,132883,132884,132890,132902,132916,132930],{"__ignoreMap":169},[252,132885,132886,132888],{"class":254,"line":255},[252,132887,130480],{"class":2102},[252,132889,15712],{"class":262},[252,132891,132892,132894,132896,132898,132900],{"class":254,"line":170},[252,132893,132438],{"class":311},[252,132895,51577],{"class":262},[252,132897,54904],{"class":311},[252,132899,130495],{"class":262},[252,132901,132447],{"class":321},[252,132903,132904,132906,132908,132910,132912,132914],{"class":254,"line":1318},[252,132905,132452],{"class":311},[252,132907,51577],{"class":262},[252,132909,709],{"class":311},[252,132911,51632],{"class":258},[252,132913,132461],{"class":262},[252,132915,132464],{"class":321},[252,132917,132918,132920,132922,132924,132926,132928],{"class":254,"line":1333},[252,132919,132469],{"class":311},[252,132921,51577],{"class":262},[252,132923,963],{"class":311},[252,132925,51632],{"class":258},[252,132927,132478],{"class":262},[252,132929,132481],{"class":321},[252,132931,132932],{"class":254,"line":1339},[252,132933,1704],{"class":262},[1601,132935],{"style":126488,"src":132936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,132938,132939],{},"(5)粘性定位",[1270,132941,132942,132945],{},[210,132943,132944],{},"粘性定位可以被认为是相对定位和固定定位的混合",[210,132946,5321],{},[244,132948,132949],{"className":126632,"code":132425,"language":126634,"meta":169,"style":169},[22,132950,132951,132957,132969,132983,132997],{"__ignoreMap":169},[252,132952,132953,132955],{"class":254,"line":255},[252,132954,130480],{"class":2102},[252,132956,15712],{"class":262},[252,132958,132959,132961,132963,132965,132967],{"class":254,"line":170},[252,132960,132438],{"class":311},[252,132962,51577],{"class":262},[252,132964,54904],{"class":311},[252,132966,130495],{"class":262},[252,132968,132447],{"class":321},[252,132970,132971,132973,132975,132977,132979,132981],{"class":254,"line":1318},[252,132972,132452],{"class":311},[252,132974,51577],{"class":262},[252,132976,709],{"class":311},[252,132978,51632],{"class":258},[252,132980,132461],{"class":262},[252,132982,132464],{"class":321},[252,132984,132985,132987,132989,132991,132993,132995],{"class":254,"line":1333},[252,132986,132469],{"class":311},[252,132988,51577],{"class":262},[252,132990,963],{"class":311},[252,132992,51632],{"class":258},[252,132994,132478],{"class":262},[252,132996,132481],{"class":321},[252,132998,132999],{"class":254,"line":1339},[252,133000,1704],{"class":262},[1270,133002,133003],{},[210,133004,133005,133006,133008,133009,133011,133012,133014,133015,133018,133019,133021],{},"粘性定位的特点：",[53856,133007],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53856,133010],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53856,133013],{},"  ③必须添加 top 、left、right、bottom ",[412,133016,133017],{},"其中一个"," 才有效",[53856,133020],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[244,133023,133024],{"className":126632,"code":132425,"language":126634,"meta":169,"style":169},[22,133025,133026,133032,133044,133058,133072],{"__ignoreMap":169},[252,133027,133028,133030],{"class":254,"line":255},[252,133029,130480],{"class":2102},[252,133031,15712],{"class":262},[252,133033,133034,133036,133038,133040,133042],{"class":254,"line":170},[252,133035,132438],{"class":311},[252,133037,51577],{"class":262},[252,133039,54904],{"class":311},[252,133041,130495],{"class":262},[252,133043,132447],{"class":321},[252,133045,133046,133048,133050,133052,133054,133056],{"class":254,"line":1318},[252,133047,132452],{"class":311},[252,133049,51577],{"class":262},[252,133051,709],{"class":311},[252,133053,51632],{"class":258},[252,133055,132461],{"class":262},[252,133057,132464],{"class":321},[252,133059,133060,133062,133064,133066,133068,133070],{"class":254,"line":1333},[252,133061,132469],{"class":311},[252,133063,51577],{"class":262},[252,133065,963],{"class":311},[252,133067,51632],{"class":258},[252,133069,132478],{"class":262},[252,133071,132481],{"class":321},[252,133073,133074],{"class":254,"line":1339},[252,133075,1704],{"class":262},[1601,133077],{"style":126488,"src":133078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133080,133081],{},"(6)总结",[400,133083,133084,133099],{},[403,133085,133086],{},[406,133087,133088,133090,133093,133096],{},[409,133089,132422],{"align":23875},[409,133091,133092],{"align":23875},"是否脱标",[409,133094,133095],{"align":23875},"移动位置",[409,133097,133098],{"align":23875},"是否常用",[447,133100,133101,133114,133128,133142,133155],{},[406,133102,133103,133106,133108,133111],{},[452,133104,133105],{"align":23875},"Static 静态定位",[452,133107,104814],{"align":23875},[452,133109,133110],{"align":23875},"不能使用边偏移",[452,133112,133113],{"align":23875},"很少",[406,133115,133116,133119,133122,133125],{},[452,133117,133118],{"align":23875},"Relative 相对定位",[452,133120,133121],{"align":23875},"否(占有位置)",[452,133123,133124],{"align":23875},"相对于自身位置移动",[452,133126,133127],{"align":23875},"基本单独使用",[406,133129,133130,133133,133136,133139],{},[452,133131,133132],{"align":23875},"Absolute 绝对定位",[452,133134,133135],{"align":23875},"是(不占有位置)",[452,133137,133138],{"align":23875},"带有定位的父级",[452,133140,133141],{"align":23875},"要和定位父级元素搭配使用",[406,133143,133144,133147,133149,133152],{},[452,133145,133146],{"align":23875},"Fixed 固定定位",[452,133148,133135],{"align":23875},[452,133150,133151],{"align":23875},"浏览器可视区",[452,133153,133154],{"align":23875},"单独使用,不需要父级",[406,133156,133157,133160,133162,133164],{},[452,133158,133159],{"align":23875},"Sticky 粘性定位",[452,133161,133121],{"align":23875},[452,133163,133151],{"align":23875},[452,133165,133166],{"align":23875},"当前阶段少",[207,133168,133169],{"start":170},[210,133170,133171,133174],{},[412,133172,133173],{},"边偏移"," 则决定了该元素的最终位置",[400,133176,133177,133188],{},[403,133178,133179],{},[406,133180,133181,133184,133186],{},[409,133182,133183],{"align":23875},"边偏移属性",[409,133185,27632],{"align":23875},[409,133187,27629],{"align":23875},[447,133189,133190,133201,133212,133222],{},[406,133191,133192,133195,133198],{},[452,133193,133194],{"align":23875},"top",[452,133196,133197],{"align":23875},"top: 80px;",[452,133199,133200],{"align":23875},"顶端偏移量，定义元素相对于父元素上边线的距离",[406,133202,133203,133206,133209],{},[452,133204,133205],{"align":23875},"bottom",[452,133207,133208],{"align":23875},"bottom: 80px ;",[452,133210,133211],{"align":23875},"底部偏移量，定义元素相对于其父元素下边线的距离",[406,133213,133214,133216,133219],{},[452,133215,23875],{"align":23875},[452,133217,133218],{"align":23875},"left: 80px ;",[452,133220,133221],{"align":23875},"左侧偏移量，定义元素相对于其父元素左边线的距离",[406,133223,133224,133226,133229],{},[452,133225,72662],{"align":23875},[452,133227,133228],{"align":23875},"right: 80px ;",[452,133230,133231],{"align":23875},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1270,133233,133234],{},[210,133235,9165,133236,133238,133239,133241,133242,133244,133245,133248,133249,133251,133252,133254],{},[53856,133237],{},"  ① ",[412,133240,133173],{}," 需要和 ",[412,133243,132422],{}," 联合使用， ",[412,133246,133247],{},"单独使用无效"," ；",[53856,133250],{},"  ②top和bottom不要同时使用",[53856,133253],{},"  ③left和right不要同时使用",[22137,133256,133258],{"id":133257},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133260,133261],{},"子级是绝对定位的话，父级要用相对定位",[1270,133263,133264,133267,133270,133273],{},[210,133265,133266],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[210,133268,133269],{},"父盒子需要加定位限制子盒子在父盒子内显示",[210,133271,133272],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[210,133274,133275,133276,133279],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[412,133277,133278],{},"子绝父绝"," 也会遇到",[22137,133281,133283],{"id":133282},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1270,133285,133286,133301],{},[210,133287,133288,133289,133292,133293,133296,133297,133300],{},"在使用 ",[412,133290,133291],{},"定位"," 布局时，可能会 ",[412,133294,133295],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[412,133298,133299],{},"z-index"," 来控制盒子的前后次序 (z轴)",[210,133302,5321],{},[244,133304,133305],{"className":126632,"code":132425,"language":126634,"meta":169,"style":169},[22,133306,133307,133313,133325,133339,133353],{"__ignoreMap":169},[252,133308,133309,133311],{"class":254,"line":255},[252,133310,130480],{"class":2102},[252,133312,15712],{"class":262},[252,133314,133315,133317,133319,133321,133323],{"class":254,"line":170},[252,133316,132438],{"class":311},[252,133318,51577],{"class":262},[252,133320,54904],{"class":311},[252,133322,130495],{"class":262},[252,133324,132447],{"class":321},[252,133326,133327,133329,133331,133333,133335,133337],{"class":254,"line":1318},[252,133328,132452],{"class":311},[252,133330,51577],{"class":262},[252,133332,709],{"class":311},[252,133334,51632],{"class":258},[252,133336,132461],{"class":262},[252,133338,132464],{"class":321},[252,133340,133341,133343,133345,133347,133349,133351],{"class":254,"line":1333},[252,133342,132469],{"class":311},[252,133344,51577],{"class":262},[252,133346,963],{"class":311},[252,133348,51632],{"class":258},[252,133350,132478],{"class":262},[252,133352,132481],{"class":321},[252,133354,133355],{"class":254,"line":1339},[252,133356,1704],{"class":262},[1270,133358,133359],{},[210,133360,133361,133362,133238,133364,133366,133367,127795,133370,84,133373,133375,133376,133378,133379,133382,133383,133248,133386,133388,133389,133392,133394],{},"z-index的特性",[53856,133363],{},[412,133365,127096],{}," ： ",[412,133368,133369],{},"正整数",[412,133371,133372],{},"负整数",[412,133374,454],{}," ，默认值是 0，数值越大，盒子越靠上；",[53856,133377],{},"  ②如果 ",[412,133380,133381],{},"属性值相同"," ，则按照书写顺序， ",[412,133384,133385],{},"后来居上",[53856,133387],{},"  ③数字后面 ",[412,133390,133391],{},"不能加单位",[53856,133393],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22137,133396,133398],{"id":133397},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133400,133401],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133403,133404],{},"方法:",[1270,133406,133407,133417],{},[210,133408,133409,133410,133413,133414],{},"left: 50%; 让 ",[412,133411,133412],{},"盒子的左侧"," 移动到 ",[412,133415,133416],{},"父级元素的水平中心位置",[210,133418,133419,133420,133423,133424],{},"margin-left: -100px; 让盒子 ",[412,133421,133422],{},"向左"," 移动 ",[412,133425,133426],{},"自身宽度的一半",[22137,133428,133430],{"id":133429},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[207,133432,133433,133436],{},[210,133434,133435],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[210,133437,133438],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133440,133441],{},"也就是说绝对定位和固定定位和浮动类似",[207,133443,133444],{"start":1318},[210,133445,133446],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1270,133448,133449,133452,133455],{},[210,133450,133451],{},"可以用inline-block 转换为行内块",[210,133453,133454],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[210,133456,133457],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133459,133460],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22137,133462,133464],{"id":133463},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[207,133466,133467,133470,133473,133476],{},[210,133468,133469],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[210,133471,133472],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[210,133474,133475],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[210,133477,133478],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[244,133480,133481],{"className":126632,"code":131098,"language":126634,"meta":169,"style":169},[22,133482,133483,133489,133499,133503,133509,133519],{"__ignoreMap":169},[252,133484,133485,133487],{"class":254,"line":255},[252,133486,131105],{"class":2102},[252,133488,15712],{"class":262},[252,133490,133491,133493,133495,133497],{"class":254,"line":170},[252,133492,131112],{"class":311},[252,133494,51577],{"class":262},[252,133496,23875],{"class":311},[252,133498,1429],{"class":262},[252,133500,133501],{"class":254,"line":1318},[252,133502,1704],{"class":262},[252,133504,133505,133507],{"class":254,"line":1333},[252,133506,131127],{"class":2102},[252,133508,15712],{"class":262},[252,133510,133511,133513,133515,133517],{"class":254,"line":1339},[252,133512,131112],{"class":311},[252,133514,51577],{"class":262},[252,133516,72662],{"class":311},[252,133518,1429],{"class":262},[252,133520,133521],{"class":254,"line":1353},[252,133522,1704],{"class":262},[1601,133524],{"style":126488,"src":133525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22137,133527,133529],{"id":133528},"_11138-轮播图","11.1.3.8 轮播图",[1601,133531],{"style":126488,"src":133532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[207,133534,133535],{},[210,133536,133537],{},"制作顺序:",[1270,133539,133540,133543,133546,133555],{},[210,133541,133542],{},"大盒子我们类名为： tb-promo 淘宝广告",[210,133544,133545],{},"里面先放一张图片",[210,133547,133548,133549,133551,133552,133554],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53856,133550],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53856,133553],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[210,133556,133557,133558,133560,133561,133563],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53856,133559],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53856,133562],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[207,133565,133566],{"start":170},[210,133567,133568],{},"代码模块",[244,133570,133572],{"className":126632,"code":133571,"language":126634,"meta":169,"style":169},"\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",[22,133573,133574,133579,133586,133596,133606,133616,133620,133625,133632,133642],{"__ignoreMap":169},[252,133575,133576],{"class":254,"line":255},[252,133577,133578],{"class":321},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[252,133580,133581,133584],{"class":254,"line":170},[252,133582,133583],{"class":2102},".son",[252,133585,15712],{"class":262},[252,133587,133588,133590,133592,133594],{"class":254,"line":1318},[252,133589,132438],{"class":311},[252,133591,51577],{"class":262},[252,133593,54971],{"class":311},[252,133595,1429],{"class":262},[252,133597,133598,133600,133602,133604],{"class":254,"line":1333},[252,133599,132452],{"class":311},[252,133601,51577],{"class":262},[252,133603,454],{"class":311},[252,133605,1429],{"class":262},[252,133607,133608,133610,133612,133614],{"class":254,"line":1339},[252,133609,132469],{"class":311},[252,133611,51577],{"class":262},[252,133613,454],{"class":311},[252,133615,1429],{"class":262},[252,133617,133618],{"class":254,"line":1353},[252,133619,1704],{"class":262},[252,133621,133622],{"class":254,"line":1359},[252,133623,133624],{"class":321},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[252,133626,133627,133630],{"class":254,"line":1450},[252,133628,133629],{"class":2102},".father",[252,133631,15712],{"class":262},[252,133633,133634,133636,133638,133640],{"class":254,"line":1456},[252,133635,132438],{"class":311},[252,133637,51577],{"class":262},[252,133639,54904],{"class":311},[252,133641,1429],{"class":262},[252,133643,133644],{"class":254,"line":1468},[252,133645,1704],{"class":262},[19,133647,133648],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[224,133650,133652],{"id":133651},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1601,133654],{"style":126488,"src":133655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133657,133658],{},"✨ 黄金口诀：",[19,133660,133661],{},"\"TOP正下负上，LEFT正右负左\"",[19,133663,133664],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133666,133667],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133669,133670],{},"✨ 简单记：",[19,133672,133673],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5266,133675,133676],{},"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":169,"searchDepth":170,"depth":170,"links":133678},[133679],{"id":132206,"depth":170,"text":132207,"children":133680},[133681,133682,133683,133684],{"id":132210,"depth":1318,"text":132211},{"id":132225,"depth":1318,"text":132226},{"id":132393,"depth":1318,"text":132394},{"id":133651,"depth":1318,"text":133652},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132198,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133691,"title":133692,"body":133693,"description":178,"extension":179,"meta":135116,"navigation":181,"path":135117,"seo":135118,"stem":135119,"__hash__":135120},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133694,"toc":135095},[133695,133698,133702,133710,133714,133719,133727,133739,133743,133748,133756,133767,133771,133776,133817,133825,133829,133832,133835,133838,133932,133935,134029,134032,134126,134129,134132,134167,134170,134173,134203,134206,134209,134212,134215,134218,134221,134224,134294,134297,134301,134305,134346,134350,134356,134359,134362,134366,134369,134372,134375,134456,134459,134462,134466,134470,134473,134476,134479,134482,134485,134491,134500,134504,134523,134527,134537,134540,134543,134546,134549,134552,134555,134558,134561,134570,134574,134583,134586,134591,134644,134649,134815,134818,134821,134826,134829,134832,134835,134838,134843,134991,134994,134997,135002,135005,135010,135044,135047,135050,135054,135057,135064,135067,135070,135073,135076,135079,135082,135085,135089,135092],[10,133696,133692],{"id":133697},"_12-显示隐藏与图形资源",[14,133699,133701],{"id":133700},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1270,133703,133704,133707],{},[210,133705,133706],{},"目的:让一个元素在页面中消失或者显示出来",[210,133708,133709],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[224,133711,133713],{"id":133712},"_1211-display-显示","12.1.1 display 显示",[207,133715,133716],{},[210,133717,133718],{},"display 设置或检索对象是否及如何显示",[1270,133720,133721,133724],{},[210,133722,133723],{},"display: none;隐藏对象",[210,133725,133726],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[207,133728,133729,133736],{"start":170},[210,133730,133731,133732,133735],{},"特点： display 隐藏元素后， ",[412,133733,133734],{},"不再占"," 有原来的位置",[210,133737,133738],{},"在js中使用非常的广泛",[224,133740,133742],{"id":133741},"_1212-visibility可见性","12.1.2 visibility可见性",[207,133744,133745],{},[210,133746,133747],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1270,133749,133750,133753],{},[210,133751,133752],{},"visibility： visible；元素可见",[210,133754,133755],{},"visibility：hidden；元素隐藏",[207,133757,133758,133761,133764],{"start":170},[210,133759,133760],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[210,133762,133763],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[210,133765,133766],{},"隐藏后继续占有原有位置",[224,133768,133770],{"id":133769},"_1213-overflow溢出","12.1.3 overflow溢出",[1270,133772,133773],{},[210,133774,133775],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[400,133777,133778,133786],{},[403,133779,133780],{},[406,133781,133782,133784],{},[409,133783,127096],{"align":23875},[409,133785,27629],{"align":23875},[447,133787,133788,133796,133803,133810],{},[406,133789,133790,133793],{},[452,133791,133792],{"align":23875},"visible",[452,133794,133795],{"align":23875},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[406,133797,133798,133800],{},[452,133799,61854],{"align":23875},[452,133801,133802],{"align":23875},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[406,133804,133805,133807],{},[452,133806,129052],{"align":23875},[452,133808,133809],{"align":23875},"不管超出内容否，总是显示滚动条",[406,133811,133812,133814],{},[452,133813,72803],{"align":23875},[452,133815,133816],{"align":23875},"超出自动显示滚动条，不超出不显示滚动条",[1270,133818,133819,133822],{},[210,133820,133821],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[210,133823,133824],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[224,133826,133828],{"id":133827},"_1214-案例收获","12.1.4 案例收获",[1601,133830],{"style":126488,"src":133831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,133833,133834],{},"问题：没做出来动态效果，使用hover没实现",[19,133836,133837],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[244,133839,133840],{"className":126632,"code":132064,"language":126634,"meta":169,"style":169},[22,133841,133842,133846,133860,133864,133878,133882,133896,133900,133914,133918],{"__ignoreMap":169},[252,133843,133844],{"class":254,"line":255},[252,133845,132071],{"class":321},[252,133847,133848,133850,133852,133854,133856,133858],{"class":254,"line":170},[252,133849,132076],{"class":2102},[252,133851,79946],{"class":262},[252,133853,128992],{"class":311},[252,133855,51577],{"class":262},[252,133857,132085],{"class":311},[252,133859,129562],{"class":262},[252,133861,133862],{"class":254,"line":1318},[252,133863,132092],{"class":321},[252,133865,133866,133868,133870,133872,133874,133876],{"class":254,"line":1333},[252,133867,132097],{"class":2102},[252,133869,79946],{"class":262},[252,133871,128992],{"class":311},[252,133873,51577],{"class":262},[252,133875,54904],{"class":311},[252,133877,129562],{"class":262},[252,133879,133880],{"class":254,"line":1339},[252,133881,132112],{"class":321},[252,133883,133884,133886,133888,133890,133892,133894],{"class":254,"line":1353},[252,133885,132117],{"class":2102},[252,133887,79946],{"class":262},[252,133889,128992],{"class":311},[252,133891,51577],{"class":262},[252,133893,54971],{"class":311},[252,133895,129562],{"class":262},[252,133897,133898],{"class":254,"line":1359},[252,133899,132132],{"class":321},[252,133901,133902,133904,133906,133908,133910,133912],{"class":254,"line":1450},[252,133903,132137],{"class":2102},[252,133905,79946],{"class":262},[252,133907,128992],{"class":311},[252,133909,51577],{"class":262},[252,133911,86371],{"class":311},[252,133913,129562],{"class":262},[252,133915,133916],{"class":254,"line":1456},[252,133917,132152],{"class":321},[252,133919,133920,133922,133924,133926,133928,133930],{"class":254,"line":1468},[252,133921,132157],{"class":2102},[252,133923,79946],{"class":262},[252,133925,128992],{"class":311},[252,133927,51577],{"class":262},[252,133929,132166],{"class":311},[252,133931,129562],{"class":262},[19,133933,133934],{},"完整代码：",[244,133936,133937],{"className":126632,"code":132064,"language":126634,"meta":169,"style":169},[22,133938,133939,133943,133957,133961,133975,133979,133993,133997,134011,134015],{"__ignoreMap":169},[252,133940,133941],{"class":254,"line":255},[252,133942,132071],{"class":321},[252,133944,133945,133947,133949,133951,133953,133955],{"class":254,"line":170},[252,133946,132076],{"class":2102},[252,133948,79946],{"class":262},[252,133950,128992],{"class":311},[252,133952,51577],{"class":262},[252,133954,132085],{"class":311},[252,133956,129562],{"class":262},[252,133958,133959],{"class":254,"line":1318},[252,133960,132092],{"class":321},[252,133962,133963,133965,133967,133969,133971,133973],{"class":254,"line":1333},[252,133964,132097],{"class":2102},[252,133966,79946],{"class":262},[252,133968,128992],{"class":311},[252,133970,51577],{"class":262},[252,133972,54904],{"class":311},[252,133974,129562],{"class":262},[252,133976,133977],{"class":254,"line":1339},[252,133978,132112],{"class":321},[252,133980,133981,133983,133985,133987,133989,133991],{"class":254,"line":1353},[252,133982,132117],{"class":2102},[252,133984,79946],{"class":262},[252,133986,128992],{"class":311},[252,133988,51577],{"class":262},[252,133990,54971],{"class":311},[252,133992,129562],{"class":262},[252,133994,133995],{"class":254,"line":1359},[252,133996,132132],{"class":321},[252,133998,133999,134001,134003,134005,134007,134009],{"class":254,"line":1450},[252,134000,132137],{"class":2102},[252,134002,79946],{"class":262},[252,134004,128992],{"class":311},[252,134006,51577],{"class":262},[252,134008,86371],{"class":311},[252,134010,129562],{"class":262},[252,134012,134013],{"class":254,"line":1456},[252,134014,132152],{"class":321},[252,134016,134017,134019,134021,134023,134025,134027],{"class":254,"line":1468},[252,134018,132157],{"class":2102},[252,134020,79946],{"class":262},[252,134022,128992],{"class":311},[252,134024,51577],{"class":262},[252,134026,132166],{"class":311},[252,134028,129562],{"class":262},[19,134030,134031],{},"分布思路重点详解：",[244,134033,134034],{"className":126632,"code":132064,"language":126634,"meta":169,"style":169},[22,134035,134036,134040,134054,134058,134072,134076,134090,134094,134108,134112],{"__ignoreMap":169},[252,134037,134038],{"class":254,"line":255},[252,134039,132071],{"class":321},[252,134041,134042,134044,134046,134048,134050,134052],{"class":254,"line":170},[252,134043,132076],{"class":2102},[252,134045,79946],{"class":262},[252,134047,128992],{"class":311},[252,134049,51577],{"class":262},[252,134051,132085],{"class":311},[252,134053,129562],{"class":262},[252,134055,134056],{"class":254,"line":1318},[252,134057,132092],{"class":321},[252,134059,134060,134062,134064,134066,134068,134070],{"class":254,"line":1333},[252,134061,132097],{"class":2102},[252,134063,79946],{"class":262},[252,134065,128992],{"class":311},[252,134067,51577],{"class":262},[252,134069,54904],{"class":311},[252,134071,129562],{"class":262},[252,134073,134074],{"class":254,"line":1339},[252,134075,132112],{"class":321},[252,134077,134078,134080,134082,134084,134086,134088],{"class":254,"line":1353},[252,134079,132117],{"class":2102},[252,134081,79946],{"class":262},[252,134083,128992],{"class":311},[252,134085,51577],{"class":262},[252,134087,54971],{"class":311},[252,134089,129562],{"class":262},[252,134091,134092],{"class":254,"line":1359},[252,134093,132132],{"class":321},[252,134095,134096,134098,134100,134102,134104,134106],{"class":254,"line":1450},[252,134097,132137],{"class":2102},[252,134099,79946],{"class":262},[252,134101,128992],{"class":311},[252,134103,51577],{"class":262},[252,134105,86371],{"class":311},[252,134107,129562],{"class":262},[252,134109,134110],{"class":254,"line":1456},[252,134111,132152],{"class":321},[252,134113,134114,134116,134118,134120,134122,134124],{"class":254,"line":1468},[252,134115,132157],{"class":2102},[252,134117,79946],{"class":262},[252,134119,128992],{"class":311},[252,134121,51577],{"class":262},[252,134123,132166],{"class":311},[252,134125,129562],{"class":262},[1601,134127],{"style":126488,"src":134128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134130,134131],{},"图片太大，盒子太小，此时需要修改图片的大小",[244,134133,134135],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[22,134136,134137],{"__ignoreMap":169},[252,134138,134139,134141,134143,134145,134147,134150,134152,134154,134157,134160,134162,134165],{"class":254,"line":255},[252,134140,1173],{"class":262},[252,134142,1601],{"class":51440},[252,134144,55379],{"class":2102},[252,134146,308],{"class":262},[252,134148,134149],{"class":367},"\"images\u002Fpic.jpg\"",[252,134151,55387],{"class":2102},[252,134153,308],{"class":262},[252,134155,134156],{"class":367},"\"描述文字\"",[252,134158,134159],{"class":2102}," title",[252,134161,308],{"class":262},[252,134163,134164],{"class":367},"\"悬停提示\"",[252,134166,51447],{"class":262},[1601,134168],{"style":126488,"src":134169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134171,134172],{},"制造遮罩层",[244,134174,134175],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,134176,134177],{"__ignoreMap":169},[252,134178,134179,134181,134183,134185,134187,134189,134191,134193,134195,134197,134199,134201],{"class":254,"line":255},[252,134180,1173],{"class":262},[252,134182,1601],{"class":51440},[252,134184,55379],{"class":2102},[252,134186,308],{"class":262},[252,134188,134149],{"class":367},[252,134190,55387],{"class":2102},[252,134192,308],{"class":262},[252,134194,134156],{"class":367},[252,134196,134159],{"class":2102},[252,134198,308],{"class":262},[252,134200,134164],{"class":367},[252,134202,51447],{"class":262},[19,134204,134205],{},"此时是这样的为标准流",[1601,134207],{"style":126488,"src":134208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134210,134211],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134213,134214],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134216,134217],{},"让他在中间，用center(background-position)",[19,134219,134220],{},"将需要变的尽可能放到一个盒子中",[19,134222,134223],{},"放大盒子上内部盒子发生变化",[244,134225,134227],{"className":126632,"code":134226,"language":126634,"meta":169,"style":169},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[22,134228,134229,134235,134245,134249,134256,134266,134278,134290],{"__ignoreMap":169},[252,134230,134231,134233],{"class":254,"line":255},[252,134232,127699],{"class":2102},[252,134234,15712],{"class":262},[252,134236,134237,134239,134241,134243],{"class":254,"line":170},[252,134238,132438],{"class":311},[252,134240,51577],{"class":262},[252,134242,54904],{"class":311},[252,134244,1429],{"class":262},[252,134246,134247],{"class":254,"line":1318},[252,134248,1704],{"class":262},[252,134250,134251,134254],{"class":254,"line":1333},[252,134252,134253],{"class":2102},".child",[252,134255,15712],{"class":262},[252,134257,134258,134260,134262,134264],{"class":254,"line":1339},[252,134259,132438],{"class":311},[252,134261,51577],{"class":262},[252,134263,54971],{"class":311},[252,134265,1429],{"class":262},[252,134267,134268,134270,134272,134274,134276],{"class":254,"line":1353},[252,134269,132452],{"class":311},[252,134271,51577],{"class":262},[252,134273,919],{"class":311},[252,134275,591],{"class":258},[252,134277,1429],{"class":262},[252,134279,134280,134282,134284,134286,134288],{"class":254,"line":1359},[252,134281,132469],{"class":311},[252,134283,51577],{"class":262},[252,134285,919],{"class":311},[252,134287,591],{"class":258},[252,134289,1429],{"class":262},[252,134291,134292],{"class":254,"line":1450},[252,134293,1704],{"class":262},[19,134295,134296],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134298,134300],{"id":134299},"_122-精灵图","12.2 精灵图",[224,134302,134304],{"id":134303},"_1221-理解","12.2.1 理解",[207,134306,134307,134325],{},[210,134308,134309,134310,132538,134313,134316,134317,134320,134321,134324],{},"目的： ",[412,134311,134312],{},"为了有效地减少服务器接收和发送请求的次数",[412,134314,134315],{},"提高"," 页面的 ",[412,134318,134319],{},"加载速度"," ，出现了 ",[412,134322,134323],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[210,134326,134327,134328,134330,134331,134333,134334,134336,134337,134339,134340,134342,134343,134345],{},"使用精灵图核心：",[53856,134329],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53856,134332],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53856,134335],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53856,134338],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53856,134341],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53856,134344],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[224,134347,134349],{"id":134348},"_1222-扒图","12.2.2 扒图",[244,134351,134354],{"className":134352,"code":134353,"language":5327},[5325],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[22,134355,134353],{"__ignoreMap":169},[1601,134357],{"style":126488,"src":134358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1601,134360],{"style":126488,"src":134361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[224,134363,134365],{"id":134364},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1601,134367],{"style":126488,"src":134368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134370,134371],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1601,134373],{"style":126488,"src":134374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[244,134376,134378],{"className":126632,"code":134377,"language":126634,"meta":169,"style":169},"\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",[22,134379,134380,134385,134392,134404,134416,134435,134452],{"__ignoreMap":169},[252,134381,134382],{"class":254,"line":255},[252,134383,134384],{"class":321},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[252,134386,134387,134390],{"class":254,"line":170},[252,134388,134389],{"class":2102},".icon",[252,134391,15712],{"class":262},[252,134393,134394,134396,134398,134400,134402],{"class":254,"line":1318},[252,134395,70708],{"class":311},[252,134397,51577],{"class":262},[252,134399,963],{"class":311},[252,134401,51632],{"class":258},[252,134403,1429],{"class":262},[252,134405,134406,134408,134410,134412,134414],{"class":254,"line":1333},[252,134407,70928],{"class":311},[252,134409,51577],{"class":262},[252,134411,963],{"class":311},[252,134413,51632],{"class":258},[252,134415,1429],{"class":262},[252,134417,134418,134420,134422,134424,134426,134429,134431,134433],{"class":254,"line":1339},[252,134419,70751],{"class":311},[252,134421,51577],{"class":262},[252,134423,61866],{"class":311},[252,134425,263],{"class":262},[252,134427,134428],{"class":5356},"sprites.png",[252,134430,13854],{"class":262},[252,134432,61876],{"class":311},[252,134434,1429],{"class":262},[252,134436,134437,134439,134441,134443,134445,134448,134450],{"class":254,"line":1353},[252,134438,128892],{"class":311},[252,134440,51577],{"class":262},[252,134442,51903],{"class":311},[252,134444,51632],{"class":258},[252,134446,134447],{"class":311}," -20",[252,134449,51632],{"class":258},[252,134451,1429],{"class":262},[252,134453,134454],{"class":254,"line":1359},[252,134455,1704],{"class":262},[1601,134457],{"style":126488,"src":134458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134460,134461],{},"在前端中坐标轴的正方向是右和下",[14,134463,134465],{"id":134464},"_123-字体图标","12.3 字体图标",[224,134467,134469],{"id":134468},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134471,134472],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134474,134475],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134477,134478],{},"1.图片文件还是比较大的。",[19,134480,134481],{},"2.图片本身放大和缩小会失真。",[19,134483,134484],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134486,134487,134488,25880],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[412,134489,134490],{},"字体图标 iconfont",[19,134492,134493,134496,134497,28525],{},[412,134494,134495],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[412,134498,134499],{},"展示的是图标，本质属于字体",[224,134501,134503],{"id":134502},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1270,134505,134506,134511,134514,134517,134520],{},[210,134507,134508,134510],{},[412,134509,26016],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[210,134512,134513],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[210,134515,134516],{},"兼容性：几乎支持所有的浏览器，请放心使用",[210,134518,134519],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[210,134521,134522],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[224,134524,134526],{"id":134525},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1270,134528,134529],{},[210,134530,134531,134532],{},"icomoon字体库：",[501,134533,134536],{"href":134534,"rel":134535},"http:\u002F\u002Ficomoon.io\u002F",[24004],"http:\u002F\u002Ficomoon.io",[19,134538,134539],{},"进去之后点icomoon app",[1601,134541],{"style":126488,"src":134542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134544,134545],{},"可以对其编辑：",[1601,134547],{"style":126488,"src":134548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134550,134551],{},"生成字体：",[1601,134553],{"style":126488,"src":134554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134556,134557],{},"下载：",[1601,134559],{"style":126488,"src":134560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1270,134562,134563],{},[210,134564,134565,134566],{},"阿里iconfont字体库： ",[501,134567,134568],{"href":134568,"rel":134569},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24004],[224,134571,134573],{"id":134572},"_1234-字体图标的引入","12.3.4 字体图标的引入",[207,134575,134576],{},[210,134577,134578,134579,134582],{},"把下载包里面的 ",[412,134580,134581],{},"fonts"," 文件夹放入页面根目录下",[1601,134584],{"style":126488,"src":134585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[207,134587,134588],{"start":170},[210,134589,134590],{},"字体文件格式",[400,134592,134593,134602],{},[403,134594,134595],{},[406,134596,134597,134600],{},[409,134598,134599],{"align":23875},"格式",[409,134601,23879],{"align":23875},[447,134603,134604,134614,134624,134634],{},[406,134605,134606,134611],{},[452,134607,134608],{"align":23875},[412,134609,134610],{},".ttf",[452,134612,134613],{"align":23875},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[406,134615,134616,134621],{},[452,134617,134618],{"align":23875},[412,134619,134620],{},".woff",[452,134622,134623],{"align":23875},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[406,134625,134626,134631],{},[452,134627,134628],{"align":23875},[412,134629,134630],{},".eot",[452,134632,134633],{"align":23875},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[406,134635,134636,134641],{},[452,134637,134638],{"align":23875},[412,134639,134640],{},"svg",[452,134642,134643],{"align":23875},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[207,134645,134646],{"start":1318},[210,134647,134648],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[244,134650,134652],{"className":126632,"code":134651,"language":126634,"meta":169,"style":169},"\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",[22,134653,134654,134659,134666,134678,134694,134719,134740,134760,134780,134784,134790,134800,134811],{"__ignoreMap":169},[252,134655,134656],{"class":254,"line":255},[252,134657,134658],{"class":321},"\u002F* 引入字体图标 *\u002F\n",[252,134660,134661,134664],{"class":254,"line":170},[252,134662,134663],{"class":258},"@font-face",[252,134665,15712],{"class":262},[252,134667,134668,134671,134673,134676],{"class":254,"line":1318},[252,134669,134670],{"class":311},"  font-family",[252,134672,51577],{"class":262},[252,134674,134675],{"class":367},"'icomoon'",[252,134677,1429],{"class":262},[252,134679,134680,134683,134685,134687,134689,134692],{"class":254,"line":1333},[252,134681,134682],{"class":311},"  src",[252,134684,51577],{"class":262},[252,134686,61866],{"class":311},[252,134688,263],{"class":262},[252,134690,134691],{"class":367},"'fonts\u002Ficomoon.eot'",[252,134693,2858],{"class":262},[252,134695,134696,134698,134700,134702,134704,134707,134709,134712,134714,134717],{"class":254,"line":1339},[252,134697,134682],{"class":311},[252,134699,51577],{"class":262},[252,134701,61866],{"class":311},[252,134703,263],{"class":262},[252,134705,134706],{"class":367},"'fonts\u002Ficomoon.eot?#iefix'",[252,134708,13854],{"class":262},[252,134710,134711],{"class":311},"format",[252,134713,263],{"class":262},[252,134715,134716],{"class":367},"'embedded-opentype'",[252,134718,38187],{"class":262},[252,134720,134721,134724,134726,134729,134731,134733,134735,134738],{"class":254,"line":1353},[252,134722,134723],{"class":311},"       url",[252,134725,263],{"class":262},[252,134727,134728],{"class":367},"'fonts\u002Ficomoon.woff'",[252,134730,13854],{"class":262},[252,134732,134711],{"class":311},[252,134734,263],{"class":262},[252,134736,134737],{"class":367},"'woff'",[252,134739,38187],{"class":262},[252,134741,134742,134744,134746,134749,134751,134753,134755,134758],{"class":254,"line":1359},[252,134743,134723],{"class":311},[252,134745,263],{"class":262},[252,134747,134748],{"class":367},"'fonts\u002Ficomoon.ttf'",[252,134750,13854],{"class":262},[252,134752,134711],{"class":311},[252,134754,263],{"class":262},[252,134756,134757],{"class":367},"'truetype'",[252,134759,38187],{"class":262},[252,134761,134762,134764,134766,134769,134771,134773,134775,134778],{"class":254,"line":1450},[252,134763,134723],{"class":311},[252,134765,263],{"class":262},[252,134767,134768],{"class":367},"'fonts\u002Ficomoon.svg#icomoon'",[252,134770,13854],{"class":262},[252,134772,134711],{"class":311},[252,134774,263],{"class":262},[252,134776,134777],{"class":367},"'svg'",[252,134779,2858],{"class":262},[252,134781,134782],{"class":254,"line":1456},[252,134783,1704],{"class":262},[252,134785,134786,134788],{"class":254,"line":1468},[252,134787,134389],{"class":2102},[252,134789,15712],{"class":262},[252,134791,134792,134794,134796,134798],{"class":254,"line":1751},[252,134793,134670],{"class":311},[252,134795,51577],{"class":262},[252,134797,134675],{"class":367},[252,134799,1429],{"class":262},[252,134801,134802,134805,134807,134809],{"class":254,"line":1756},[252,134803,134804],{"class":311},"  font-style",[252,134806,51577],{"class":262},[252,134808,63981],{"class":311},[252,134810,1429],{"class":262},[252,134812,134813],{"class":254,"line":1762},[252,134814,1704],{"class":262},[19,134816,134817],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1601,134819],{"style":126488,"src":134820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[207,134822,134823],{"start":1333},[210,134824,134825],{},"添加字体",[1601,134827],{"style":126488,"src":134828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,134830,134831],{},"复制：",[1601,134833],{"style":126488,"src":134834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,134836,134837],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[207,134839,134840],{"start":1339},[210,134841,134842],{},"代码展示：",[244,134844,134845],{"className":126632,"code":134651,"language":126634,"meta":169,"style":169},[22,134846,134847,134851,134857,134867,134881,134903,134921,134939,134957,134961,134967,134977,134987],{"__ignoreMap":169},[252,134848,134849],{"class":254,"line":255},[252,134850,134658],{"class":321},[252,134852,134853,134855],{"class":254,"line":170},[252,134854,134663],{"class":258},[252,134856,15712],{"class":262},[252,134858,134859,134861,134863,134865],{"class":254,"line":1318},[252,134860,134670],{"class":311},[252,134862,51577],{"class":262},[252,134864,134675],{"class":367},[252,134866,1429],{"class":262},[252,134868,134869,134871,134873,134875,134877,134879],{"class":254,"line":1333},[252,134870,134682],{"class":311},[252,134872,51577],{"class":262},[252,134874,61866],{"class":311},[252,134876,263],{"class":262},[252,134878,134691],{"class":367},[252,134880,2858],{"class":262},[252,134882,134883,134885,134887,134889,134891,134893,134895,134897,134899,134901],{"class":254,"line":1339},[252,134884,134682],{"class":311},[252,134886,51577],{"class":262},[252,134888,61866],{"class":311},[252,134890,263],{"class":262},[252,134892,134706],{"class":367},[252,134894,13854],{"class":262},[252,134896,134711],{"class":311},[252,134898,263],{"class":262},[252,134900,134716],{"class":367},[252,134902,38187],{"class":262},[252,134904,134905,134907,134909,134911,134913,134915,134917,134919],{"class":254,"line":1353},[252,134906,134723],{"class":311},[252,134908,263],{"class":262},[252,134910,134728],{"class":367},[252,134912,13854],{"class":262},[252,134914,134711],{"class":311},[252,134916,263],{"class":262},[252,134918,134737],{"class":367},[252,134920,38187],{"class":262},[252,134922,134923,134925,134927,134929,134931,134933,134935,134937],{"class":254,"line":1359},[252,134924,134723],{"class":311},[252,134926,263],{"class":262},[252,134928,134748],{"class":367},[252,134930,13854],{"class":262},[252,134932,134711],{"class":311},[252,134934,263],{"class":262},[252,134936,134757],{"class":367},[252,134938,38187],{"class":262},[252,134940,134941,134943,134945,134947,134949,134951,134953,134955],{"class":254,"line":1450},[252,134942,134723],{"class":311},[252,134944,263],{"class":262},[252,134946,134768],{"class":367},[252,134948,13854],{"class":262},[252,134950,134711],{"class":311},[252,134952,263],{"class":262},[252,134954,134777],{"class":367},[252,134956,2858],{"class":262},[252,134958,134959],{"class":254,"line":1456},[252,134960,1704],{"class":262},[252,134962,134963,134965],{"class":254,"line":1468},[252,134964,134389],{"class":2102},[252,134966,15712],{"class":262},[252,134968,134969,134971,134973,134975],{"class":254,"line":1751},[252,134970,134670],{"class":311},[252,134972,51577],{"class":262},[252,134974,134675],{"class":367},[252,134976,1429],{"class":262},[252,134978,134979,134981,134983,134985],{"class":254,"line":1756},[252,134980,134804],{"class":311},[252,134982,51577],{"class":262},[252,134984,63981],{"class":311},[252,134986,1429],{"class":262},[252,134988,134989],{"class":254,"line":1762},[252,134990,1704],{"class":262},[1601,134992],{"style":126488,"src":134993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,134995,134996],{},"更加细节展示：",[207,134998,134999],{},[210,135000,135001],{},"html 标签内添加小图标",[1601,135003],{"style":126488,"src":135004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[207,135006,135007],{"start":170},[210,135008,135009],{},"给标签定义字体",[244,135011,135012],{"className":127379,"code":130736,"language":127381,"meta":169,"style":169},[22,135013,135014,135018,135032,135036],{"__ignoreMap":169},[252,135015,135016],{"class":254,"line":255},[252,135017,130743],{"class":321},[252,135019,135020,135022,135024,135026,135028,135030],{"class":254,"line":170},[252,135021,1173],{"class":262},[252,135023,51751],{"class":51440},[252,135025,53626],{"class":2102},[252,135027,308],{"class":262},[252,135029,130756],{"class":367},[252,135031,51447],{"class":262},[252,135033,135034],{"class":254,"line":1318},[252,135035,130763],{"class":262},[252,135037,135038,135040,135042],{"class":254,"line":1333},[252,135039,51925],{"class":262},[252,135041,51751],{"class":51440},[252,135043,51447],{"class":262},[19,135045,135046],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1601,135048],{"style":126488,"src":135049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[224,135051,135053],{"id":135052},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135055,135056],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135058,135059,135060,135063],{},"把压缩包里面的 ",[412,135061,135062],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135065,135066],{},"打开网站，点下方：",[1601,135068],{"style":126488,"src":135069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1601,135071],{"style":126488,"src":135072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1601,135074],{"style":126488,"src":135075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135077,135078],{},"点yes重新加载",[19,135080,135081],{},"然后重复之前的操作就可以实现了",[19,135083,135084],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[224,135086,135088],{"id":135087},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1601,135090],{"style":126488,"src":135091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5266,135093,135094],{},"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":169,"searchDepth":170,"depth":170,"links":135096},[135097,135103,135108],{"id":133700,"depth":170,"text":133701,"children":135098},[135099,135100,135101,135102],{"id":133712,"depth":1318,"text":133713},{"id":133741,"depth":1318,"text":133742},{"id":133769,"depth":1318,"text":133770},{"id":133827,"depth":1318,"text":133828},{"id":134299,"depth":170,"text":134300,"children":135104},[135105,135106,135107],{"id":134303,"depth":1318,"text":134304},{"id":134348,"depth":1318,"text":134349},{"id":134364,"depth":1318,"text":134365},{"id":134464,"depth":170,"text":134465,"children":135109},[135110,135111,135112,135113,135114,135115],{"id":134468,"depth":1318,"text":134469},{"id":134502,"depth":1318,"text":134503},{"id":134525,"depth":1318,"text":134526},{"id":134572,"depth":1318,"text":134573},{"id":135052,"depth":1318,"text":135053},{"id":135087,"depth":1318,"text":135088},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133692,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135122,"title":135123,"body":135124,"description":178,"extension":179,"meta":136351,"navigation":181,"path":136352,"seo":136353,"stem":136354,"__hash__":136355},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135125,"toc":136332},[135126,135129,135133,135136,135150,135218,135248,135251,135255,135259,135361,135408,135412,135415,135418,135452,135455,135458,135461,135464,135467,135470,135473,135475,135478,135481,135484,135487,135490,135493,135496,135524,135527,135531,135534,135541,135544,135547,135573,135576,135580,135583,135586,135593,135597,135600,135602,135634,135637,135640,135652,135658,135661,135664,135667,135669,135673,135676,135679,135682,135727,135731,135733,135736,135743,135785,135788,135792,135797,135811,135815,135818,135821,135824,135827,135830,135864,135867,135870,135924,135927,135930,135933,135936,135988,135991,135994,136043,136047,136049,136052,136055,136058,136061,136064,136122,136125,136131,136134,136137,136169,136172,136176,136180,136183,136215,136219,136222,136266,136270,136273,136276,136279,136282,136285,136288,136291,136293,136296,136298,136301,136304,136307,136310,136315,136318,136320,136323,136326,136329],[10,135127,135123],{"id":135128},"_13-界面样式与布局技巧",[14,135130,135132],{"id":135131},"_131-css三角","13.1 css三角",[19,135134,135135],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1270,135137,135138,135141,135144,135147],{},[210,135139,135140],{},"用css 边框可以模拟三角效果",[210,135142,135143],{},"宽度高度为0",[210,135145,135146],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[210,135148,135149],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[244,135151,135153],{"className":126632,"code":135152,"language":126634,"meta":169,"style":169},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[22,135154,135155,135160,135167,135177,135187,135203,135214],{"__ignoreMap":169},[252,135156,135157],{"class":254,"line":255},[252,135158,135159],{"class":321},"\u002F* CSS 实现三角形 *\u002F\n",[252,135161,135162,135165],{"class":254,"line":170},[252,135163,135164],{"class":2102},".triangle",[252,135166,15712],{"class":262},[252,135168,135169,135171,135173,135175],{"class":254,"line":1318},[252,135170,70708],{"class":311},[252,135172,51577],{"class":262},[252,135174,454],{"class":311},[252,135176,1429],{"class":262},[252,135178,135179,135181,135183,135185],{"class":254,"line":1333},[252,135180,70928],{"class":311},[252,135182,51577],{"class":262},[252,135184,454],{"class":311},[252,135186,1429],{"class":262},[252,135188,135189,135191,135193,135195,135197,135199,135201],{"class":254,"line":1339},[252,135190,71036],{"class":311},[252,135192,51577],{"class":262},[252,135194,709],{"class":311},[252,135196,51632],{"class":258},[252,135198,51661],{"class":311},[252,135200,64131],{"class":311},[252,135202,1429],{"class":262},[252,135204,135205,135208,135210,135212],{"class":254,"line":1353},[252,135206,135207],{"class":311},"  border-bottom-color",[252,135209,51577],{"class":262},[252,135211,62509],{"class":311},[252,135213,1429],{"class":262},[252,135215,135216],{"class":254,"line":1359},[252,135217,1704],{"class":262},[244,135219,135220],{"className":126632,"code":130789,"language":126634,"meta":169,"style":169},[22,135221,135222,135228,135244],{"__ignoreMap":169},[252,135223,135224,135226],{"class":254,"line":255},[252,135225,51751],{"class":51440},[252,135227,15712],{"class":262},[252,135229,135230,135232,135234,135236,135238,135240,135242],{"class":254,"line":170},[252,135231,71036],{"class":311},[252,135233,51577],{"class":262},[252,135235,480],{"class":311},[252,135237,51632],{"class":258},[252,135239,51661],{"class":311},[252,135241,130024],{"class":311},[252,135243,1429],{"class":262},[252,135245,135246],{"class":254,"line":1318},[252,135247,1704],{"class":262},[1601,135249],{"style":126488,"src":135250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135252,135254],{"id":135253},"_132-css用户界面样式","13.2 css用户界面样式",[224,135256,135258],{"id":135257},"_1321-鼠标样式","13.2.1 鼠标样式",[244,135260,135262],{"className":126632,"code":135261,"language":126634,"meta":169,"style":169},"\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",[22,135263,135264,135269,135288,135306,135325,135342],{"__ignoreMap":169},[252,135265,135266],{"class":254,"line":255},[252,135267,135268],{"class":321},"\u002F* 鼠标样式 *\u002F\n",[252,135270,135271,135273,135275,135278,135280,135282,135285],{"class":254,"line":170},[252,135272,51751],{"class":51440},[252,135274,79946],{"class":262},[252,135276,135277],{"class":311},"cursor",[252,135279,51577],{"class":262},[252,135281,62170],{"class":311},[252,135283,135284],{"class":262},"; }   ",[252,135286,135287],{"class":321},"\u002F* 手型 *\u002F\n",[252,135289,135290,135292,135294,135296,135298,135301,135303],{"class":254,"line":1318},[252,135291,51751],{"class":51440},[252,135293,79946],{"class":262},[252,135295,135277],{"class":311},[252,135297,51577],{"class":262},[252,135299,135300],{"class":311},"default",[252,135302,135284],{"class":262},[252,135304,135305],{"class":321},"\u002F* 默认 *\u002F\n",[252,135307,135308,135310,135312,135314,135316,135319,135322],{"class":254,"line":1333},[252,135309,51751],{"class":51440},[252,135311,79946],{"class":262},[252,135313,135277],{"class":311},[252,135315,51577],{"class":262},[252,135317,135318],{"class":311},"move",[252,135320,135321],{"class":262},"; }      ",[252,135323,135324],{"class":321},"\u002F* 移动 *\u002F\n",[252,135326,135327,135329,135331,135333,135335,135337,135339],{"class":254,"line":1339},[252,135328,51751],{"class":51440},[252,135330,79946],{"class":262},[252,135332,135277],{"class":311},[252,135334,51577],{"class":262},[252,135336,5327],{"class":311},[252,135338,135321],{"class":262},[252,135340,135341],{"class":321},"\u002F* 文本 *\u002F\n",[252,135343,135344,135346,135348,135350,135352,135355,135358],{"class":254,"line":1353},[252,135345,51751],{"class":51440},[252,135347,79946],{"class":262},[252,135349,135277],{"class":311},[252,135351,51577],{"class":262},[252,135353,135354],{"class":311},"not-allowed",[252,135356,135357],{"class":262},"; } ",[252,135359,135360],{"class":321},"\u002F* 禁止 *\u002F\n",[400,135362,135363,135371],{},[403,135364,135365],{},[406,135366,135367,135369],{},[409,135368,127096],{"align":23875},[409,135370,27629],{"align":23875},[447,135372,135373,135380,135387,135394,135401],{},[406,135374,135375,135377],{},[452,135376,135300],{"align":23875},[452,135378,135379],{"align":23875},"小白 默认",[406,135381,135382,135384],{},[452,135383,62170],{"align":23875},[452,135385,135386],{"align":23875},"小手",[406,135388,135389,135391],{},[452,135390,135318],{"align":23875},[452,135392,135393],{"align":23875},"移动",[406,135395,135396,135398],{},[452,135397,5327],{"align":23875},[452,135399,135400],{"align":23875},"文本",[406,135402,135403,135405],{},[452,135404,135354],{"align":23875},[452,135406,135407],{"align":23875},"禁止",[224,135409,135411],{"id":135410},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135413,135414],{},"去除表单轮廓线",[19,135416,135417],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[244,135419,135420],{"className":126632,"code":129996,"language":126634,"meta":169,"style":169},[22,135421,135422,135426,135432,135448],{"__ignoreMap":169},[252,135423,135424],{"class":254,"line":255},[252,135425,130003],{"class":321},[252,135427,135428,135430],{"class":254,"line":170},[252,135429,51751],{"class":51440},[252,135431,15712],{"class":262},[252,135433,135434,135436,135438,135440,135442,135444,135446],{"class":254,"line":1318},[252,135435,71036],{"class":311},[252,135437,51577],{"class":262},[252,135439,480],{"class":311},[252,135441,51632],{"class":258},[252,135443,51661],{"class":311},[252,135445,130024],{"class":311},[252,135447,1429],{"class":262},[252,135449,135450],{"class":254,"line":1333},[252,135451,1704],{"class":262},[19,135453,135454],{},"文本域：",[1601,135456],{"style":126488,"src":135457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135459,135460],{},"此时会有一个空白区域",[1601,135462],{"style":126488,"src":135463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135465,135466],{},"写在同一行就不会出现这个问题",[1601,135468],{"style":126488,"src":135469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135471,135472],{},"文本域是行内块元素，一定记住！！！",[19,135474,98371],{},[1601,135476],{"style":126488,"src":135477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135479,135480],{},"文本域尽量放在一行",[19,135482,135483],{},"知识回顾：cols是列，rols是行",[1601,135485],{"style":126488,"src":135486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135488,135489],{},"它可以进行拖动，显然这是我们不愿意看到的",[1601,135491],{"style":126488,"src":135492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135494,135495],{},"使用resize进行解决",[244,135497,135499],{"className":126632,"code":135498,"language":126634,"meta":169,"style":169},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[22,135500,135501,135507,135520],{"__ignoreMap":169},[252,135502,135503,135505],{"class":254,"line":255},[252,135504,53961],{"class":51440},[252,135506,15712],{"class":262},[252,135508,135509,135511,135513,135515,135517],{"class":254,"line":170},[252,135510,70938],{"class":311},[252,135512,51577],{"class":262},[252,135514,54877],{"class":311},[252,135516,130495],{"class":262},[252,135518,135519],{"class":321},"\u002F* 取消表单轮廓线 *\u002F\n",[252,135521,135522],{"class":254,"line":1318},[252,135523,1704],{"class":262},[19,135525,135526],{},"此时就无法通过右下方实现拖动了",[224,135528,135530],{"id":135529},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135532,135533],{},"实现一个盒子中的文字和图片对齐",[19,135535,135536,135537,135540],{},"用于设置一个元素的 ",[412,135538,135539],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135542,135543],{},"图片和文字默认是基线对齐",[1601,135545],{"style":126488,"src":135546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[244,135548,135549],{"className":126632,"code":135498,"language":126634,"meta":169,"style":169},[22,135550,135551,135557,135569],{"__ignoreMap":169},[252,135552,135553,135555],{"class":254,"line":255},[252,135554,53961],{"class":51440},[252,135556,15712],{"class":262},[252,135558,135559,135561,135563,135565,135567],{"class":254,"line":170},[252,135560,70938],{"class":311},[252,135562,51577],{"class":262},[252,135564,54877],{"class":311},[252,135566,130495],{"class":262},[252,135568,135519],{"class":321},[252,135570,135571],{"class":254,"line":1318},[252,135572,1704],{"class":262},[1601,135574],{"style":126488,"src":135575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22137,135577,135579],{"id":135578},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135581,135582],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1601,135584],{"style":126488,"src":135585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135587,135588,135589,135592],{},"此时可以给图片、表单这些行内块元素的 ",[412,135590,135591],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22137,135594,135596],{"id":135595},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135598,135599],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135601,14773],{},[244,135603,135605],{"className":126632,"code":135604,"language":126634,"meta":169,"style":169},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[22,135606,135607,135612,135618,135630],{"__ignoreMap":169},[252,135608,135609],{"class":254,"line":255},[252,135610,135611],{"class":321},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[252,135613,135614,135616],{"class":254,"line":170},[252,135615,1601],{"class":51440},[252,135617,15712],{"class":262},[252,135619,135620,135623,135625,135628],{"class":254,"line":1318},[252,135621,135622],{"class":311},"  vertical-align",[252,135624,51577],{"class":262},[252,135626,135627],{"class":311},"middle",[252,135629,1429],{"class":262},[252,135631,135632],{"class":254,"line":1333},[252,135633,1704],{"class":262},[1601,135635],{"style":126488,"src":135636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135638,135639],{},"主要解决方法有两种：",[207,135641,135642],{},[210,135643,135644,135647,135648,135651],{},[412,135645,135646],{},"给图片"," 添加 ",[412,135649,135650],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135653,135654,135655],{},"2.把图片转换为块级元素 ",[412,135656,135657],{},"display: block",[19,135659,135660],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135662,135663],{},"img {",[19,135665,135666],{},"vertical-align:middle;",[19,135668,1209],{},[224,135670,135672],{"id":135671},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135674,135675],{},"效果：",[1601,135677],{"style":126488,"src":135678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135680,135681],{},"单行文本溢出显示省略号--必须满足三个条件：",[244,135683,135685],{"className":126632,"code":135684,"language":126634,"meta":169,"style":169},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[22,135686,135687,135692,135698,135708,135713,135723],{"__ignoreMap":169},[252,135688,135689],{"class":254,"line":255},[252,135690,135691],{"class":321},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[252,135693,135694,135696],{"class":254,"line":170},[252,135695,1601],{"class":51440},[252,135697,15712],{"class":262},[252,135699,135700,135702,135704,135706],{"class":254,"line":1318},[252,135701,135622],{"class":311},[252,135703,51577],{"class":262},[252,135705,135627],{"class":311},[252,135707,1429],{"class":262},[252,135709,135710],{"class":254,"line":1333},[252,135711,135712],{"class":321},"  \u002F* 或 *\u002F\n",[252,135714,135715,135717,135719,135721],{"class":254,"line":1339},[252,135716,128248],{"class":311},[252,135718,51577],{"class":262},[252,135720,61009],{"class":311},[252,135722,1429],{"class":262},[252,135724,135725],{"class":254,"line":1353},[252,135726,1704],{"class":262},[224,135728,135730],{"id":135729},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,135732,135675],{},[1601,135734],{"style":126488,"src":135735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,135737,135738,135739,135742],{},"多行文本溢出显示省略号， ",[412,135740,135741],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[244,135744,135745],{"className":126632,"code":135684,"language":126634,"meta":169,"style":169},[22,135746,135747,135751,135757,135767,135771,135781],{"__ignoreMap":169},[252,135748,135749],{"class":254,"line":255},[252,135750,135691],{"class":321},[252,135752,135753,135755],{"class":254,"line":170},[252,135754,1601],{"class":51440},[252,135756,15712],{"class":262},[252,135758,135759,135761,135763,135765],{"class":254,"line":1318},[252,135760,135622],{"class":311},[252,135762,51577],{"class":262},[252,135764,135627],{"class":311},[252,135766,1429],{"class":262},[252,135768,135769],{"class":254,"line":1333},[252,135770,135712],{"class":321},[252,135772,135773,135775,135777,135779],{"class":254,"line":1339},[252,135774,128248],{"class":311},[252,135776,51577],{"class":262},[252,135778,61009],{"class":311},[252,135780,1429],{"class":262},[252,135782,135783],{"class":254,"line":1353},[252,135784,1704],{"class":262},[19,135786,135787],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135789,135791],{"id":135790},"_133-常见布局技巧","13.3 常见布局技巧",[19,135793,135794],{},[412,135795,135796],{},"巧妙利用一个技术更快更好的布局：",[207,135798,135799,135802,135805,135808],{},[210,135800,135801],{},"margin负值的运用",[210,135803,135804],{},"文字围绕浮动元素",[210,135806,135807],{},"行内块的巧妙运用",[210,135809,135810],{},"CSS三角强化",[224,135812,135814],{"id":135813},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,135816,135817],{},"应用场景：",[1601,135819],{"style":126488,"src":135820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1601,135822],{"style":126488,"src":135823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,135825,135826],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,135828,135829],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[244,135831,135832],{"className":126632,"code":129996,"language":126634,"meta":169,"style":169},[22,135833,135834,135838,135844,135860],{"__ignoreMap":169},[252,135835,135836],{"class":254,"line":255},[252,135837,130003],{"class":321},[252,135839,135840,135842],{"class":254,"line":170},[252,135841,51751],{"class":51440},[252,135843,15712],{"class":262},[252,135845,135846,135848,135850,135852,135854,135856,135858],{"class":254,"line":1318},[252,135847,71036],{"class":311},[252,135849,51577],{"class":262},[252,135851,480],{"class":311},[252,135853,51632],{"class":258},[252,135855,51661],{"class":311},[252,135857,130024],{"class":311},[252,135859,1429],{"class":262},[252,135861,135862],{"class":254,"line":1333},[252,135863,1704],{"class":262},[1601,135865],{"style":126488,"src":135866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,135868,135869],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[244,135871,135873],{"className":126632,"code":135872,"language":126634,"meta":169,"style":169},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[22,135874,135875,135880,135886,135896,135908,135920],{"__ignoreMap":169},[252,135876,135877],{"class":254,"line":255},[252,135878,135879],{"class":321},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[252,135881,135882,135884],{"class":254,"line":170},[252,135883,130480],{"class":2102},[252,135885,15712],{"class":262},[252,135887,135888,135890,135892,135894],{"class":254,"line":1318},[252,135889,132438],{"class":311},[252,135891,51577],{"class":262},[252,135893,54904],{"class":311},[252,135895,1429],{"class":262},[252,135897,135898,135900,135902,135904,135906],{"class":254,"line":1333},[252,135899,132452],{"class":311},[252,135901,51577],{"class":262},[252,135903,709],{"class":311},[252,135905,51632],{"class":258},[252,135907,1429],{"class":262},[252,135909,135910,135912,135914,135916,135918],{"class":254,"line":1339},[252,135911,132469],{"class":311},[252,135913,51577],{"class":262},[252,135915,963],{"class":311},[252,135917,51632],{"class":258},[252,135919,1429],{"class":262},[252,135921,135922],{"class":254,"line":1353},[252,135923,1704],{"class":262},[19,135925,135926],{},"加上上述代码会发现：",[1601,135928],{"style":126488,"src":135929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,135931,135932],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,135934,135935],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[244,135937,135938],{"className":126632,"code":135872,"language":126634,"meta":169,"style":169},[22,135939,135940,135944,135950,135960,135972,135984],{"__ignoreMap":169},[252,135941,135942],{"class":254,"line":255},[252,135943,135879],{"class":321},[252,135945,135946,135948],{"class":254,"line":170},[252,135947,130480],{"class":2102},[252,135949,15712],{"class":262},[252,135951,135952,135954,135956,135958],{"class":254,"line":1318},[252,135953,132438],{"class":311},[252,135955,51577],{"class":262},[252,135957,54904],{"class":311},[252,135959,1429],{"class":262},[252,135961,135962,135964,135966,135968,135970],{"class":254,"line":1333},[252,135963,132452],{"class":311},[252,135965,51577],{"class":262},[252,135967,709],{"class":311},[252,135969,51632],{"class":258},[252,135971,1429],{"class":262},[252,135973,135974,135976,135978,135980,135982],{"class":254,"line":1339},[252,135975,132469],{"class":311},[252,135977,51577],{"class":262},[252,135979,963],{"class":311},[252,135981,51632],{"class":258},[252,135983,1429],{"class":262},[252,135985,135986],{"class":254,"line":1353},[252,135987,1704],{"class":262},[19,135989,135990],{},"解决方式2：",[19,135992,135993],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[244,135995,135997],{"className":126632,"code":135996,"language":126634,"meta":169,"style":169},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[22,135998,135999,136005,136015,136027,136039],{"__ignoreMap":169},[252,136000,136001,136003],{"class":254,"line":255},[252,136002,51751],{"class":51440},[252,136004,15712],{"class":262},[252,136006,136007,136009,136011,136013],{"class":254,"line":170},[252,136008,132438],{"class":311},[252,136010,51577],{"class":262},[252,136012,54904],{"class":311},[252,136014,1429],{"class":262},[252,136016,136017,136019,136021,136023,136025],{"class":254,"line":1318},[252,136018,132452],{"class":311},[252,136020,51577],{"class":262},[252,136022,709],{"class":311},[252,136024,51632],{"class":258},[252,136026,1429],{"class":262},[252,136028,136029,136031,136033,136035,136037],{"class":254,"line":1333},[252,136030,132469],{"class":311},[252,136032,51577],{"class":262},[252,136034,963],{"class":311},[252,136036,51632],{"class":258},[252,136038,1429],{"class":262},[252,136040,136041],{"class":254,"line":1339},[252,136042,1704],{"class":262},[224,136044,136046],{"id":136045},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136048,135817],{},[1601,136050],{"style":126488,"src":136051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136053,136054],{},"实现结构图：",[1601,136056],{"style":126488,"src":136057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136059,136060],{},"巧妙运用浮动元素不会压住文字的特性",[19,136062,136063],{},"代码显示：",[244,136065,136067],{"className":126632,"code":136066,"language":126634,"meta":169,"style":169},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[22,136068,136069,136075,136085,136089,136094,136098,136104,136118],{"__ignoreMap":169},[252,136070,136071,136073],{"class":254,"line":255},[252,136072,130480],{"class":2102},[252,136074,15712],{"class":262},[252,136076,136077,136079,136081,136083],{"class":254,"line":170},[252,136078,131112],{"class":311},[252,136080,51577],{"class":262},[252,136082,23875],{"class":311},[252,136084,1429],{"class":262},[252,136086,136087],{"class":254,"line":1318},[252,136088,1704],{"class":262},[252,136090,136091],{"class":254,"line":1333},[252,136092,136093],{"class":262},"```Css\n",[252,136095,136096],{"class":254,"line":1339},[252,136097,130475],{"class":321},[252,136099,136100,136102],{"class":254,"line":1353},[252,136101,130480],{"class":2102},[252,136103,15712],{"class":262},[252,136105,136106,136108,136110,136112,136114,136116],{"class":254,"line":1359},[252,136107,70610],{"class":311},[252,136109,51577],{"class":262},[252,136111,454],{"class":311},[252,136113,51696],{"class":311},[252,136115,130495],{"class":262},[252,136117,130498],{"class":321},[252,136119,136120],{"class":254,"line":1450},[252,136121,1704],{"class":262},[19,136123,136124],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[244,136126,136129],{"className":136127,"code":136128,"language":5327},[5325],"\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",[22,136130,136128],{"__ignoreMap":169},[1601,136132],{"style":126488,"src":136133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136135,136136],{},"最终展示结果：",[244,136138,136139],{"className":126632,"code":130468,"language":126634,"meta":169,"style":169},[22,136140,136141,136145,136151,136165],{"__ignoreMap":169},[252,136142,136143],{"class":254,"line":255},[252,136144,130475],{"class":321},[252,136146,136147,136149],{"class":254,"line":170},[252,136148,130480],{"class":2102},[252,136150,15712],{"class":262},[252,136152,136153,136155,136157,136159,136161,136163],{"class":254,"line":1318},[252,136154,70610],{"class":311},[252,136156,51577],{"class":262},[252,136158,454],{"class":311},[252,136160,51696],{"class":311},[252,136162,130495],{"class":262},[252,136164,130498],{"class":321},[252,136166,136167],{"class":254,"line":1333},[252,136168,1704],{"class":262},[1601,136170],{"style":126488,"src":136171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136173,136175],{"id":136174},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[224,136177,136179],{"id":136178},"_1341-原理","13.4.1 原理",[1601,136181],{"style":126488,"src":136182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[244,136184,136185],{"className":126632,"code":130468,"language":126634,"meta":169,"style":169},[22,136186,136187,136191,136197,136211],{"__ignoreMap":169},[252,136188,136189],{"class":254,"line":255},[252,136190,130475],{"class":321},[252,136192,136193,136195],{"class":254,"line":170},[252,136194,130480],{"class":2102},[252,136196,15712],{"class":262},[252,136198,136199,136201,136203,136205,136207,136209],{"class":254,"line":1318},[252,136200,70610],{"class":311},[252,136202,51577],{"class":262},[252,136204,454],{"class":311},[252,136206,51696],{"class":311},[252,136208,130495],{"class":262},[252,136210,130498],{"class":321},[252,136212,136213],{"class":254,"line":1333},[252,136214,1704],{"class":262},[224,136216,136218],{"id":136217},"_1342-实例","13.4.2 实例",[1601,136220],{"style":126488,"src":136221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[244,136223,136224],{"className":126632,"code":131098,"language":126634,"meta":169,"style":169},[22,136225,136226,136232,136242,136246,136252,136262],{"__ignoreMap":169},[252,136227,136228,136230],{"class":254,"line":255},[252,136229,131105],{"class":2102},[252,136231,15712],{"class":262},[252,136233,136234,136236,136238,136240],{"class":254,"line":170},[252,136235,131112],{"class":311},[252,136237,51577],{"class":262},[252,136239,23875],{"class":311},[252,136241,1429],{"class":262},[252,136243,136244],{"class":254,"line":1318},[252,136245,1704],{"class":262},[252,136247,136248,136250],{"class":254,"line":1333},[252,136249,131127],{"class":2102},[252,136251,15712],{"class":262},[252,136253,136254,136256,136258,136260],{"class":254,"line":1339},[252,136255,131112],{"class":311},[252,136257,51577],{"class":262},[252,136259,72662],{"class":311},[252,136261,1429],{"class":262},[252,136263,136264],{"class":254,"line":1353},[252,136265,1704],{"class":262},[14,136267,136269],{"id":136268},"_135-css的初始化","13.5 css的初始化",[19,136271,136272],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136274,136275],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136277,136278],{},"每个网页都必须首先进行 CSS初始化。",[19,136280,136281],{},"这里我们以 京东CSS初始化代码为例。",[19,136283,136284],{},"在网页右键查看网页源代码",[19,136286,136287],{},"找到css的link引入语句",[19,136289,136290],{},"然后ctrl+f 输入body",[19,136292,77366],{},[1601,136294],{"style":126488,"src":136295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136297,161],{},[1601,136299],{"style":126488,"src":136300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136302,136303],{},"③打开了网页上传压缩的代码",[1601,136305],{"style":126488,"src":136306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136308,136309],{},"④从body前可以查看这个网页的初始化代码",[19,136311,136312],{},[412,136313,136314],{},"Unicode编码字体：",[19,136316,136317],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136319,83345],{},[19,136321,136322],{},"黑体 \\9ED1\\4F53",[19,136324,136325],{},"宋体 \\5B8B\\4F53",[19,136327,136328],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5266,136330,136331],{},"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":169,"searchDepth":170,"depth":170,"links":136333},[136334,136335,136342,136346,136350],{"id":135131,"depth":170,"text":135132},{"id":135253,"depth":170,"text":135254,"children":136336},[136337,136338,136339,136340,136341],{"id":135257,"depth":1318,"text":135258},{"id":135410,"depth":1318,"text":135411},{"id":135529,"depth":1318,"text":135530},{"id":135671,"depth":1318,"text":135672},{"id":135729,"depth":1318,"text":135730},{"id":135790,"depth":170,"text":135791,"children":136343},[136344,136345],{"id":135813,"depth":1318,"text":135814},{"id":136045,"depth":1318,"text":136046},{"id":136174,"depth":170,"text":136175,"children":136347},[136348,136349],{"id":136178,"depth":1318,"text":136179},{"id":136217,"depth":1318,"text":136218},{"id":136268,"depth":170,"text":136269},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135123,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136357,"title":136358,"body":136359,"description":178,"extension":179,"meta":138045,"navigation":181,"path":138046,"seo":138047,"stem":138048,"__hash__":138049},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136360,"toc":138034},[136361,136364,136368,136372,136375,136382,136385,136388,136426,136429,136431,136445,136449,136458,136462,136467,136470,136473,136476,136511,136516,136519,136549,136552,136557,136560,136563,136593,136596,136650,136653,136657,136662,136674,136677,136681,136711,136714,136719,136722,136752,136755,136759,136776,136780,136784,136787,136820,136823,136827,136830,136833,136836,136839,136842,136953,136956,136959,136962,137064,137067,137071,137075,137079,137082,137122,137125,137127,137143,137147,137150,137155,137236,137239,137242,137368,137373,137376,137384,137387,137392,137477,137480,137484,137487,137490,137494,137514,137519,137603,137606,137611,137614,137617,137695,137698,137701,137704,137707,137710,137715,137718,137721,137793,137796,137801,137804,137901,137904,137910,137913,137916,137919,137922,137925,137928,137931,137934,137938,137943,137946,137979,137984,137987,138028,138031],[10,136362,136358],{"id":136363},"_14-html5与css3新特性",[14,136365,136367],{"id":136366},"_141-html5的新特性","14.1 HTML5的新特性",[224,136369,136371],{"id":136370},"_1411-基本标签","14.1.1 基本标签",[19,136373,136374],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136376,136377,136378,136381],{},"这些新特性都有兼容性问题，基本是 ",[412,136379,136380],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136383,136384],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136386,136387],{},"现在使用的是新特性：",[1270,136389,136390,136396,136402,136408,136414,136420],{},[210,136391,136392,136395],{},[22,136393,136394],{},"\u003Cheader>"," 头部标签",[210,136397,136398,136401],{},[22,136399,136400],{},"\u003Cnav>"," 导航标签",[210,136403,136404,136407],{},[22,136405,136406],{},"\u003Carticle>"," 内容标签",[210,136409,136410,136413],{},[22,136411,136412],{},"\u003Csection>"," 定义文档某个区域",[210,136415,136416,136419],{},[22,136417,136418],{},"\u003Caside>"," 侧边栏标签",[210,136421,136422,136425],{},[22,136423,136424],{},"\u003Cfooter>"," 尾部标签",[1601,136427],{"style":126488,"src":136428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136430,292],{},[1270,136432,136433,136436,136439,136442],{},[210,136434,136435],{},"这种语义化标准主要是针对搜索引擎的",[210,136437,136438],{},"这些标签页面中可以经常使用",[210,136440,136441],{},"在IE9中，需要把这些元素转换为块级元素",[210,136443,136444],{},"移动端更喜欢使用这些标签",[224,136446,136448],{"id":136447},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136450,136451,136452,136454,136455,136457],{},"音频 ",[412,136453,28314],{}," 和视频 ",[412,136456,28323],{}," 两个标签",[22137,136459,136461],{"id":136460},"_14121-视频标签-video","14.1.2.1 视频标签- video",[207,136463,136464],{},[210,136465,136466],{},"支持格式：",[1601,136468],{"style":126488,"src":136469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136471,136472],{},"尽量使用MP4，兼容性好",[19,136474,136475],{},"用MP4就可以",[244,136477,136479],{"className":127379,"code":136478,"language":127381,"meta":169,"style":169},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[22,136480,136481],{"__ignoreMap":169},[252,136482,136483,136485,136487,136489,136491,136494,136496,136499,136502,136505,136507,136509],{"class":254,"line":255},[252,136484,1173],{"class":262},[252,136486,28323],{"class":51440},[252,136488,55379],{"class":2102},[252,136490,308],{"class":262},[252,136492,136493],{"class":367},"\"movie.mp4\"",[252,136495,92561],{"class":2102},[252,136497,136498],{"class":2102}," autoplay",[252,136500,136501],{"class":2102}," muted",[252,136503,136504],{"class":2102}," loop",[252,136506,55454],{"class":262},[252,136508,28323],{"class":51440},[252,136510,51447],{"class":262},[207,136512,136513],{"start":170},[210,136514,136515],{},"兼容写法",[19,136517,136518],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[244,136520,136521],{"className":127379,"code":136478,"language":127381,"meta":169,"style":169},[22,136522,136523],{"__ignoreMap":169},[252,136524,136525,136527,136529,136531,136533,136535,136537,136539,136541,136543,136545,136547],{"class":254,"line":255},[252,136526,1173],{"class":262},[252,136528,28323],{"class":51440},[252,136530,55379],{"class":2102},[252,136532,308],{"class":262},[252,136534,136493],{"class":367},[252,136536,92561],{"class":2102},[252,136538,136498],{"class":2102},[252,136540,136501],{"class":2102},[252,136542,136504],{"class":2102},[252,136544,55454],{"class":262},[252,136546,28323],{"class":51440},[252,136548,51447],{"class":262},[19,136550,136551],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[207,136553,136554],{"start":1318},[210,136555,136556],{},"video常用属性",[1601,136558],{"style":126488,"src":136559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136561,136562],{},"poster属性后面是跟的等待加载图片的地址",[244,136564,136565],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,136566,136567],{"__ignoreMap":169},[252,136568,136569,136571,136573,136575,136577,136579,136581,136583,136585,136587,136589,136591],{"class":254,"line":255},[252,136570,1173],{"class":262},[252,136572,1601],{"class":51440},[252,136574,55379],{"class":2102},[252,136576,308],{"class":262},[252,136578,134149],{"class":367},[252,136580,55387],{"class":2102},[252,136582,308],{"class":262},[252,136584,134156],{"class":367},[252,136586,134159],{"class":2102},[252,136588,308],{"class":262},[252,136590,134164],{"class":367},[252,136592,51447],{"class":262},[19,136594,136595],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[244,136597,136599],{"className":126632,"code":136598,"language":126634,"meta":169,"style":169},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[22,136600,136601,136606,136612,136636,136641,136646],{"__ignoreMap":169},[252,136602,136603],{"class":254,"line":255},[252,136604,136605],{"class":321},"\u002F* 2D 位移 *\u002F\n",[252,136607,136608,136610],{"class":254,"line":170},[252,136609,51751],{"class":51440},[252,136611,15712],{"class":262},[252,136613,136614,136617,136619,136622,136624,136626,136628,136630,136632,136634],{"class":254,"line":1318},[252,136615,136616],{"class":311},"  transform",[252,136618,51577],{"class":262},[252,136620,136621],{"class":311},"translate",[252,136623,263],{"class":262},[252,136625,574],{"class":311},[252,136627,51632],{"class":258},[252,136629,12575],{"class":262},[252,136631,919],{"class":311},[252,136633,51632],{"class":258},[252,136635,2858],{"class":262},[252,136637,136638],{"class":254,"line":1333},[252,136639,136640],{"class":321},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[252,136642,136643],{"class":254,"line":1339},[252,136644,136645],{"class":321},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[252,136647,136648],{"class":254,"line":1353},[252,136649,1704],{"class":262},[19,136651,136652],{},"muted:自动静音属性",[22137,136654,136656],{"id":136655},"_14122-音频标签audio","14.1.2.2 音频标签audio",[207,136658,136659],{},[210,136660,136661],{},"基本使用",[19,136663,136664,136665,136670,136671],{},"当前 ",[412,136666,136667],{},[22,136668,136669],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[412,136672,136673],{},"mp3格式",[1601,136675],{"style":126488,"src":136676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[207,136678,136679],{"start":170},[210,136680,136515],{},[244,136682,136683],{"className":127379,"code":136478,"language":127381,"meta":169,"style":169},[22,136684,136685],{"__ignoreMap":169},[252,136686,136687,136689,136691,136693,136695,136697,136699,136701,136703,136705,136707,136709],{"class":254,"line":255},[252,136688,1173],{"class":262},[252,136690,28323],{"class":51440},[252,136692,55379],{"class":2102},[252,136694,308],{"class":262},[252,136696,136493],{"class":367},[252,136698,92561],{"class":2102},[252,136700,136498],{"class":2102},[252,136702,136501],{"class":2102},[252,136704,136504],{"class":2102},[252,136706,55454],{"class":262},[252,136708,28323],{"class":51440},[252,136710,51447],{"class":262},[19,136712,136713],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[207,136715,136716],{"start":1318},[210,136717,136718],{},"常用属性",[1601,136720],{"style":126488,"src":136721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[244,136723,136724],{"className":127379,"code":136478,"language":127381,"meta":169,"style":169},[22,136725,136726],{"__ignoreMap":169},[252,136727,136728,136730,136732,136734,136736,136738,136740,136742,136744,136746,136748,136750],{"class":254,"line":255},[252,136729,1173],{"class":262},[252,136731,28323],{"class":51440},[252,136733,55379],{"class":2102},[252,136735,308],{"class":262},[252,136737,136493],{"class":367},[252,136739,92561],{"class":2102},[252,136741,136498],{"class":2102},[252,136743,136501],{"class":2102},[252,136745,136504],{"class":2102},[252,136747,55454],{"class":262},[252,136749,28323],{"class":51440},[252,136751,51447],{"class":262},[19,136753,136754],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22137,136756,136758],{"id":136757},"_14123-总结","14.1.2.3 总结",[1270,136760,136761,136764,136767,136770,136773],{},[210,136762,136763],{},"音频标签和视频标签使用方式基本一致",[210,136765,136766],{},"浏览器支持情况不同",[210,136768,136769],{},"谷歌浏览器把音频和视频自动播放禁止了",[210,136771,136772],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[210,136774,136775],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[224,136777,136779],{"id":136778},"_1413-表单元素","14.1.3 表单元素",[22137,136781,136783],{"id":136782},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1601,136785],{"style":126488,"src":136786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[244,136788,136790],{"className":127379,"code":136789,"language":127381,"meta":169,"style":169},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[22,136791,136792],{"__ignoreMap":169},[252,136793,136794,136796,136798,136800,136802,136804,136806,136808,136811,136813,136815,136818],{"class":254,"line":255},[252,136795,1173],{"class":262},[252,136797,53961],{"class":51440},[252,136799,53964],{"class":2102},[252,136801,308],{"class":262},[252,136803,62839],{"class":367},[252,136805,15060],{"class":2102},[252,136807,308],{"class":262},[252,136809,136810],{"class":367},"\"username\"",[252,136812,61160],{"class":2102},[252,136814,308],{"class":262},[252,136816,136817],{"class":367},"\"请输入用户名\"",[252,136819,51447],{"class":262},[1601,136821],{"style":126488,"src":136822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22137,136824,136826],{"id":136825},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1601,136828],{"style":126488,"src":136829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,136831,136832],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,136834,136835],{},"快捷操作：",[1601,136837],{"style":126488,"src":136838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,136840,136841],{},"例子1：",[244,136843,136845],{"className":127379,"code":136844,"language":127381,"meta":169,"style":169},"\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",[22,136846,136847,136870,136897,136926,136945],{"__ignoreMap":169},[252,136848,136849,136851,136853,136855,136857,136860,136863,136865,136868],{"class":254,"line":255},[252,136850,1173],{"class":262},[252,136852,66765],{"class":51440},[252,136854,66768],{"class":2102},[252,136856,308],{"class":262},[252,136858,136859],{"class":367},"\"\u002Fsubmit\"",[252,136861,136862],{"class":2102}," method",[252,136864,308],{"class":262},[252,136866,136867],{"class":367},"\"post\"",[252,136869,51447],{"class":262},[252,136871,136872,136874,136876,136878,136880,136882,136884,136886,136888,136890,136892,136895],{"class":254,"line":170},[252,136873,52284],{"class":262},[252,136875,53961],{"class":51440},[252,136877,53964],{"class":2102},[252,136879,308],{"class":262},[252,136881,62839],{"class":367},[252,136883,15060],{"class":2102},[252,136885,308],{"class":262},[252,136887,136810],{"class":367},[252,136889,61160],{"class":2102},[252,136891,308],{"class":262},[252,136893,136894],{"class":367},"\"用户名\"",[252,136896,51447],{"class":262},[252,136898,136899,136901,136903,136905,136907,136910,136912,136914,136917,136919,136921,136924],{"class":254,"line":1318},[252,136900,52284],{"class":262},[252,136902,53961],{"class":51440},[252,136904,53964],{"class":2102},[252,136906,308],{"class":262},[252,136908,136909],{"class":367},"\"password\"",[252,136911,15060],{"class":2102},[252,136913,308],{"class":262},[252,136915,136916],{"class":367},"\"pwd\"",[252,136918,61160],{"class":2102},[252,136920,308],{"class":262},[252,136922,136923],{"class":367},"\"密码\"",[252,136925,51447],{"class":262},[252,136927,136928,136930,136932,136934,136936,136938,136941,136943],{"class":254,"line":1333},[252,136929,52284],{"class":262},[252,136931,54027],{"class":51440},[252,136933,53964],{"class":2102},[252,136935,308],{"class":262},[252,136937,66788],{"class":367},[252,136939,136940],{"class":262},">提交\u003C\u002F",[252,136942,54027],{"class":51440},[252,136944,51447],{"class":262},[252,136946,136947,136949,136951],{"class":254,"line":1339},[252,136948,51925],{"class":262},[252,136950,66765],{"class":51440},[252,136952,51447],{"class":262},[1601,136954],{"style":126488,"src":136955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,136957,136958],{},"value是表单域的内容",[19,136960,136961],{},"例子2：",[244,136963,136964],{"className":127379,"code":136844,"language":127381,"meta":169,"style":169},[22,136965,136966,136986,137012,137038,137056],{"__ignoreMap":169},[252,136967,136968,136970,136972,136974,136976,136978,136980,136982,136984],{"class":254,"line":255},[252,136969,1173],{"class":262},[252,136971,66765],{"class":51440},[252,136973,66768],{"class":2102},[252,136975,308],{"class":262},[252,136977,136859],{"class":367},[252,136979,136862],{"class":2102},[252,136981,308],{"class":262},[252,136983,136867],{"class":367},[252,136985,51447],{"class":262},[252,136987,136988,136990,136992,136994,136996,136998,137000,137002,137004,137006,137008,137010],{"class":254,"line":170},[252,136989,52284],{"class":262},[252,136991,53961],{"class":51440},[252,136993,53964],{"class":2102},[252,136995,308],{"class":262},[252,136997,62839],{"class":367},[252,136999,15060],{"class":2102},[252,137001,308],{"class":262},[252,137003,136810],{"class":367},[252,137005,61160],{"class":2102},[252,137007,308],{"class":262},[252,137009,136894],{"class":367},[252,137011,51447],{"class":262},[252,137013,137014,137016,137018,137020,137022,137024,137026,137028,137030,137032,137034,137036],{"class":254,"line":1318},[252,137015,52284],{"class":262},[252,137017,53961],{"class":51440},[252,137019,53964],{"class":2102},[252,137021,308],{"class":262},[252,137023,136909],{"class":367},[252,137025,15060],{"class":2102},[252,137027,308],{"class":262},[252,137029,136916],{"class":367},[252,137031,61160],{"class":2102},[252,137033,308],{"class":262},[252,137035,136923],{"class":367},[252,137037,51447],{"class":262},[252,137039,137040,137042,137044,137046,137048,137050,137052,137054],{"class":254,"line":1333},[252,137041,52284],{"class":262},[252,137043,54027],{"class":51440},[252,137045,53964],{"class":2102},[252,137047,308],{"class":262},[252,137049,66788],{"class":367},[252,137051,136940],{"class":262},[252,137053,54027],{"class":51440},[252,137055,51447],{"class":262},[252,137057,137058,137060,137062],{"class":254,"line":1339},[252,137059,51925],{"class":262},[252,137061,66765],{"class":51440},[252,137063,51447],{"class":262},[1601,137065],{"style":126488,"src":137066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137068,137070],{"id":137069},"_142-css新特性","14.2 CSS新特性",[224,137072,137074],{"id":137073},"_1421-新增选择器","14.2.1 新增选择器",[22137,137076,137078],{"id":137077},"_14211-属性选择器","14.2.1.1 属性选择器",[1601,137080],{"style":126488,"src":137081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[244,137083,137085],{"className":126632,"code":137084,"language":126634,"meta":169,"style":169},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[22,137086,137087,137102,137118],{"__ignoreMap":169},[252,137088,137089,137091,137093,137095,137097,137099],{"class":254,"line":255},[252,137090,53961],{"class":51440},[252,137092,1153],{"class":262},[252,137094,103243],{"class":2102},[252,137096,308],{"class":258},[252,137098,62839],{"class":367},[252,137100,137101],{"class":262},"] {\n",[252,137103,137104,137106,137108,137110,137112,137114,137116],{"class":254,"line":170},[252,137105,71036],{"class":311},[252,137107,51577],{"class":262},[252,137109,480],{"class":311},[252,137111,51632],{"class":258},[252,137113,51661],{"class":311},[252,137115,130212],{"class":311},[252,137117,1429],{"class":262},[252,137119,137120],{"class":254,"line":1318},[252,137121,1704],{"class":262},[1601,137123],{"style":126488,"src":137124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137126,292],{},[1270,137128,137129,137132,137135,137138],{},[210,137130,137131],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[210,137133,137134],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[210,137136,137137],{},"属性选择器也可以选择出来自定义的属性",[210,137139,137140,137142],{},[412,137141,9165],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22137,137144,137146],{"id":137145},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1601,137148],{"style":126488,"src":137149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[207,137151,137152],{},[210,137153,137154],{},"fist-child",[244,137156,137158],{"className":126632,"code":137157,"language":126634,"meta":169,"style":169},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[22,137159,137160,137165,137180,137200,137218],{"__ignoreMap":169},[252,137161,137162],{"class":254,"line":255},[252,137163,137164],{"class":321},"\u002F* 属性选择器 *\u002F\n",[252,137166,137167,137169,137171,137173,137175,137177],{"class":254,"line":170},[252,137168,53961],{"class":51440},[252,137170,1153],{"class":262},[252,137172,103243],{"class":2102},[252,137174,308],{"class":258},[252,137176,62839],{"class":367},[252,137178,137179],{"class":262},"] { }\n",[252,137181,137182,137184,137186,137188,137191,137194,137197],{"class":254,"line":1318},[252,137183,53961],{"class":51440},[252,137185,1153],{"class":262},[252,137187,14834],{"class":2102},[252,137189,137190],{"class":258},"^=",[252,137192,137193],{"class":367},"\"icon\"",[252,137195,137196],{"class":262},"] { }  ",[252,137198,137199],{"class":321},"\u002F* 以 icon 开头 *\u002F\n",[252,137201,137202,137204,137206,137208,137211,137213,137215],{"class":254,"line":1333},[252,137203,53961],{"class":51440},[252,137205,1153],{"class":262},[252,137207,14834],{"class":2102},[252,137209,137210],{"class":258},"$=",[252,137212,137193],{"class":367},[252,137214,137196],{"class":262},[252,137216,137217],{"class":321},"\u002F* 以 icon 结尾 *\u002F\n",[252,137219,137220,137222,137224,137226,137229,137231,137233],{"class":254,"line":1339},[252,137221,53961],{"class":51440},[252,137223,1153],{"class":262},[252,137225,14834],{"class":2102},[252,137227,137228],{"class":258},"*=",[252,137230,137193],{"class":367},[252,137232,137196],{"class":262},[252,137234,137235],{"class":321},"\u002F* 包含 icon *\u002F\n",[19,137237,137238],{},"ul的第一个儿子文本为红色",[19,137240,137241],{},"一定要在冒号前加空格，不然就是选中所有的了",[244,137243,137245],{"className":126632,"code":137244,"language":126634,"meta":169,"style":169},".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",[22,137246,137247,137253,137263,137267,137271,137276,137289,137302,137318,137335,137352],{"__ignoreMap":169},[252,137248,137249,137251],{"class":254,"line":255},[252,137250,126923],{"class":2102},[252,137252,15712],{"class":262},[252,137254,137255,137257,137259,137261],{"class":254,"line":170},[252,137256,71045],{"class":311},[252,137258,51577],{"class":262},[252,137260,57561],{"class":311},[252,137262,1429],{"class":262},[252,137264,137265],{"class":254,"line":1318},[252,137266,1704],{"class":262},[252,137268,137269],{"class":254,"line":1333},[252,137270,136093],{"class":262},[252,137272,137273],{"class":254,"line":1339},[252,137274,137275],{"class":321},"\u002F* 结构伪类选择器 *\u002F\n",[252,137277,137278,137280,137283,137286],{"class":254,"line":1353},[252,137279,210],{"class":51440},[252,137281,137282],{"class":2102},":first-child",[252,137284,137285],{"class":262}," { }           ",[252,137287,137288],{"class":321},"\u002F* 第一个 *\u002F\n",[252,137290,137291,137293,137296,137299],{"class":254,"line":1359},[252,137292,210],{"class":51440},[252,137294,137295],{"class":2102},":last-child",[252,137297,137298],{"class":262}," { }            ",[252,137300,137301],{"class":321},"\u002F* 最后一个 *\u002F\n",[252,137303,137304,137306,137308,137310,137312,137315],{"class":254,"line":1450},[252,137305,210],{"class":51440},[252,137307,129546],{"class":2102},[252,137309,263],{"class":262},[252,137311,340],{"class":311},[252,137313,137314],{"class":262},") { }          ",[252,137316,137317],{"class":321},"\u002F* 第2个 *\u002F\n",[252,137319,137320,137322,137324,137326,137329,137332],{"class":254,"line":1456},[252,137321,210],{"class":51440},[252,137323,129546],{"class":2102},[252,137325,263],{"class":262},[252,137327,137328],{"class":311},"2n",[252,137330,137331],{"class":262},") { }         ",[252,137333,137334],{"class":321},"\u002F* 偶数 *\u002F\n",[252,137336,137337,137339,137341,137343,137346,137349],{"class":254,"line":1468},[252,137338,210],{"class":51440},[252,137340,129546],{"class":2102},[252,137342,263],{"class":262},[252,137344,137345],{"class":311},"2n+1",[252,137347,137348],{"class":262},") { }       ",[252,137350,137351],{"class":321},"\u002F* 奇数 *\u002F\n",[252,137353,137354,137356,137358,137360,137363,137365],{"class":254,"line":1751},[252,137355,210],{"class":51440},[252,137357,129546],{"class":2102},[252,137359,263],{"class":262},[252,137361,137362],{"class":311},"-n+3",[252,137364,137348],{"class":262},[252,137366,137367],{"class":321},"\u002F* 前3个 *\u002F\n",[51751,137369,137372],{"className":137370},[137371],"example","\n  示例内容\n",[19,137374,137375],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1270,137377,137378],{},[210,137379,137380,137383],{},[22,137381,137382],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137385,137386],{},"也就是说它选择的是熊大",[207,137388,137389],{"start":1353},[210,137390,137391],{},"权重",[244,137393,137395],{"className":126632,"code":137394,"language":126634,"meta":169,"style":169},"\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",[22,137396,137397,137401,137411,137421,137435,137449,137463],{"__ignoreMap":169},[252,137398,137399],{"class":254,"line":255},[252,137400,137275],{"class":321},[252,137402,137403,137405,137407,137409],{"class":254,"line":170},[252,137404,210],{"class":51440},[252,137406,137282],{"class":2102},[252,137408,137285],{"class":262},[252,137410,137288],{"class":321},[252,137412,137413,137415,137417,137419],{"class":254,"line":1318},[252,137414,210],{"class":51440},[252,137416,137295],{"class":2102},[252,137418,137298],{"class":262},[252,137420,137301],{"class":321},[252,137422,137423,137425,137427,137429,137431,137433],{"class":254,"line":1333},[252,137424,210],{"class":51440},[252,137426,129546],{"class":2102},[252,137428,263],{"class":262},[252,137430,340],{"class":311},[252,137432,137314],{"class":262},[252,137434,137317],{"class":321},[252,137436,137437,137439,137441,137443,137445,137447],{"class":254,"line":1339},[252,137438,210],{"class":51440},[252,137440,129546],{"class":2102},[252,137442,263],{"class":262},[252,137444,137328],{"class":311},[252,137446,137331],{"class":262},[252,137448,137334],{"class":321},[252,137450,137451,137453,137455,137457,137459,137461],{"class":254,"line":1353},[252,137452,210],{"class":51440},[252,137454,129546],{"class":2102},[252,137456,263],{"class":262},[252,137458,137345],{"class":311},[252,137460,137348],{"class":262},[252,137462,137351],{"class":321},[252,137464,137465,137467,137469,137471,137473,137475],{"class":254,"line":1359},[252,137466,210],{"class":51440},[252,137468,129546],{"class":2102},[252,137470,263],{"class":262},[252,137472,137362],{"class":311},[252,137474,137348],{"class":262},[252,137476,137367],{"class":321},[19,137478,137479],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22137,137481,137483],{"id":137482},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137485,137486],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1601,137488],{"style":126488,"src":137489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[207,137491,137492],{},[210,137493,292],{},[1270,137495,137496,137499,137502,137505,137508,137511],{},[210,137497,137498],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[210,137500,137501],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[210,137503,137504],{},"语法： element::before {}",[210,137506,137507],{},"before 和 after 必须有 content 属性",[210,137509,137510],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[210,137512,137513],{},"伪元素选择器和标签选择器一样，权重为 1",[207,137515,137516],{"start":170},[210,137517,137518],{},"实例",[244,137520,137521],{"className":126632,"code":137394,"language":126634,"meta":169,"style":169},[22,137522,137523,137527,137537,137547,137561,137575,137589],{"__ignoreMap":169},[252,137524,137525],{"class":254,"line":255},[252,137526,137275],{"class":321},[252,137528,137529,137531,137533,137535],{"class":254,"line":170},[252,137530,210],{"class":51440},[252,137532,137282],{"class":2102},[252,137534,137285],{"class":262},[252,137536,137288],{"class":321},[252,137538,137539,137541,137543,137545],{"class":254,"line":1318},[252,137540,210],{"class":51440},[252,137542,137295],{"class":2102},[252,137544,137298],{"class":262},[252,137546,137301],{"class":321},[252,137548,137549,137551,137553,137555,137557,137559],{"class":254,"line":1333},[252,137550,210],{"class":51440},[252,137552,129546],{"class":2102},[252,137554,263],{"class":262},[252,137556,340],{"class":311},[252,137558,137314],{"class":262},[252,137560,137317],{"class":321},[252,137562,137563,137565,137567,137569,137571,137573],{"class":254,"line":1339},[252,137564,210],{"class":51440},[252,137566,129546],{"class":2102},[252,137568,263],{"class":262},[252,137570,137328],{"class":311},[252,137572,137331],{"class":262},[252,137574,137334],{"class":321},[252,137576,137577,137579,137581,137583,137585,137587],{"class":254,"line":1353},[252,137578,210],{"class":51440},[252,137580,129546],{"class":2102},[252,137582,263],{"class":262},[252,137584,137345],{"class":311},[252,137586,137348],{"class":262},[252,137588,137351],{"class":321},[252,137590,137591,137593,137595,137597,137599,137601],{"class":254,"line":1359},[252,137592,210],{"class":51440},[252,137594,129546],{"class":2102},[252,137596,263],{"class":262},[252,137598,137362],{"class":311},[252,137600,137348],{"class":262},[252,137602,137367],{"class":321},[1601,137604],{"style":126488,"src":137605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[207,137607,137608],{"start":1318},[210,137609,137610],{},"使用场景1",[1601,137612],{"style":126488,"src":137613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137615,137616],{},"不需要再加盒子来整红色那部分了",[244,137618,137620],{"className":126632,"code":137619,"language":126634,"meta":169,"style":169},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[22,137621,137622,137627,137636,137647,137657,137661,137670,137681,137691],{"__ignoreMap":169},[252,137623,137624],{"class":254,"line":255},[252,137625,137626],{"class":321},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[252,137628,137629,137631,137634],{"class":254,"line":170},[252,137630,51751],{"class":51440},[252,137632,137633],{"class":2102},"::before",[252,137635,15712],{"class":262},[252,137637,137638,137641,137643,137645],{"class":254,"line":1318},[252,137639,137640],{"class":311},"  content",[252,137642,51577],{"class":262},[252,137644,7792],{"class":367},[252,137646,1429],{"class":262},[252,137648,137649,137651,137653,137655],{"class":254,"line":1333},[252,137650,128248],{"class":311},[252,137652,51577],{"class":262},[252,137654,61009],{"class":311},[252,137656,1429],{"class":262},[252,137658,137659],{"class":254,"line":1339},[252,137660,1704],{"class":262},[252,137662,137663,137665,137668],{"class":254,"line":1353},[252,137664,51751],{"class":51440},[252,137666,137667],{"class":2102},"::after",[252,137669,15712],{"class":262},[252,137671,137672,137674,137676,137679],{"class":254,"line":1359},[252,137673,137640],{"class":311},[252,137675,51577],{"class":262},[252,137677,137678],{"class":367},"\"→\"",[252,137680,1429],{"class":262},[252,137682,137683,137685,137687,137689],{"class":254,"line":1450},[252,137684,71045],{"class":311},[252,137686,51577],{"class":262},[252,137688,62210],{"class":311},[252,137690,1429],{"class":262},[252,137692,137693],{"class":254,"line":1456},[252,137694,1704],{"class":262},[1601,137696],{"style":126488,"src":137697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137699,137700],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1601,137702],{"style":126488,"src":137703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,137705,137706],{},"但是在引用时需要先转义一下",[19,137708,137709],{},"content='\\e930'",[207,137711,137712],{"start":1333},[210,137713,137714],{},"使用场景2",[19,137716,137717],{},"仿土豆效果",[19,137719,137720],{},"通过使用伪元素选择器可以减少body中盒子的数量",[244,137722,137723],{"className":126632,"code":137619,"language":126634,"meta":169,"style":169},[22,137724,137725,137729,137737,137747,137757,137761,137769,137779,137789],{"__ignoreMap":169},[252,137726,137727],{"class":254,"line":255},[252,137728,137626],{"class":321},[252,137730,137731,137733,137735],{"class":254,"line":170},[252,137732,51751],{"class":51440},[252,137734,137633],{"class":2102},[252,137736,15712],{"class":262},[252,137738,137739,137741,137743,137745],{"class":254,"line":1318},[252,137740,137640],{"class":311},[252,137742,51577],{"class":262},[252,137744,7792],{"class":367},[252,137746,1429],{"class":262},[252,137748,137749,137751,137753,137755],{"class":254,"line":1333},[252,137750,128248],{"class":311},[252,137752,51577],{"class":262},[252,137754,61009],{"class":311},[252,137756,1429],{"class":262},[252,137758,137759],{"class":254,"line":1339},[252,137760,1704],{"class":262},[252,137762,137763,137765,137767],{"class":254,"line":1353},[252,137764,51751],{"class":51440},[252,137766,137667],{"class":2102},[252,137768,15712],{"class":262},[252,137770,137771,137773,137775,137777],{"class":254,"line":1359},[252,137772,137640],{"class":311},[252,137774,51577],{"class":262},[252,137776,137678],{"class":367},[252,137778,1429],{"class":262},[252,137780,137781,137783,137785,137787],{"class":254,"line":1450},[252,137782,71045],{"class":311},[252,137784,51577],{"class":262},[252,137786,62210],{"class":311},[252,137788,1429],{"class":262},[252,137790,137791],{"class":254,"line":1456},[252,137792,1704],{"class":262},[1601,137794],{"style":126488,"src":137795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[207,137797,137798],{"start":1339},[210,137799,137800],{},"使用场景3",[19,137802,137803],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[244,137805,137807],{"className":126632,"code":137806,"language":126634,"meta":169,"style":169},".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",[22,137808,137809,137815,137825,137829,137833,137837,137845,137855,137865,137869,137877,137887,137897],{"__ignoreMap":169},[252,137810,137811,137813],{"class":254,"line":255},[252,137812,130480],{"class":2102},[252,137814,15712],{"class":262},[252,137816,137817,137819,137821,137823],{"class":254,"line":170},[252,137818,131112],{"class":311},[252,137820,51577],{"class":262},[252,137822,23875],{"class":311},[252,137824,1429],{"class":262},[252,137826,137827],{"class":254,"line":1318},[252,137828,1704],{"class":262},[252,137830,137831],{"class":254,"line":1333},[252,137832,136093],{"class":262},[252,137834,137835],{"class":254,"line":1339},[252,137836,137626],{"class":321},[252,137838,137839,137841,137843],{"class":254,"line":1353},[252,137840,51751],{"class":51440},[252,137842,137633],{"class":2102},[252,137844,15712],{"class":262},[252,137846,137847,137849,137851,137853],{"class":254,"line":1359},[252,137848,137640],{"class":311},[252,137850,51577],{"class":262},[252,137852,7792],{"class":367},[252,137854,1429],{"class":262},[252,137856,137857,137859,137861,137863],{"class":254,"line":1450},[252,137858,128248],{"class":311},[252,137860,51577],{"class":262},[252,137862,61009],{"class":311},[252,137864,1429],{"class":262},[252,137866,137867],{"class":254,"line":1456},[252,137868,1704],{"class":262},[252,137870,137871,137873,137875],{"class":254,"line":1468},[252,137872,51751],{"class":51440},[252,137874,137667],{"class":2102},[252,137876,15712],{"class":262},[252,137878,137879,137881,137883,137885],{"class":254,"line":1751},[252,137880,137640],{"class":311},[252,137882,51577],{"class":262},[252,137884,137678],{"class":367},[252,137886,1429],{"class":262},[252,137888,137889,137891,137893,137895],{"class":254,"line":1756},[252,137890,71045],{"class":311},[252,137892,51577],{"class":262},[252,137894,62210],{"class":311},[252,137896,1429],{"class":262},[252,137898,137899],{"class":254,"line":1762},[252,137900,1704],{"class":262},[19,137902,137903],{},"div {\nmargin: 0 auto;\n}",[244,137905,137908],{"className":137906,"code":137907,"language":5327},[5325],"\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",[22,137909,137907],{"__ignoreMap":169},[19,137911,137912],{},"如果想让多个元素都发生变化",[19,137914,137915],{},"不能如下操作：",[19,137917,137918],{},"transition: width 2s ease 0.5s;",[19,137920,137921],{},"transition: height 2s ease 0.5s;不对！！！",[19,137923,137924],{},"上方会样式冲突，导致不显示任何过渡效果",[19,137926,137927],{},"使用如下：加逗号隔开",[19,137929,137930],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,137932,137933],{},"transition all 2s ease;",[224,137935,137937],{"id":137936},"_1426-过渡练习","14.2.6 过渡练习",[207,137939,137940],{},[210,137941,137942],{},"进度条",[1601,137944],{"style":126488,"src":137945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[244,137947,137949],{"className":126632,"code":137948,"language":126634,"meta":169,"style":169},"div {\n  transition: all 0.3s ease;\n}\n",[22,137950,137951,137957,137975],{"__ignoreMap":169},[252,137952,137953,137955],{"class":254,"line":255},[252,137954,51751],{"class":51440},[252,137956,15712],{"class":262},[252,137958,137959,137962,137964,137966,137969,137971,137973],{"class":254,"line":170},[252,137960,137961],{"class":311},"  transition",[252,137963,51577],{"class":262},[252,137965,28261],{"class":311},[252,137967,137968],{"class":311}," 0.3",[252,137970,958],{"class":258},[252,137972,78819],{"class":311},[252,137974,1429],{"class":262},[252,137976,137977],{"class":254,"line":1318},[252,137978,1704],{"class":262},[207,137980,137981],{"start":170},[210,137982,137983],{},"小米logo",[19,137985,137986],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[244,137988,137990],{"className":126632,"code":137989,"language":126634,"meta":169,"style":169},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[22,137991,137992,137997,138003,138019,138024],{"__ignoreMap":169},[252,137993,137994],{"class":254,"line":255},[252,137995,137996],{"class":321},"\u002F* CSS3 过渡 *\u002F\n",[252,137998,137999,138001],{"class":254,"line":170},[252,138000,51751],{"class":51440},[252,138002,15712],{"class":262},[252,138004,138005,138007,138009,138011,138013,138015,138017],{"class":254,"line":1318},[252,138006,137961],{"class":311},[252,138008,51577],{"class":262},[252,138010,28261],{"class":311},[252,138012,137968],{"class":311},[252,138014,958],{"class":258},[252,138016,78819],{"class":311},[252,138018,1429],{"class":262},[252,138020,138021],{"class":254,"line":1333},[252,138022,138023],{"class":321},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[252,138025,138026],{"class":254,"line":1339},[252,138027,1704],{"class":262},[19,138029,138030],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5266,138032,138033],{},"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":169,"searchDepth":170,"depth":170,"links":138035},[138036,138041],{"id":136366,"depth":170,"text":136367,"children":138037},[138038,138039,138040],{"id":136370,"depth":1318,"text":136371},{"id":136447,"depth":1318,"text":136448},{"id":136778,"depth":1318,"text":136779},{"id":137069,"depth":170,"text":137070,"children":138042},[138043,138044],{"id":137073,"depth":1318,"text":137074},{"id":137936,"depth":1318,"text":137937},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136358,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138051,"title":138052,"body":138053,"description":178,"extension":179,"meta":139797,"navigation":181,"path":139798,"seo":139799,"stem":139800,"__hash__":139801},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138054,"toc":139778},[138055,138058,138062,138065,138071,138077,138081,138083,138086,138089,138092,138095,138098,138101,138104,138108,138112,138115,138118,138121,138125,138128,138131,138136,138139,138142,138145,138149,138152,138161,138164,138167,138171,138174,138177,138182,138189,138203,138211,138218,138223,138226,138229,138232,138239,138243,138249,138255,138258,138261,138266,138272,138274,138282,138287,138290,138296,138298,138303,138308,138311,138313,138318,138321,138326,138331,138365,138369,138373,138376,138380,138383,138469,138472,138509,138512,138548,138552,138557,138570,138624,138626,138654,138656,138684,138690,138704,138706,138750,138752,138796,138799,138806,138817,138819,138846,138848,138874,138881,138897,138899,138993,138995,139089,139096,139099,139104,139110,139184,139187,139189,139225,139227,139263,139266,139273,139292,139295,139298,139300,139325,139327,139351,139354,139357,139387,139391,139394,139457,139459,139525,139527,139591,139594,139626,139628,139654,139656,139682,139685,139716,139718,139744,139746,139772,139775],[10,138056,138052],{"id":138057},"_15-品优购项目上篇-搭建与公共模块",[14,138059,138061],{"id":138060},"_151-项目规划","15.1 项目规划",[1601,138063],{"style":126488,"src":138064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138066,138067,138070],{},[412,138068,138069],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138072,138073,138076],{},[412,138074,138075],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138078,138080],{"id":138079},"_152-项目介绍","15.2 项目介绍",[19,138082,138069],{},[1601,138084],{"style":126488,"src":138085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138087,138088],{},"主页：",[1601,138090],{"style":126488,"src":138091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138093,138094],{},"列表页：",[1601,138096],{"style":126488,"src":138097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138099,138100],{},"注册页：",[1601,138102],{"style":126488,"src":138103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138105,138107],{"id":138106},"_153-项目搭建工作","15.3 项目搭建工作",[224,138109,138111],{"id":138110},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1601,138113],{"style":126488,"src":138114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138116,138117],{},"经常更换的图片要放到upload文件夹中",[19,138119,138120],{},"不经常换的放到images文件夹中",[224,138122,138124],{"id":138123},"_1532-创建文件如下","15.3.2 创建文件如下",[1601,138126],{"style":126488,"src":138127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1601,138129],{"style":126488,"src":138130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138132,138133],{},[412,138134,138135],{},"初始化样式：",[19,138137,138138],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138140,138141],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138143,138144],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[224,138146,138148],{"id":138147},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138150,138151],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138153,138154,138155,138160],{},"这里最典型的应用就是 ",[412,138156,138157],{},[22,138158,138159],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1601,138162],{"style":126488,"src":138163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138165,138166],{},"通过link方法来引入",[224,138168,138170],{"id":138169},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1601,138172],{"style":126488,"src":138173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138175,138176],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[207,138178,138179],{},[210,138180,138181],{},"制作favicon图标",[19,138183,138184,138185,138188],{},"①把品优购图标切成 ",[22,138186,138187],{},"png"," 图片",[19,138190,138191,138192,138194,138195,138198,138199],{},"②把 ",[22,138193,138187],{}," 图片转换为 ",[22,138196,138197],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[501,138200,138201],{"href":138201,"rel":138202},"http:\u002F\u002Fwww.bitbug.net\u002F",[24004],[207,138204,138205,138208],{"start":170},[210,138206,138207],{},"favicon图标放到网站根目录下",[210,138209,138210],{},"HTML页面引入favicon",[19,138212,138213,138214,138217],{},"在html 页面里面的 ",[22,138215,138216],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138219,138220],{},[22,138221,138222],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138224,138225],{},"复制这行代码或者在生成这个的网站进行复制",[1601,138227],{"style":126488,"src":138228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138230,138231],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138233,138234,138235],{},"例如:",[501,138236,138237],{"href":138237,"rel":138238},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24004],[224,138240,138242],{"id":138241},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138244,138245,138248],{},[412,138246,138247],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138250,138251,138254],{},[412,138252,138253],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138256,138257],{},"页面必须有三个标签用来符合 SEO 优化",[1601,138259],{"style":126488,"src":138260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[207,138262,138263],{},[210,138264,138265],{},"title网站标题",[19,138267,138268,138271],{},[412,138269,138270],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138273,68930],{},[1270,138275,138276,138279],{},[210,138277,138278],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[210,138280,138281],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[207,138283,138284],{"start":170},[210,138285,138286],{},"description网站描述",[19,138288,138289],{},"简要说明我们网站主要是做什么的",[19,138291,138292,138295],{},[412,138293,138294],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138297,68930],{},[19,138299,138300],{},[22,138301,138302],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[207,138304,138305],{"start":1318},[210,138306,138307],{},"keywords关键词",[19,138309,138310],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138312,68930],{},[19,138314,138315],{},[22,138316,138317],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138319,138320],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138322,138323],{},[412,138324,138325],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[207,138327,138328],{"start":1333},[210,138329,138330],{},"代码总结",[244,138332,138333],{"className":127379,"code":130736,"language":127381,"meta":169,"style":169},[22,138334,138335,138339,138353,138357],{"__ignoreMap":169},[252,138336,138337],{"class":254,"line":255},[252,138338,130743],{"class":321},[252,138340,138341,138343,138345,138347,138349,138351],{"class":254,"line":170},[252,138342,1173],{"class":262},[252,138344,51751],{"class":51440},[252,138346,53626],{"class":2102},[252,138348,308],{"class":262},[252,138350,130756],{"class":367},[252,138352,51447],{"class":262},[252,138354,138355],{"class":254,"line":1318},[252,138356,130763],{"class":262},[252,138358,138359,138361,138363],{"class":254,"line":1333},[252,138360,51925],{"class":262},[252,138362,51751],{"class":51440},[252,138364,51447],{"class":262},[14,138366,138368],{"id":138367},"_154-项目公共部分制作","15.4 项目公共部分制作",[224,138370,138372],{"id":138371},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1601,138374],{"style":126488,"src":138375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[224,138377,138379],{"id":138378},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138381,138382],{},"布局思路：",[1270,138384,138385,138388,138391,138413,138446],{},[210,138386,138387],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[210,138389,138390],{},"里面包含版心的盒子",[210,138392,138393,138394],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1270,138395,138396,138404,138410],{},[210,138397,138398,138399,21639,138401,138403],{},"1 号盒子 里面包含一个",[22,138400,1270],{},[22,138402,1270],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[210,138405,138406,138407,138409],{},"里面的内容是水平排列，所以需要给",[22,138408,210],{},"设置浮动",[210,138411,138412],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[210,138414,138415,138416],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1270,138417,138418,138432,138437],{},[210,138419,138420,138421,21639,138423,138425,138426,138428,138429,138431],{},"2 号盒子 里面包含一个",[22,138422,1270],{},[22,138424,1270],{},"包裹",[22,138427,210],{},"，中间的",[22,138430,1184],{},"可以用样式去设置，也可以用字符 |",[210,138433,138434,138435,138409],{},"里面内容水平排列，给",[22,138436,210],{},[210,138438,138439,138440,138442,138443,138445],{},"找到里面所有偶数的 ",[22,138441,210],{}," 设置样式（偶数的 ",[22,138444,210],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[210,138447,138448,138449],{},"需要用到字体图标",[1270,138450,138451,138457,138460,138463,138466],{},[210,138452,138453,138454],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[22,138455,138456],{},"arrow-icon",[210,138458,138459],{},"先要引入字体图片的资源",[210,138461,138462],{},"在样式里面利用 font-face 来进行声明",[210,138464,138465],{},"在伪元素的 content属性设置 图标的编码",[210,138467,138468],{},"给伪元素设置font-family属性",[19,138470,138471],{},"结构实例代码：",[244,138473,138475],{"className":126632,"code":138474,"language":126634,"meta":169,"style":169},"div::before {\n  content: \"\";\n  display: block;\n}\n",[22,138476,138477,138485,138495,138505],{"__ignoreMap":169},[252,138478,138479,138481,138483],{"class":254,"line":255},[252,138480,51751],{"class":51440},[252,138482,137633],{"class":2102},[252,138484,15712],{"class":262},[252,138486,138487,138489,138491,138493],{"class":254,"line":170},[252,138488,137640],{"class":311},[252,138490,51577],{"class":262},[252,138492,7792],{"class":367},[252,138494,1429],{"class":262},[252,138496,138497,138499,138501,138503],{"class":254,"line":1318},[252,138498,128248],{"class":311},[252,138500,51577],{"class":262},[252,138502,61009],{"class":311},[252,138504,1429],{"class":262},[252,138506,138507],{"class":254,"line":1333},[252,138508,1704],{"class":262},[19,138510,138511],{},"样式实例代码：",[244,138513,138514],{"className":126632,"code":138474,"language":126634,"meta":169,"style":169},[22,138515,138516,138524,138534,138544],{"__ignoreMap":169},[252,138517,138518,138520,138522],{"class":254,"line":255},[252,138519,51751],{"class":51440},[252,138521,137633],{"class":2102},[252,138523,15712],{"class":262},[252,138525,138526,138528,138530,138532],{"class":254,"line":170},[252,138527,137640],{"class":311},[252,138529,51577],{"class":262},[252,138531,7792],{"class":367},[252,138533,1429],{"class":262},[252,138535,138536,138538,138540,138542],{"class":254,"line":1318},[252,138537,128248],{"class":311},[252,138539,51577],{"class":262},[252,138541,61009],{"class":311},[252,138543,1429],{"class":262},[252,138545,138546],{"class":254,"line":1333},[252,138547,1704],{"class":262},[224,138549,138551],{"id":138550},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1270,138553,138554],{},[210,138555,138556],{},"header 盒子必须要有高度",[19,138558,138559,138560,138562,138563],{},"1 号盒子是 ",[22,138561,131644],{}," 标志定位，在正常开发过程中， ",[412,138564,138565,138566,138569],{},"logo的布局其实是有讲究的，需要进行 ",[22,138567,138568],{},"logoSEO","的优化 （★★★）",[1270,138571,138572,138580,138588,138615],{},[210,138573,138574,138576,138577,138579],{},[22,138575,131644],{}," 里面首先放一个 ",[22,138578,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[210,138581,138582,138584,138585,138587],{},[22,138583,10],{}," 里面再放一个链接，可以返回首页的，把 ",[22,138586,131644],{}," 的背景图片给链接即可",[210,138589,138590,138591],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1270,138592,138593,138608],{},[210,138594,138595,138596,138599,138600,138603,138604,138607],{},"方法1：",[22,138597,138598],{},"text-indent"," 移到盒子外面（",[22,138601,138602],{},"text-indent: -9999px",") ，然后 ",[22,138605,138606],{},"overflow:hidden"," ，淘宝的做法",[210,138609,138610,138611,138614],{},"方法2：直接给 ",[22,138612,138613],{},"font-size: 0;"," 就看不到文字了，京东的做法",[210,138616,138617,138618,138620,138621,138623],{},"最后给链接一个 ",[22,138619,51547],{}," 属性，这样鼠标放到 ",[22,138622,131644],{}," 上就可以看到提示文字了",[19,138625,138471],{},[244,138627,138628],{"className":127379,"code":131865,"language":127381,"meta":169,"style":169},[22,138629,138630],{"__ignoreMap":169},[252,138631,138632,138634,138636,138638,138640,138642,138644,138646,138648,138650,138652],{"class":254,"line":255},[252,138633,1173],{"class":262},[252,138635,501],{"class":51440},[252,138637,61197],{"class":2102},[252,138639,308],{"class":262},[252,138641,131880],{"class":367},[252,138643,131883],{"class":2102},[252,138645,308],{"class":262},[252,138647,131888],{"class":367},[252,138649,131891],{"class":262},[252,138651,501],{"class":51440},[252,138653,51447],{"class":262},[19,138655,138511],{},[244,138657,138658],{"className":127379,"code":131865,"language":127381,"meta":169,"style":169},[22,138659,138660],{"__ignoreMap":169},[252,138661,138662,138664,138666,138668,138670,138672,138674,138676,138678,138680,138682],{"class":254,"line":255},[252,138663,1173],{"class":262},[252,138665,501],{"class":51440},[252,138667,61197],{"class":2102},[252,138669,308],{"class":262},[252,138671,131880],{"class":367},[252,138673,131883],{"class":2102},[252,138675,308],{"class":262},[252,138677,131888],{"class":367},[252,138679,131891],{"class":262},[252,138681,501],{"class":51440},[252,138683,51447],{"class":262},[19,138685,138686,138687,138689],{},"2 号盒子是 ",[22,138688,131657],{}," 搜索模块定位",[1270,138691,138692,138695,138698,138701],{},[210,138693,138694],{},"search盒子利用定位的方式放在对应的位置",[210,138696,138697],{},"search盒子设置绝对定位，header盒子设置相对定位",[210,138699,138700],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[210,138702,138703],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,138705,138471],{},[244,138707,138708],{"className":126632,"code":131952,"language":126634,"meta":169,"style":169},[22,138709,138710,138732,138736,138746],{"__ignoreMap":169},[252,138711,138712,138714,138716,138718,138720,138722,138724,138726,138728,138730],{"class":254,"line":255},[252,138713,51751],{"class":51440},[252,138715,12575],{"class":262},[252,138717,19],{"class":51440},[252,138719,12575],{"class":262},[252,138721,10],{"class":51440},[252,138723,12575],{"class":262},[252,138725,1270],{"class":51440},[252,138727,12575],{"class":262},[252,138729,210],{"class":51440},[252,138731,15712],{"class":262},[252,138733,138734],{"class":254,"line":170},[252,138735,131981],{"class":321},[252,138737,138738,138740,138742,138744],{"class":254,"line":1318},[252,138739,128248],{"class":311},[252,138741,51577],{"class":262},[252,138743,61009],{"class":311},[252,138745,1429],{"class":262},[252,138747,138748],{"class":254,"line":1333},[252,138749,1704],{"class":262},[19,138751,138511],{},[244,138753,138754],{"className":126632,"code":131952,"language":126634,"meta":169,"style":169},[22,138755,138756,138778,138782,138792],{"__ignoreMap":169},[252,138757,138758,138760,138762,138764,138766,138768,138770,138772,138774,138776],{"class":254,"line":255},[252,138759,51751],{"class":51440},[252,138761,12575],{"class":262},[252,138763,19],{"class":51440},[252,138765,12575],{"class":262},[252,138767,10],{"class":51440},[252,138769,12575],{"class":262},[252,138771,1270],{"class":51440},[252,138773,12575],{"class":262},[252,138775,210],{"class":51440},[252,138777,15712],{"class":262},[252,138779,138780],{"class":254,"line":170},[252,138781,131981],{"class":321},[252,138783,138784,138786,138788,138790],{"class":254,"line":1318},[252,138785,128248],{"class":311},[252,138787,51577],{"class":262},[252,138789,61009],{"class":311},[252,138791,1429],{"class":262},[252,138793,138794],{"class":254,"line":1333},[252,138795,1704],{"class":262},[19,138797,138798],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,138800,138801,138802,138805],{},"3 号盒子是 ",[22,138803,138804],{},"hotwords"," 热词模块定位",[1270,138807,138808,138811,138814],{},[210,138809,138810],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[210,138812,138813],{},"给里面所有的a标签设置 左右10px的外边距",[210,138815,138816],{},"给第一个a标签设置文字变红色（#c81623）",[19,138818,138471],{},[244,138820,138822],{"className":126632,"code":138821,"language":126634,"meta":169,"style":169},"div {\n  margin: 0 auto;\n}\n",[22,138823,138824,138830,138842],{"__ignoreMap":169},[252,138825,138826,138828],{"class":254,"line":255},[252,138827,51751],{"class":51440},[252,138829,15712],{"class":262},[252,138831,138832,138834,138836,138838,138840],{"class":254,"line":170},[252,138833,70610],{"class":311},[252,138835,51577],{"class":262},[252,138837,454],{"class":311},[252,138839,51696],{"class":311},[252,138841,1429],{"class":262},[252,138843,138844],{"class":254,"line":1318},[252,138845,1704],{"class":262},[19,138847,138511],{},[244,138849,138850],{"className":126632,"code":138821,"language":126634,"meta":169,"style":169},[22,138851,138852,138858,138870],{"__ignoreMap":169},[252,138853,138854,138856],{"class":254,"line":255},[252,138855,51751],{"class":51440},[252,138857,15712],{"class":262},[252,138859,138860,138862,138864,138866,138868],{"class":254,"line":170},[252,138861,70610],{"class":311},[252,138863,51577],{"class":262},[252,138865,454],{"class":311},[252,138867,51696],{"class":311},[252,138869,1429],{"class":262},[252,138871,138872],{"class":254,"line":1318},[252,138873,1704],{"class":262},[19,138875,138876,138877,138880],{},"4 号盒子是 ",[22,138878,138879],{},"shopcar"," 购物车模块",[1270,138882,138883,138888,138891,138894],{},[210,138884,38,138885,138887],{},[22,138886,138879],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[210,138889,138890],{},"count 统计部分用绝对定位做",[210,138892,138893],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[210,138895,138896],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,138898,138471],{},[244,138900,138901],{"className":126632,"code":132064,"language":126634,"meta":169,"style":169},[22,138902,138903,138907,138921,138925,138939,138943,138957,138961,138975,138979],{"__ignoreMap":169},[252,138904,138905],{"class":254,"line":255},[252,138906,132071],{"class":321},[252,138908,138909,138911,138913,138915,138917,138919],{"class":254,"line":170},[252,138910,132076],{"class":2102},[252,138912,79946],{"class":262},[252,138914,128992],{"class":311},[252,138916,51577],{"class":262},[252,138918,132085],{"class":311},[252,138920,129562],{"class":262},[252,138922,138923],{"class":254,"line":1318},[252,138924,132092],{"class":321},[252,138926,138927,138929,138931,138933,138935,138937],{"class":254,"line":1333},[252,138928,132097],{"class":2102},[252,138930,79946],{"class":262},[252,138932,128992],{"class":311},[252,138934,51577],{"class":262},[252,138936,54904],{"class":311},[252,138938,129562],{"class":262},[252,138940,138941],{"class":254,"line":1339},[252,138942,132112],{"class":321},[252,138944,138945,138947,138949,138951,138953,138955],{"class":254,"line":1353},[252,138946,132117],{"class":2102},[252,138948,79946],{"class":262},[252,138950,128992],{"class":311},[252,138952,51577],{"class":262},[252,138954,54971],{"class":311},[252,138956,129562],{"class":262},[252,138958,138959],{"class":254,"line":1359},[252,138960,132132],{"class":321},[252,138962,138963,138965,138967,138969,138971,138973],{"class":254,"line":1450},[252,138964,132137],{"class":2102},[252,138966,79946],{"class":262},[252,138968,128992],{"class":311},[252,138970,51577],{"class":262},[252,138972,86371],{"class":311},[252,138974,129562],{"class":262},[252,138976,138977],{"class":254,"line":1456},[252,138978,132152],{"class":321},[252,138980,138981,138983,138985,138987,138989,138991],{"class":254,"line":1468},[252,138982,132157],{"class":2102},[252,138984,79946],{"class":262},[252,138986,128992],{"class":311},[252,138988,51577],{"class":262},[252,138990,132166],{"class":311},[252,138992,129562],{"class":262},[19,138994,138511],{},[244,138996,138997],{"className":126632,"code":132064,"language":126634,"meta":169,"style":169},[22,138998,138999,139003,139017,139021,139035,139039,139053,139057,139071,139075],{"__ignoreMap":169},[252,139000,139001],{"class":254,"line":255},[252,139002,132071],{"class":321},[252,139004,139005,139007,139009,139011,139013,139015],{"class":254,"line":170},[252,139006,132076],{"class":2102},[252,139008,79946],{"class":262},[252,139010,128992],{"class":311},[252,139012,51577],{"class":262},[252,139014,132085],{"class":311},[252,139016,129562],{"class":262},[252,139018,139019],{"class":254,"line":1318},[252,139020,132092],{"class":321},[252,139022,139023,139025,139027,139029,139031,139033],{"class":254,"line":1333},[252,139024,132097],{"class":2102},[252,139026,79946],{"class":262},[252,139028,128992],{"class":311},[252,139030,51577],{"class":262},[252,139032,54904],{"class":311},[252,139034,129562],{"class":262},[252,139036,139037],{"class":254,"line":1339},[252,139038,132112],{"class":321},[252,139040,139041,139043,139045,139047,139049,139051],{"class":254,"line":1353},[252,139042,132117],{"class":2102},[252,139044,79946],{"class":262},[252,139046,128992],{"class":311},[252,139048,51577],{"class":262},[252,139050,54971],{"class":311},[252,139052,129562],{"class":262},[252,139054,139055],{"class":254,"line":1359},[252,139056,132132],{"class":321},[252,139058,139059,139061,139063,139065,139067,139069],{"class":254,"line":1450},[252,139060,132137],{"class":2102},[252,139062,79946],{"class":262},[252,139064,128992],{"class":311},[252,139066,51577],{"class":262},[252,139068,86371],{"class":311},[252,139070,129562],{"class":262},[252,139072,139073],{"class":254,"line":1456},[252,139074,132152],{"class":321},[252,139076,139077,139079,139081,139083,139085,139087],{"class":254,"line":1468},[252,139078,132157],{"class":2102},[252,139080,79946],{"class":262},[252,139082,128992],{"class":311},[252,139084,51577],{"class":262},[252,139086,132166],{"class":311},[252,139088,129562],{"class":262},[224,139090,139092,139093,139095],{"id":139091},"_1544-nav导航模块制作","15.4.4 ",[22,139094,53853],{},"导航模块制作",[1601,139097],{"style":126488,"src":139098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139100,139101,139103],{},[22,139102,53853],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139105,139106,139107],{},"1 号盒子左侧浮动，",[22,139108,139109],{},"dropdown",[1270,139111,139112,139122,139130,139136,139144,139154,139162,139173],{},[210,139113,139114,139115,132,139118,139121],{},"1号盒子有讲究，根据相关性 里面包含 ",[22,139116,139117],{},".dt",[22,139119,139120],{},".dd"," 两个盒子",[210,139123,139124,139126,139127,139129],{},[22,139125,139117],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[22,139128,139120],{}," 挤到下面去了",[210,139131,139132,139133,139135],{},"给 ",[22,139134,139120],{}," 盒子设置宽度 和 高度，以及背景颜色",[210,139137,139132,139138,139140,139141,120373],{},[22,139139,139120],{}," 盒子里面定义 无序列表 （",[22,139142,139143],{},"ul > li > a",[210,139145,139146,139147,139149,139150,139153],{},"每个 ",[22,139148,210],{}," 都有一个高度（",[22,139151,139152],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[210,139155,139132,139156,139158,139159,120373],{},[22,139157,210],{}," 里面的a设置文字大小（",[22,139160,139161],{},"14px",[210,139163,139132,139164,139166,139167,139169,139170,139172],{},[22,139165,210],{}," 设置 ",[22,139168,127793],{},"，当鼠标移入的时候，让",[22,139171,210],{},"的背景变成白色，让里面的文字变成红色",[210,139174,139175,139177,139178,139180,139181,139183],{},[22,139176,210],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[22,139179,210],{},"的右侧，那么给",[22,139182,210],{},"设置相对定位",[19,139185,139186],{},"一定要注意相关性",[19,139188,138471],{},[244,139190,139191],{"className":126632,"code":138474,"language":126634,"meta":169,"style":169},[22,139192,139193,139201,139211,139221],{"__ignoreMap":169},[252,139194,139195,139197,139199],{"class":254,"line":255},[252,139196,51751],{"class":51440},[252,139198,137633],{"class":2102},[252,139200,15712],{"class":262},[252,139202,139203,139205,139207,139209],{"class":254,"line":170},[252,139204,137640],{"class":311},[252,139206,51577],{"class":262},[252,139208,7792],{"class":367},[252,139210,1429],{"class":262},[252,139212,139213,139215,139217,139219],{"class":254,"line":1318},[252,139214,128248],{"class":311},[252,139216,51577],{"class":262},[252,139218,61009],{"class":311},[252,139220,1429],{"class":262},[252,139222,139223],{"class":254,"line":1333},[252,139224,1704],{"class":262},[19,139226,138511],{},[244,139228,139229],{"className":126632,"code":138474,"language":126634,"meta":169,"style":169},[22,139230,139231,139239,139249,139259],{"__ignoreMap":169},[252,139232,139233,139235,139237],{"class":254,"line":255},[252,139234,51751],{"class":51440},[252,139236,137633],{"class":2102},[252,139238,15712],{"class":262},[252,139240,139241,139243,139245,139247],{"class":254,"line":170},[252,139242,137640],{"class":311},[252,139244,51577],{"class":262},[252,139246,7792],{"class":367},[252,139248,1429],{"class":262},[252,139250,139251,139253,139255,139257],{"class":254,"line":1318},[252,139252,128248],{"class":311},[252,139254,51577],{"class":262},[252,139256,61009],{"class":311},[252,139258,1429],{"class":262},[252,139260,139261],{"class":254,"line":1333},[252,139262,1704],{"class":262},[19,139264,139265],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139267,139268,139269,139272],{},"2 号盒子左侧浮动，",[22,139270,139271],{},"navitems"," 导航栏组",[1270,139274,139275,139280,139289],{},[210,139276,139277,139278],{},"里面结构是 ",[22,139279,139143],{},[210,139281,139282,139283,139285,139286,139288],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[22,139284,501],{},"左右的",[22,139287,31023],{},"把两侧撑开",[210,139290,139291],{},"让文字垂直居中（行高等于高度）",[1601,139293],{"style":126488,"src":139294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139296,139297],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139299,138471],{},[244,139301,139303],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},".box {\n  float: left;\n}\n",[22,139304,139305,139311,139321],{"__ignoreMap":169},[252,139306,139307,139309],{"class":254,"line":255},[252,139308,130480],{"class":2102},[252,139310,15712],{"class":262},[252,139312,139313,139315,139317,139319],{"class":254,"line":170},[252,139314,131112],{"class":311},[252,139316,51577],{"class":262},[252,139318,23875],{"class":311},[252,139320,1429],{"class":262},[252,139322,139323],{"class":254,"line":1318},[252,139324,1704],{"class":262},[19,139326,138511],{},[244,139328,139329],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,139330,139331,139337,139347],{"__ignoreMap":169},[252,139332,139333,139335],{"class":254,"line":255},[252,139334,130480],{"class":2102},[252,139336,15712],{"class":262},[252,139338,139339,139341,139343,139345],{"class":254,"line":170},[252,139340,131112],{"class":311},[252,139342,51577],{"class":262},[252,139344,23875],{"class":311},[252,139346,1429],{"class":262},[252,139348,139349],{"class":254,"line":1318},[252,139350,1704],{"class":262},[19,139352,139353],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1601,139355],{"style":126488,"src":139356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[244,139358,139359],{"className":126632,"code":130789,"language":126634,"meta":169,"style":169},[22,139360,139361,139367,139383],{"__ignoreMap":169},[252,139362,139363,139365],{"class":254,"line":255},[252,139364,51751],{"class":51440},[252,139366,15712],{"class":262},[252,139368,139369,139371,139373,139375,139377,139379,139381],{"class":254,"line":170},[252,139370,71036],{"class":311},[252,139372,51577],{"class":262},[252,139374,480],{"class":311},[252,139376,51632],{"class":258},[252,139378,51661],{"class":311},[252,139380,130024],{"class":311},[252,139382,1429],{"class":262},[252,139384,139385],{"class":254,"line":1318},[252,139386,1704],{"class":262},[224,139388,139390],{"id":139389},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1601,139392],{"style":126488,"src":139393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1270,139395,139396,139401,139406],{},[210,139397,139398,139400],{},[22,139399,131835],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[210,139402,139403,139405],{},[22,139404,131835],{}," 里面有一个大的版心",[210,139407,139408,139409,139412,139413],{},"版心里面包含 1 号盒子，",[22,139410,139411],{},"mod_service"," 是服务模块，mod 是模块的意思",[1270,139414,139415,139420,139433,139449,139454],{},[210,139416,139132,139417,139419],{},[22,139418,139411],{}," 设置高度（80px）和下边框",[210,139421,139422,139423,139426,139427,139429,139430,139432],{},"在里面定义 ",[22,139424,139425],{},"ul > li"," ,每个",[22,139428,210],{}," 宽度是300px 高度是 50px，给每个",[22,139431,210],{},"设置35px的左内边距",[210,139434,139435,139436,139438,139439,139441,139442,139444,139445,123,139447,120373],{},"在每个",[22,139437,210],{},"里面，放一个 ",[22,139440,23049],{},"（里面放图标），一个",[22,139443,51751],{},"（里面放",[22,139446,51751],{},[22,139448,19],{},[210,139450,139132,139451,139453],{},[22,139452,23049],{},"设置浮动，让h5与这个div左右排列",[210,139455,139456],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139458,138471],{},[244,139460,139462],{"className":126632,"code":139461,"language":126634,"meta":169,"style":169},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[22,139463,139464,139470,139482,139494,139521],{"__ignoreMap":169},[252,139465,139466,139468],{"class":254,"line":255},[252,139467,134389],{"class":2102},[252,139469,15712],{"class":262},[252,139471,139472,139474,139476,139478,139480],{"class":254,"line":170},[252,139473,70708],{"class":311},[252,139475,51577],{"class":262},[252,139477,963],{"class":311},[252,139479,51632],{"class":258},[252,139481,1429],{"class":262},[252,139483,139484,139486,139488,139490,139492],{"class":254,"line":1318},[252,139485,70928],{"class":311},[252,139487,51577],{"class":262},[252,139489,963],{"class":311},[252,139491,51632],{"class":258},[252,139493,1429],{"class":262},[252,139495,139496,139498,139500,139502,139504,139506,139508,139510,139513,139515,139517,139519],{"class":254,"line":1333},[252,139497,70751],{"class":311},[252,139499,51577],{"class":262},[252,139501,61866],{"class":311},[252,139503,263],{"class":262},[252,139505,134428],{"class":5356},[252,139507,13854],{"class":262},[252,139509,61876],{"class":311},[252,139511,139512],{"class":311}," -10",[252,139514,51632],{"class":258},[252,139516,134447],{"class":311},[252,139518,51632],{"class":258},[252,139520,1429],{"class":262},[252,139522,139523],{"class":254,"line":1339},[252,139524,1704],{"class":262},[19,139526,138511],{},[244,139528,139529],{"className":126632,"code":139461,"language":126634,"meta":169,"style":169},[22,139530,139531,139537,139549,139561,139587],{"__ignoreMap":169},[252,139532,139533,139535],{"class":254,"line":255},[252,139534,134389],{"class":2102},[252,139536,15712],{"class":262},[252,139538,139539,139541,139543,139545,139547],{"class":254,"line":170},[252,139540,70708],{"class":311},[252,139542,51577],{"class":262},[252,139544,963],{"class":311},[252,139546,51632],{"class":258},[252,139548,1429],{"class":262},[252,139550,139551,139553,139555,139557,139559],{"class":254,"line":1318},[252,139552,70928],{"class":311},[252,139554,51577],{"class":262},[252,139556,963],{"class":311},[252,139558,51632],{"class":258},[252,139560,1429],{"class":262},[252,139562,139563,139565,139567,139569,139571,139573,139575,139577,139579,139581,139583,139585],{"class":254,"line":1333},[252,139564,70751],{"class":311},[252,139566,51577],{"class":262},[252,139568,61866],{"class":311},[252,139570,263],{"class":262},[252,139572,134428],{"class":5356},[252,139574,13854],{"class":262},[252,139576,61876],{"class":311},[252,139578,139512],{"class":311},[252,139580,51632],{"class":258},[252,139582,134447],{"class":311},[252,139584,51632],{"class":258},[252,139586,1429],{"class":262},[252,139588,139589],{"class":254,"line":1339},[252,139590,1704],{"class":262},[19,139592,139593],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1270,139595,139596,139599,139605,139611,139623],{},[210,139597,139598],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[210,139600,139601,139602,120373],{},"里面的布局利用 自定义列表来实现（",[22,139603,139604],{},"dl > dt + dd",[210,139606,139132,139607,139610],{},[22,139608,139609],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[210,139612,139132,139613,139616,139617,123,139619,139622],{},[22,139614,139615],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[22,139618,139615],{},[22,139620,139621],{},"dd","之间有些距离",[210,139624,139625],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139627,138471],{},[244,139629,139630],{"className":126632,"code":138821,"language":126634,"meta":169,"style":169},[22,139631,139632,139638,139650],{"__ignoreMap":169},[252,139633,139634,139636],{"class":254,"line":255},[252,139635,51751],{"class":51440},[252,139637,15712],{"class":262},[252,139639,139640,139642,139644,139646,139648],{"class":254,"line":170},[252,139641,70610],{"class":311},[252,139643,51577],{"class":262},[252,139645,454],{"class":311},[252,139647,51696],{"class":311},[252,139649,1429],{"class":262},[252,139651,139652],{"class":254,"line":1318},[252,139653,1704],{"class":262},[19,139655,138511],{},[244,139657,139658],{"className":126632,"code":138821,"language":126634,"meta":169,"style":169},[22,139659,139660,139666,139678],{"__ignoreMap":169},[252,139661,139662,139664],{"class":254,"line":255},[252,139663,51751],{"class":51440},[252,139665,15712],{"class":262},[252,139667,139668,139670,139672,139674,139676],{"class":254,"line":170},[252,139669,70610],{"class":311},[252,139671,51577],{"class":262},[252,139673,454],{"class":311},[252,139675,51696],{"class":311},[252,139677,1429],{"class":262},[252,139679,139680],{"class":254,"line":1318},[252,139681,1704],{"class":262},[19,139683,139684],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1270,139686,139687,139696,139699,139710],{},[210,139688,139689,139690,139692,139693,139695],{},"分为上下两块，上面是 ",[22,139691,131852],{}," 友情链接，下面是 ",[22,139694,131845],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[210,139697,139698],{},"把内容分别复制到相应模块中",[210,139700,139132,139701,139703,139704,139706,139707,139709],{},[22,139702,131852],{}," 设置 15px 的下外边距，给",[22,139705,131852],{}," 里面 的 ",[22,139708,501],{}," 标签设置 左右 3px 的外边距",[210,139711,139712,139713,139715],{},"给",[22,139714,131845],{}," 设置 20px 的行高",[19,139717,138471],{},[244,139719,139720],{"className":126632,"code":138821,"language":126634,"meta":169,"style":169},[22,139721,139722,139728,139740],{"__ignoreMap":169},[252,139723,139724,139726],{"class":254,"line":255},[252,139725,51751],{"class":51440},[252,139727,15712],{"class":262},[252,139729,139730,139732,139734,139736,139738],{"class":254,"line":170},[252,139731,70610],{"class":311},[252,139733,51577],{"class":262},[252,139735,454],{"class":311},[252,139737,51696],{"class":311},[252,139739,1429],{"class":262},[252,139741,139742],{"class":254,"line":1318},[252,139743,1704],{"class":262},[19,139745,138511],{},[244,139747,139748],{"className":126632,"code":138821,"language":126634,"meta":169,"style":169},[22,139749,139750,139756,139768],{"__ignoreMap":169},[252,139751,139752,139754],{"class":254,"line":255},[252,139753,51751],{"class":51440},[252,139755,15712],{"class":262},[252,139757,139758,139760,139762,139764,139766],{"class":254,"line":170},[252,139759,70610],{"class":311},[252,139761,51577],{"class":262},[252,139763,454],{"class":311},[252,139765,51696],{"class":311},[252,139767,1429],{"class":262},[252,139769,139770],{"class":254,"line":1318},[252,139771,1704],{"class":262},[19,139773,139774],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5266,139776,139777],{},"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":169,"searchDepth":170,"depth":170,"links":139779},[139780,139781,139782,139789],{"id":138060,"depth":170,"text":138061},{"id":138079,"depth":170,"text":138080},{"id":138106,"depth":170,"text":138107,"children":139783},[139784,139785,139786,139787,139788],{"id":138110,"depth":1318,"text":138111},{"id":138123,"depth":1318,"text":138124},{"id":138147,"depth":1318,"text":138148},{"id":138169,"depth":1318,"text":138170},{"id":138241,"depth":1318,"text":138242},{"id":138367,"depth":170,"text":138368,"children":139790},[139791,139792,139793,139794,139796],{"id":138371,"depth":1318,"text":138372},{"id":138378,"depth":1318,"text":138379},{"id":138550,"depth":1318,"text":138551},{"id":139091,"depth":1318,"text":139795},"15.4.4 nav导航模块制作",{"id":139389,"depth":1318,"text":139390},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138052,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139803,"title":139804,"body":139805,"description":178,"extension":179,"meta":142207,"navigation":181,"path":142208,"seo":142209,"stem":142210,"__hash__":142211},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139806,"toc":142184},[139807,139810,139814,139818,139830,139833,139836,139839,139850,139852,139876,139878,139902,139907,139910,139912,139948,139950,139986,139989,139994,139997,140000,140003,140033,140040,140043,140053,140055,140089,140092,140126,140132,140149,140151,140187,140189,140225,140230,140255,140257,140283,140285,140309,140316,140319,140383,140385,140427,140429,140469,140476,140481,140483,140513,140515,140545,140549,140552,140559,140571,140573,140599,140601,140625,140628,140630,140654,140660,140670,140672,140702,140704,140734,140741,140782,140784,140820,140822,140858,140862,140865,140868,140871,140877,140882,140885,140908,140911,140935,140938,140962,140967,140970,140973,140976,140979,140982,141056,141058,141088,141090,141120,141123,141126,141158,141162,141166,141180,141189,141192,141197,141199,141293,141295,141389,141412,141414,141438,141440,141464,141471,141474,141484,141486,141510,141515,141523,141525,141555,141560,141600,141602,141628,141630,141656,141660,141663,141668,141671,141675,141683,141690,141698,141700,141730,141732,141762,141770,141773,141776,141778,141808,141810,141840,141843,141848,141850,141874,141876,141900,141903,141988,141990,142014,142016,142040,142044,142046,142070,142072,142106,142110,142124,142127,142132,142135,142140,142143,142173,142181],[10,139808,139804],{"id":139809},"_16-品优购项目下篇-主体与页面开发",[14,139811,139813],{"id":139812},"_161-项目主体模块制作","16.1 项目主体模块制作",[224,139815,139817],{"id":139816},"_1611-首页制作","16.1.1 首页制作",[19,139819,139820,139822,139823,139825,139826,139829],{},[412,139821,102195],{}," 主体模块是 ",[412,139824,74198],{}," 里面专有的，注意需要新的样式文件 ",[412,139827,139828],{},"index.css，"," 就不要写在common.css中了",[1601,139831],{"style":126488,"src":139832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1601,139834],{"style":126488,"src":139835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,139837,139838],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1270,139840,139841,139844,139847],{},[210,139842,139843],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[210,139845,139846],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[210,139848,139849],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,139851,138471],{},[244,139853,139854],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,139855,139856,139862,139872],{"__ignoreMap":169},[252,139857,139858,139860],{"class":254,"line":255},[252,139859,130480],{"class":2102},[252,139861,15712],{"class":262},[252,139863,139864,139866,139868,139870],{"class":254,"line":170},[252,139865,131112],{"class":311},[252,139867,51577],{"class":262},[252,139869,23875],{"class":311},[252,139871,1429],{"class":262},[252,139873,139874],{"class":254,"line":1318},[252,139875,1704],{"class":262},[19,139877,138511],{},[244,139879,139880],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,139881,139882,139888,139898],{"__ignoreMap":169},[252,139883,139884,139886],{"class":254,"line":255},[252,139885,130480],{"class":2102},[252,139887,15712],{"class":262},[252,139889,139890,139892,139894,139896],{"class":254,"line":170},[252,139891,131112],{"class":311},[252,139893,51577],{"class":262},[252,139895,23875],{"class":311},[252,139897,1429],{"class":262},[252,139899,139900],{"class":254,"line":1318},[252,139901,1704],{"class":262},[207,139903,139904],{},[210,139905,139906],{},"左侧focus模块制作",[1601,139908],{"style":126488,"src":139909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,139911,138471],{},[244,139913,139914],{"className":126632,"code":127955,"language":126634,"meta":169,"style":169},[22,139915,139916,139924,139934,139944],{"__ignoreMap":169},[252,139917,139918,139920,139922],{"class":254,"line":255},[252,139919,53961],{"class":51440},[252,139921,62040],{"class":2102},[252,139923,15712],{"class":262},[252,139925,139926,139928,139930,139932],{"class":254,"line":170},[252,139927,127970],{"class":311},[252,139929,51577],{"class":262},[252,139931,55029],{"class":311},[252,139933,1429],{"class":262},[252,139935,139936,139938,139940,139942],{"class":254,"line":1318},[252,139937,70938],{"class":311},[252,139939,51577],{"class":262},[252,139941,54877],{"class":311},[252,139943,1429],{"class":262},[252,139945,139946],{"class":254,"line":1333},[252,139947,1704],{"class":262},[19,139949,138511],{},[244,139951,139952],{"className":126632,"code":127955,"language":126634,"meta":169,"style":169},[22,139953,139954,139962,139972,139982],{"__ignoreMap":169},[252,139955,139956,139958,139960],{"class":254,"line":255},[252,139957,53961],{"class":51440},[252,139959,62040],{"class":2102},[252,139961,15712],{"class":262},[252,139963,139964,139966,139968,139970],{"class":254,"line":170},[252,139965,127970],{"class":311},[252,139967,51577],{"class":262},[252,139969,55029],{"class":311},[252,139971,1429],{"class":262},[252,139973,139974,139976,139978,139980],{"class":254,"line":1318},[252,139975,70938],{"class":311},[252,139977,51577],{"class":262},[252,139979,54877],{"class":311},[252,139981,1429],{"class":262},[252,139983,139984],{"class":254,"line":1333},[252,139985,1704],{"class":262},[19,139987,139988],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[207,139990,139991],{"start":170},[210,139992,139993],{},"右侧newsflash模块制作",[1601,139995],{"style":126488,"src":139996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,139998,139999],{},"右侧的模块 分为上中下三个盒子",[19,140001,140002],{},"结构代码：",[244,140004,140005],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,140006,140007],{"__ignoreMap":169},[252,140008,140009,140011,140013,140015,140017,140019,140021,140023,140025,140027,140029,140031],{"class":254,"line":255},[252,140010,1173],{"class":262},[252,140012,1601],{"class":51440},[252,140014,55379],{"class":2102},[252,140016,308],{"class":262},[252,140018,134149],{"class":367},[252,140020,55387],{"class":2102},[252,140022,308],{"class":262},[252,140024,134156],{"class":367},[252,140026,134159],{"class":2102},[252,140028,308],{"class":262},[252,140030,134164],{"class":367},[252,140032,51447],{"class":262},[19,140034,140035,140036,140039],{},"1 号盒子为 ",[22,140037,140038],{},"news"," 新闻模块 高度为 165px",[1601,140041],{"style":126488,"src":140042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140044,140045,140046,140049,140050],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[22,140047,140048],{},"news-hd","，下面是 ",[22,140051,140052],{},"news-bd",[19,140054,140002],{},[244,140056,140057],{"className":127379,"code":130736,"language":127381,"meta":169,"style":169},[22,140058,140059,140063,140077,140081],{"__ignoreMap":169},[252,140060,140061],{"class":254,"line":255},[252,140062,130743],{"class":321},[252,140064,140065,140067,140069,140071,140073,140075],{"class":254,"line":170},[252,140066,1173],{"class":262},[252,140068,51751],{"class":51440},[252,140070,53626],{"class":2102},[252,140072,308],{"class":262},[252,140074,130756],{"class":367},[252,140076,51447],{"class":262},[252,140078,140079],{"class":254,"line":1318},[252,140080,130763],{"class":262},[252,140082,140083,140085,140087],{"class":254,"line":1333},[252,140084,51925],{"class":262},[252,140086,51751],{"class":51440},[252,140088,51447],{"class":262},[19,140090,140091],{},"样式代码：",[244,140093,140094],{"className":127379,"code":130736,"language":127381,"meta":169,"style":169},[22,140095,140096,140100,140114,140118],{"__ignoreMap":169},[252,140097,140098],{"class":254,"line":255},[252,140099,130743],{"class":321},[252,140101,140102,140104,140106,140108,140110,140112],{"class":254,"line":170},[252,140103,1173],{"class":262},[252,140105,51751],{"class":51440},[252,140107,53626],{"class":2102},[252,140109,308],{"class":262},[252,140111,130756],{"class":367},[252,140113,51447],{"class":262},[252,140115,140116],{"class":254,"line":1318},[252,140117,130763],{"class":262},[252,140119,140120,140122,140124],{"class":254,"line":1333},[252,140121,51925],{"class":262},[252,140123,51751],{"class":51440},[252,140125,51447],{"class":262},[19,140127,140128,140129,140131],{},"上面是",[22,140130,140048],{},"，设置高度是 33px，设置下边框",[1270,140133,140134,140140],{},[210,140135,140136,140137,140139],{},"里面放一个",[22,140138,23049],{}," 标题",[210,140141,140142,140143,140145,140146,140148],{},"放一个a",[22,140144,127],{},"，内容是 更多，然后让 ",[22,140147,501],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140150,140002],{},[244,140152,140153],{"className":126632,"code":138474,"language":126634,"meta":169,"style":169},[22,140154,140155,140163,140173,140183],{"__ignoreMap":169},[252,140156,140157,140159,140161],{"class":254,"line":255},[252,140158,51751],{"class":51440},[252,140160,137633],{"class":2102},[252,140162,15712],{"class":262},[252,140164,140165,140167,140169,140171],{"class":254,"line":170},[252,140166,137640],{"class":311},[252,140168,51577],{"class":262},[252,140170,7792],{"class":367},[252,140172,1429],{"class":262},[252,140174,140175,140177,140179,140181],{"class":254,"line":1318},[252,140176,128248],{"class":311},[252,140178,51577],{"class":262},[252,140180,61009],{"class":311},[252,140182,1429],{"class":262},[252,140184,140185],{"class":254,"line":1333},[252,140186,1704],{"class":262},[19,140188,140091],{},[244,140190,140191],{"className":126632,"code":138474,"language":126634,"meta":169,"style":169},[22,140192,140193,140201,140211,140221],{"__ignoreMap":169},[252,140194,140195,140197,140199],{"class":254,"line":255},[252,140196,51751],{"class":51440},[252,140198,137633],{"class":2102},[252,140200,15712],{"class":262},[252,140202,140203,140205,140207,140209],{"class":254,"line":170},[252,140204,137640],{"class":311},[252,140206,51577],{"class":262},[252,140208,7792],{"class":367},[252,140210,1429],{"class":262},[252,140212,140213,140215,140217,140219],{"class":254,"line":1318},[252,140214,128248],{"class":311},[252,140216,51577],{"class":262},[252,140218,61009],{"class":311},[252,140220,1429],{"class":262},[252,140222,140223],{"class":254,"line":1333},[252,140224,1704],{"class":262},[19,140226,140227,140228],{},"下面是",[22,140229,140052],{},[1270,140231,140232,140240],{},[210,140233,140234,140235,132,140237,140239],{},"里面包含 ",[22,140236,1270],{},[22,140238,210],{}," 还有链接",[210,140241,139712,140242,140244,140245,140247,140248,140251,140252],{},[22,140243,210],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[22,140246,131298],{}," 2.设置 ",[22,140249,140250],{},"white-space: nowrap;"," 3. 设置 ",[22,140253,140254],{},"text-overflow: ellipsis;",[19,140256,140002],{},[244,140258,140260],{"className":126632,"code":140259,"language":126634,"meta":169,"style":169},"div {\n  overflow: hidden;\n}\n",[22,140261,140262,140268,140279],{"__ignoreMap":169},[252,140263,140264,140266],{"class":254,"line":255},[252,140265,51751],{"class":51440},[252,140267,15712],{"class":262},[252,140269,140270,140273,140275,140277],{"class":254,"line":170},[252,140271,140272],{"class":311},"  overflow",[252,140274,51577],{"class":262},[252,140276,61854],{"class":311},[252,140278,1429],{"class":262},[252,140280,140281],{"class":254,"line":1318},[252,140282,1704],{"class":262},[19,140284,140091],{},[244,140286,140287],{"className":126632,"code":140259,"language":126634,"meta":169,"style":169},[22,140288,140289,140295,140305],{"__ignoreMap":169},[252,140290,140291,140293],{"class":254,"line":255},[252,140292,51751],{"class":51440},[252,140294,15712],{"class":262},[252,140296,140297,140299,140301,140303],{"class":254,"line":170},[252,140298,140272],{"class":311},[252,140300,51577],{"class":262},[252,140302,61854],{"class":311},[252,140304,1429],{"class":262},[252,140306,140307],{"class":254,"line":1318},[252,140308,1704],{"class":262},[19,140310,140311,140312,140315],{},"2 号盒子为 ",[22,140313,140314],{},"lifeservice"," 生活服务模块 高度为 209px",[1601,140317],{"style":126488,"src":140318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1270,140320,140321,140324,140334,140358,140369],{},[210,140322,140323],{},"设置边框（左右下边框）",[210,140325,140326,140327,140330,140331,140333],{},"里面的内容 是 ",[22,140328,140329],{},"ul > 12*li","，给",[22,140332,210],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[210,140335,140336,140337],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1270,140338,140339,140344,140353],{},[210,140340,140341,140343],{},[22,140342,140314],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[210,140345,140346,140347,140349,140350,140352],{},"可以让 ",[22,140348,140314],{}," 里面的 ",[22,140351,1270],{}," 宽度为 252，就可以装的下 4 个 小 li",[210,140354,140355,140357],{},[22,140356,140314],{}," 盒子 overflow 隐藏多余的部分就可以了",[210,140359,116603,140360,140362,140363,140365,140366,140368],{},[22,140361,210],{}," 里面放一个 ",[22,140364,704],{},"（里面放图标），下面的文本用 ",[22,140367,19],{}," 标签包裹",[210,140370,139132,140371,140373,140374,140376,140377,139166,140379,140382],{},[22,140372,704],{}," 设置 24px宽和28px的高（注意 ",[22,140375,704],{}," 是行内元素， 转成行内块），给 ",[22,140378,210],{},[22,140380,140381],{},"text-align:center"," 让里面内容居中显示",[19,140384,140002],{},[244,140386,140388],{"className":126632,"code":140387,"language":126634,"meta":169,"style":169},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[22,140389,140390,140408,140413,140423],{"__ignoreMap":169},[252,140391,140392,140394,140396,140398,140400,140402,140404,140406],{"class":254,"line":255},[252,140393,252],{"class":51440},[252,140395,12575],{"class":262},[252,140397,501],{"class":51440},[252,140399,12575],{"class":262},[252,140401,23692],{"class":51440},[252,140403,12575],{"class":262},[252,140405,412],{"class":51440},[252,140407,15712],{"class":262},[252,140409,140410],{"class":254,"line":170},[252,140411,140412],{"class":321},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[252,140414,140415,140417,140419,140421],{"class":254,"line":1318},[252,140416,128248],{"class":311},[252,140418,51577],{"class":262},[252,140420,128310],{"class":311},[252,140422,1429],{"class":262},[252,140424,140425],{"class":254,"line":1333},[252,140426,1704],{"class":262},[19,140428,140091],{},[244,140430,140431],{"className":126632,"code":140387,"language":126634,"meta":169,"style":169},[22,140432,140433,140451,140455,140465],{"__ignoreMap":169},[252,140434,140435,140437,140439,140441,140443,140445,140447,140449],{"class":254,"line":255},[252,140436,252],{"class":51440},[252,140438,12575],{"class":262},[252,140440,501],{"class":51440},[252,140442,12575],{"class":262},[252,140444,23692],{"class":51440},[252,140446,12575],{"class":262},[252,140448,412],{"class":51440},[252,140450,15712],{"class":262},[252,140452,140453],{"class":254,"line":170},[252,140454,140412],{"class":321},[252,140456,140457,140459,140461,140463],{"class":254,"line":1318},[252,140458,128248],{"class":311},[252,140460,51577],{"class":262},[252,140462,128310],{"class":311},[252,140464,1429],{"class":262},[252,140466,140467],{"class":254,"line":1333},[252,140468,1704],{"class":262},[19,140470,140471,140472,140475],{},"3 号盒子为 ",[22,140473,140474],{},"bargain"," 特价商品",[1270,140477,140478],{},[210,140479,140480],{},"这个比较简单，直接插入一张图片即可",[19,140482,140002],{},[244,140484,140485],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,140486,140487],{"__ignoreMap":169},[252,140488,140489,140491,140493,140495,140497,140499,140501,140503,140505,140507,140509,140511],{"class":254,"line":255},[252,140490,1173],{"class":262},[252,140492,1601],{"class":51440},[252,140494,55379],{"class":2102},[252,140496,308],{"class":262},[252,140498,134149],{"class":367},[252,140500,55387],{"class":2102},[252,140502,308],{"class":262},[252,140504,134156],{"class":367},[252,140506,134159],{"class":2102},[252,140508,308],{"class":262},[252,140510,134164],{"class":367},[252,140512,51447],{"class":262},[19,140514,140091],{},[244,140516,140517],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,140518,140519],{"__ignoreMap":169},[252,140520,140521,140523,140525,140527,140529,140531,140533,140535,140537,140539,140541,140543],{"class":254,"line":255},[252,140522,1173],{"class":262},[252,140524,1601],{"class":51440},[252,140526,55379],{"class":2102},[252,140528,308],{"class":262},[252,140530,134149],{"class":367},[252,140532,55387],{"class":2102},[252,140534,308],{"class":262},[252,140536,134156],{"class":367},[252,140538,134159],{"class":2102},[252,140540,308],{"class":262},[252,140542,134164],{"class":367},[252,140544,51447],{"class":262},[224,140546,140548],{"id":140547},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1601,140550],{"style":126488,"src":140551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140553,140554,140555,140558],{},"大盒子 ",[22,140556,140557],{},"recom"," 推荐模块 recommend",[1270,140560,140561],{},[210,140562,140563,140564,140566,140567,140570],{},"给这个 ",[22,140565,140557],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[22,140568,140569],{},"#ebebeb","），设置距离上边 12px",[19,140572,140002],{},[244,140574,140576],{"className":126632,"code":140575,"language":126634,"meta":169,"style":169},"div {\n  background-color: #f0f0f0;\n}\n",[22,140577,140578,140584,140595],{"__ignoreMap":169},[252,140579,140580,140582],{"class":254,"line":255},[252,140581,51751],{"class":51440},[252,140583,15712],{"class":262},[252,140585,140586,140588,140590,140593],{"class":254,"line":170},[252,140587,71018],{"class":311},[252,140589,51577],{"class":262},[252,140591,140592],{"class":311},"#f0f0f0",[252,140594,1429],{"class":262},[252,140596,140597],{"class":254,"line":1318},[252,140598,1704],{"class":262},[19,140600,140091],{},[244,140602,140603],{"className":126632,"code":140575,"language":126634,"meta":169,"style":169},[22,140604,140605,140611,140621],{"__ignoreMap":169},[252,140606,140607,140609],{"class":254,"line":255},[252,140608,51751],{"class":51440},[252,140610,15712],{"class":262},[252,140612,140613,140615,140617,140619],{"class":254,"line":170},[252,140614,71018],{"class":311},[252,140616,51577],{"class":262},[252,140618,140592],{"class":311},[252,140620,1429],{"class":262},[252,140622,140623],{"class":254,"line":1318},[252,140624,1704],{"class":262},[19,140626,140627],{},"里面包含 2 个盒子， 浮动即可",[19,140629,140002],{},[244,140631,140632],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,140633,140634,140640,140650],{"__ignoreMap":169},[252,140635,140636,140638],{"class":254,"line":255},[252,140637,130480],{"class":2102},[252,140639,15712],{"class":262},[252,140641,140642,140644,140646,140648],{"class":254,"line":170},[252,140643,131112],{"class":311},[252,140645,51577],{"class":262},[252,140647,23875],{"class":311},[252,140649,1429],{"class":262},[252,140651,140652],{"class":254,"line":1318},[252,140653,1704],{"class":262},[19,140655,140656,140657],{},"1 号盒子 ",[22,140658,140659],{},"recom_hd",[1270,140661,140662,140665],{},[210,140663,140664],{},"设置宽度205px，高度163px",[210,140666,140136,140667,140669],{},[22,140668,1601],{},"标签，插入图片即可",[19,140671,140002],{},[244,140673,140674],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,140675,140676],{"__ignoreMap":169},[252,140677,140678,140680,140682,140684,140686,140688,140690,140692,140694,140696,140698,140700],{"class":254,"line":255},[252,140679,1173],{"class":262},[252,140681,1601],{"class":51440},[252,140683,55379],{"class":2102},[252,140685,308],{"class":262},[252,140687,134149],{"class":367},[252,140689,55387],{"class":2102},[252,140691,308],{"class":262},[252,140693,134156],{"class":367},[252,140695,134159],{"class":2102},[252,140697,308],{"class":262},[252,140699,134164],{"class":367},[252,140701,51447],{"class":262},[19,140703,140091],{},[244,140705,140706],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,140707,140708],{"__ignoreMap":169},[252,140709,140710,140712,140714,140716,140718,140720,140722,140724,140726,140728,140730,140732],{"class":254,"line":255},[252,140711,1173],{"class":262},[252,140713,1601],{"class":51440},[252,140715,55379],{"class":2102},[252,140717,308],{"class":262},[252,140719,134149],{"class":367},[252,140721,55387],{"class":2102},[252,140723,308],{"class":262},[252,140725,134156],{"class":367},[252,140727,134159],{"class":2102},[252,140729,308],{"class":262},[252,140731,134164],{"class":367},[252,140733,51447],{"class":262},[19,140735,140736,140737,140740],{},"2 号盒子 ",[22,140738,140739],{},"recom_bd"," ，注意里面的小竖线",[1270,140742,140743,140754,140757,140762,140767],{},[210,140744,140745,140746,140748,140749,140751,140752],{},"右侧结构里面放 ",[22,140747,1270],{}," 包含 4个 ",[22,140750,210],{},"，每个li里面包含一个",[22,140753,1601],{},[210,140755,140756],{},"直接利用切片工具把里面的内容当成一张图片",[210,140758,139132,140759,140761],{},[22,140760,210],{}," 设置浮动",[210,140763,139132,140764,140766],{},[22,140765,1601],{}," 设置宽高，宽度 248px，高度 163px",[210,140768,140769,140770,140330,140773,140775,140776,140778,140779],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[22,140771,140772],{},"top 10px",[22,140774,210],{},"设置相对定位（注意，最后一个",[22,140777,210],{},"不用设置伪元素），可以利用 ",[22,140780,140781],{},"nth-child(-n+3){...}",[19,140783,140002],{},[244,140785,140786],{"className":126632,"code":138474,"language":126634,"meta":169,"style":169},[22,140787,140788,140796,140806,140816],{"__ignoreMap":169},[252,140789,140790,140792,140794],{"class":254,"line":255},[252,140791,51751],{"class":51440},[252,140793,137633],{"class":2102},[252,140795,15712],{"class":262},[252,140797,140798,140800,140802,140804],{"class":254,"line":170},[252,140799,137640],{"class":311},[252,140801,51577],{"class":262},[252,140803,7792],{"class":367},[252,140805,1429],{"class":262},[252,140807,140808,140810,140812,140814],{"class":254,"line":1318},[252,140809,128248],{"class":311},[252,140811,51577],{"class":262},[252,140813,61009],{"class":311},[252,140815,1429],{"class":262},[252,140817,140818],{"class":254,"line":1333},[252,140819,1704],{"class":262},[19,140821,140091],{},[244,140823,140824],{"className":126632,"code":138474,"language":126634,"meta":169,"style":169},[22,140825,140826,140834,140844,140854],{"__ignoreMap":169},[252,140827,140828,140830,140832],{"class":254,"line":255},[252,140829,51751],{"class":51440},[252,140831,137633],{"class":2102},[252,140833,15712],{"class":262},[252,140835,140836,140838,140840,140842],{"class":254,"line":170},[252,140837,137640],{"class":311},[252,140839,51577],{"class":262},[252,140841,7792],{"class":367},[252,140843,1429],{"class":262},[252,140845,140846,140848,140850,140852],{"class":254,"line":1318},[252,140847,128248],{"class":311},[252,140849,51577],{"class":262},[252,140851,61009],{"class":311},[252,140853,1429],{"class":262},[252,140855,140856],{"class":254,"line":1333},[252,140857,1704],{"class":262},[224,140859,140861],{"id":140860},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1601,140863],{"style":126488,"src":140864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,140866,140867],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,140869,140870],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,140872,140873,140876],{},[22,140874,140875],{},"box_hd"," 制作",[19,140878,140656,140879,140881],{},[22,140880,140875],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1601,140883],{"style":126488,"src":140884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1270,140886,140887,140892,140897,140900],{},[210,140888,140889,140891],{},[22,140890,140875],{}," 给 30px 的高度，2个像素的下边框",[210,140893,140894,140895],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[22,140896,139143],{},[210,140898,140899],{},"左侧盒左浮动，右侧盒子右浮动",[210,140901,140902,140904,140905,140907],{},[22,140903,501],{},"标签之间的距离用左右的",[22,140906,31023],{},"撑开即可",[19,140909,140910],{},"结构代码",[244,140912,140913],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,140914,140915,140921,140931],{"__ignoreMap":169},[252,140916,140917,140919],{"class":254,"line":255},[252,140918,130480],{"class":2102},[252,140920,15712],{"class":262},[252,140922,140923,140925,140927,140929],{"class":254,"line":170},[252,140924,131112],{"class":311},[252,140926,51577],{"class":262},[252,140928,23875],{"class":311},[252,140930,1429],{"class":262},[252,140932,140933],{"class":254,"line":1318},[252,140934,1704],{"class":262},[19,140936,140937],{},"样式代码",[244,140939,140940],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,140941,140942,140948,140958],{"__ignoreMap":169},[252,140943,140944,140946],{"class":254,"line":255},[252,140945,130480],{"class":2102},[252,140947,15712],{"class":262},[252,140949,140950,140952,140954,140956],{"class":254,"line":170},[252,140951,131112],{"class":311},[252,140953,51577],{"class":262},[252,140955,23875],{"class":311},[252,140957,1429],{"class":262},[252,140959,140960],{"class":254,"line":1318},[252,140961,1704],{"class":262},[19,140963,140964,140876],{},[22,140965,140966],{},"box_bd",[19,140968,140969],{},"2 号盒子 box_bd，不要给高度",[1601,140971],{"style":126488,"src":140972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,140974,140975],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,140977,140978],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,140980,140981],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1270,140983,140984,140996,141012],{},[210,140985,140986,140988,140989,140992,140993,140995],{},[22,140987,140966],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[22,140990,140991],{},"tab_content","，在",[22,140994,140991],{}," 里面包裹tab选项卡对应的内容",[210,140997,140998,140999,141002,141003,141005,141006,141008,141009,141011],{},"内容被一个大盒子包裹（",[22,141000,141001],{},"tab_list_item","），里面是 ",[22,141004,1270],{}," 包裹 5个 ",[22,141007,210],{},"，每个",[22,141010,210],{},"设置对应的宽度，然后设置浮动",[210,141013,141014,141015,141017,141018,141020,141021],{},"而这5个",[22,141016,210],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[22,141019,210],{},"设置",[1270,141022,141023,141041,141044],{},[210,141024,141025,141026,141028,141029,141031,141032,141034,141035,141037,141038,141040],{},"第一个小 ",[22,141027,210],{}," 分为上下结构，上面是 ",[22,141030,1270],{}," 包裹 ",[22,141033,210],{}," ，",[22,141036,210],{},"里面包裹 ",[22,141039,501],{},"，下面插入一张图片",[210,141042,141043],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[210,141045,141046,141047,141049,141050,141052,141053,141055],{},"后面的小 ",[22,141048,210],{}," 里面先放一个",[22,141051,501],{},"标签，然后在",[22,141054,501],{},"标签里面插入图片即可",[19,141057,140910],{},[244,141059,141060],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,141061,141062],{"__ignoreMap":169},[252,141063,141064,141066,141068,141070,141072,141074,141076,141078,141080,141082,141084,141086],{"class":254,"line":255},[252,141065,1173],{"class":262},[252,141067,1601],{"class":51440},[252,141069,55379],{"class":2102},[252,141071,308],{"class":262},[252,141073,134149],{"class":367},[252,141075,55387],{"class":2102},[252,141077,308],{"class":262},[252,141079,134156],{"class":367},[252,141081,134159],{"class":2102},[252,141083,308],{"class":262},[252,141085,134164],{"class":367},[252,141087,51447],{"class":262},[19,141089,140937],{},[244,141091,141092],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,141093,141094],{"__ignoreMap":169},[252,141095,141096,141098,141100,141102,141104,141106,141108,141110,141112,141114,141116,141118],{"class":254,"line":255},[252,141097,1173],{"class":262},[252,141099,1601],{"class":51440},[252,141101,55379],{"class":2102},[252,141103,308],{"class":262},[252,141105,134149],{"class":367},[252,141107,55387],{"class":2102},[252,141109,308],{"class":262},[252,141111,134156],{"class":367},[252,141113,134159],{"class":2102},[252,141115,308],{"class":262},[252,141117,134164],{"class":367},[252,141119,51447],{"class":262},[19,141121,141122],{},"tab栏切换需求！！！！！！介绍：",[1601,141124],{"style":126488,"src":141125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1270,141127,141128,141136,141142,141145],{},[210,141129,141130,141133,141134],{},[22,141131,141132],{},"tab","栏的布局是 ",[22,141135,139143],{},[210,141137,141138,141139,141141],{},"有多少个",[22,141140,141132],{},"选项卡，那么对应就有多少个内容",[210,141143,141144],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[210,141146,141147,141148,141151,141152,141154,141155,141157],{},"等后面我们学习了",[22,141149,141150],{},"js","之后，我们就会配合",[22,141153,141150],{},"来实现，",[22,141156,141132],{},"栏的切换",[14,141159,141161],{"id":141160},"_162-列表制作","16.2 列表制作",[224,141163,141165],{"id":141164},"_1621-准备工作","16.2.1 准备工作",[1270,141167,141168,141171,141174,141177],{},[210,141169,141170],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[210,141172,141173],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[210,141175,141176],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[210,141178,141179],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[224,141181,141183,141184,132,141186,141188],{"id":141182},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[22,141185,131637],{},[22,141187,53853],{}," 修改",[1601,141190],{"style":126488,"src":141191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1270,141193,141194],{},[210,141195,141196],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141198,140002],{},[244,141200,141201],{"className":126632,"code":132064,"language":126634,"meta":169,"style":169},[22,141202,141203,141207,141221,141225,141239,141243,141257,141261,141275,141279],{"__ignoreMap":169},[252,141204,141205],{"class":254,"line":255},[252,141206,132071],{"class":321},[252,141208,141209,141211,141213,141215,141217,141219],{"class":254,"line":170},[252,141210,132076],{"class":2102},[252,141212,79946],{"class":262},[252,141214,128992],{"class":311},[252,141216,51577],{"class":262},[252,141218,132085],{"class":311},[252,141220,129562],{"class":262},[252,141222,141223],{"class":254,"line":1318},[252,141224,132092],{"class":321},[252,141226,141227,141229,141231,141233,141235,141237],{"class":254,"line":1333},[252,141228,132097],{"class":2102},[252,141230,79946],{"class":262},[252,141232,128992],{"class":311},[252,141234,51577],{"class":262},[252,141236,54904],{"class":311},[252,141238,129562],{"class":262},[252,141240,141241],{"class":254,"line":1339},[252,141242,132112],{"class":321},[252,141244,141245,141247,141249,141251,141253,141255],{"class":254,"line":1353},[252,141246,132117],{"class":2102},[252,141248,79946],{"class":262},[252,141250,128992],{"class":311},[252,141252,51577],{"class":262},[252,141254,54971],{"class":311},[252,141256,129562],{"class":262},[252,141258,141259],{"class":254,"line":1359},[252,141260,132132],{"class":321},[252,141262,141263,141265,141267,141269,141271,141273],{"class":254,"line":1450},[252,141264,132137],{"class":2102},[252,141266,79946],{"class":262},[252,141268,128992],{"class":311},[252,141270,51577],{"class":262},[252,141272,86371],{"class":311},[252,141274,129562],{"class":262},[252,141276,141277],{"class":254,"line":1456},[252,141278,132152],{"class":321},[252,141280,141281,141283,141285,141287,141289,141291],{"class":254,"line":1468},[252,141282,132157],{"class":2102},[252,141284,79946],{"class":262},[252,141286,128992],{"class":311},[252,141288,51577],{"class":262},[252,141290,132166],{"class":311},[252,141292,129562],{"class":262},[19,141294,140091],{},[244,141296,141297],{"className":126632,"code":132064,"language":126634,"meta":169,"style":169},[22,141298,141299,141303,141317,141321,141335,141339,141353,141357,141371,141375],{"__ignoreMap":169},[252,141300,141301],{"class":254,"line":255},[252,141302,132071],{"class":321},[252,141304,141305,141307,141309,141311,141313,141315],{"class":254,"line":170},[252,141306,132076],{"class":2102},[252,141308,79946],{"class":262},[252,141310,128992],{"class":311},[252,141312,51577],{"class":262},[252,141314,132085],{"class":311},[252,141316,129562],{"class":262},[252,141318,141319],{"class":254,"line":1318},[252,141320,132092],{"class":321},[252,141322,141323,141325,141327,141329,141331,141333],{"class":254,"line":1333},[252,141324,132097],{"class":2102},[252,141326,79946],{"class":262},[252,141328,128992],{"class":311},[252,141330,51577],{"class":262},[252,141332,54904],{"class":311},[252,141334,129562],{"class":262},[252,141336,141337],{"class":254,"line":1339},[252,141338,132112],{"class":321},[252,141340,141341,141343,141345,141347,141349,141351],{"class":254,"line":1353},[252,141342,132117],{"class":2102},[252,141344,79946],{"class":262},[252,141346,128992],{"class":311},[252,141348,51577],{"class":262},[252,141350,54971],{"class":311},[252,141352,129562],{"class":262},[252,141354,141355],{"class":254,"line":1359},[252,141356,132132],{"class":321},[252,141358,141359,141361,141363,141365,141367,141369],{"class":254,"line":1450},[252,141360,132137],{"class":2102},[252,141362,79946],{"class":262},[252,141364,128992],{"class":311},[252,141366,51577],{"class":262},[252,141368,86371],{"class":311},[252,141370,129562],{"class":262},[252,141372,141373],{"class":254,"line":1456},[252,141374,132152],{"class":321},[252,141376,141377,141379,141381,141383,141385,141387],{"class":254,"line":1468},[252,141378,132157],{"class":2102},[252,141380,79946],{"class":262},[252,141382,128992],{"class":311},[252,141384,51577],{"class":262},[252,141386,132166],{"class":311},[252,141388,129562],{"class":262},[1270,141390,141391,141402],{},[210,141392,141393,141394,141397,141398,132,141400],{},"1 号盒子左侧浮动 ",[22,141395,141396],{},"sk_list"," 里面包含 ",[22,141399,1270],{},[22,141401,210],{},[210,141403,141404,141405,141397,141408,132,141410],{},"2 号盒子左侧浮动 ",[22,141406,141407],{},"sk_con",[22,141409,1270],{},[22,141411,210],{},[19,141413,140002],{},[244,141415,141416],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,141417,141418,141424,141434],{"__ignoreMap":169},[252,141419,141420,141422],{"class":254,"line":255},[252,141421,130480],{"class":2102},[252,141423,15712],{"class":262},[252,141425,141426,141428,141430,141432],{"class":254,"line":170},[252,141427,131112],{"class":311},[252,141429,51577],{"class":262},[252,141431,23875],{"class":311},[252,141433,1429],{"class":262},[252,141435,141436],{"class":254,"line":1318},[252,141437,1704],{"class":262},[19,141439,140091],{},[244,141441,141442],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,141443,141444,141450,141460],{"__ignoreMap":169},[252,141445,141446,141448],{"class":254,"line":255},[252,141447,130480],{"class":2102},[252,141449,15712],{"class":262},[252,141451,141452,141454,141456,141458],{"class":254,"line":170},[252,141453,131112],{"class":311},[252,141455,51577],{"class":262},[252,141457,23875],{"class":311},[252,141459,1429],{"class":262},[252,141461,141462],{"class":254,"line":1318},[252,141463,1704],{"class":262},[224,141465,141467,141468],{"id":141466},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[22,141469,141470],{},"sk_container",[1601,141472],{"style":126488,"src":141473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1270,141475,141476,141481],{},[210,141477,140656,141478,141480],{},[22,141479,141470],{}," 给宽度 1200，不要给高度",[210,141482,141483],{},"一定不要忘记清除浮动",[19,141485,140002],{},[244,141487,141488],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,141489,141490,141496,141506],{"__ignoreMap":169},[252,141491,141492,141494],{"class":254,"line":255},[252,141493,130480],{"class":2102},[252,141495,15712],{"class":262},[252,141497,141498,141500,141502,141504],{"class":254,"line":170},[252,141499,131112],{"class":311},[252,141501,51577],{"class":262},[252,141503,23875],{"class":311},[252,141505,1429],{"class":262},[252,141507,141508],{"class":254,"line":1318},[252,141509,1704],{"class":262},[207,141511,141512],{},[210,141513,141514],{},"sk_hd制作",[1270,141516,141517],{},[210,141518,140736,141519,141522],{},[22,141520,141521],{},"sk_hd"," ，插入图片即可",[19,141524,140002],{},[244,141526,141527],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,141528,141529],{"__ignoreMap":169},[252,141530,141531,141533,141535,141537,141539,141541,141543,141545,141547,141549,141551,141553],{"class":254,"line":255},[252,141532,1173],{"class":262},[252,141534,1601],{"class":51440},[252,141536,55379],{"class":2102},[252,141538,308],{"class":262},[252,141540,134149],{"class":367},[252,141542,55387],{"class":2102},[252,141544,308],{"class":262},[252,141546,134156],{"class":367},[252,141548,134159],{"class":2102},[252,141550,308],{"class":262},[252,141552,134164],{"class":367},[252,141554,51447],{"class":262},[207,141556,141557],{"start":170},[210,141558,141559],{},"sk_bd制作",[1270,141561,141562],{},[210,141563,141564,141565,141568,141569,132,141571,141573],{},"3 号盒子 ",[22,141566,141567],{},"sk_bd"," ，里面包含很多的 ",[22,141570,1270],{},[22,141572,210],{},[1270,141574,141575,141584],{},[210,141576,141577,141578,141580,141581,141583],{},"当鼠标移入到 ",[22,141579,210],{}," 上面的时候显示红色的边框，在这里先给 ",[22,141582,210],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[210,141585,141586,141587,141589,141590,141592,141593,141596,141597,141599],{},"由于给每个 ",[22,141588,210],{}," 都设置了外边距，导致一行的最后一个 ",[22,141591,210],{}," 掉了下来，在这里我们利用 ",[22,141594,141595],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[22,141598,210],{},"，去掉外边距就好了",[19,141601,140002],{},[244,141603,141604],{"className":126632,"code":138821,"language":126634,"meta":169,"style":169},[22,141605,141606,141612,141624],{"__ignoreMap":169},[252,141607,141608,141610],{"class":254,"line":255},[252,141609,51751],{"class":51440},[252,141611,15712],{"class":262},[252,141613,141614,141616,141618,141620,141622],{"class":254,"line":170},[252,141615,70610],{"class":311},[252,141617,51577],{"class":262},[252,141619,454],{"class":311},[252,141621,51696],{"class":311},[252,141623,1429],{"class":262},[252,141625,141626],{"class":254,"line":1318},[252,141627,1704],{"class":262},[19,141629,140091],{},[244,141631,141632],{"className":126632,"code":138821,"language":126634,"meta":169,"style":169},[22,141633,141634,141640,141652],{"__ignoreMap":169},[252,141635,141636,141638],{"class":254,"line":255},[252,141637,51751],{"class":51440},[252,141639,15712],{"class":262},[252,141641,141642,141644,141646,141648,141650],{"class":254,"line":170},[252,141643,70610],{"class":311},[252,141645,51577],{"class":262},[252,141647,454],{"class":311},[252,141649,51696],{"class":311},[252,141651,1429],{"class":262},[252,141653,141654],{"class":254,"line":1318},[252,141655,1704],{"class":262},[14,141657,141659],{"id":141658},"_163-注册页面制作","16.3 注册页面制作",[1601,141661],{"style":126488,"src":141662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141664,141665,141667],{},[412,141666,9165],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1601,141669],{"style":126488,"src":141670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[224,141672,141674],{"id":141673},"_1631-准备工作","16.3.1 准备工作",[1270,141676,141677,141680],{},[210,141678,141679],{},"创建register.html，引入 base.css，引入favicon图标",[210,141681,141682],{},"创建register.css ，在html页面进行引入",[224,141684,141686,141687,141689],{"id":141685},"_1632-header-头部实现","16.3.2 ",[22,141688,131637],{}," 头部实现",[1270,141691,141692,141695],{},[210,141693,141694],{},"整个内容用 版心 进行包裹",[210,141696,141697],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141699,140002],{},[244,141701,141702],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,141703,141704],{"__ignoreMap":169},[252,141705,141706,141708,141710,141712,141714,141716,141718,141720,141722,141724,141726,141728],{"class":254,"line":255},[252,141707,1173],{"class":262},[252,141709,1601],{"class":51440},[252,141711,55379],{"class":2102},[252,141713,308],{"class":262},[252,141715,134149],{"class":367},[252,141717,55387],{"class":2102},[252,141719,308],{"class":262},[252,141721,134156],{"class":367},[252,141723,134159],{"class":2102},[252,141725,308],{"class":262},[252,141727,134164],{"class":367},[252,141729,51447],{"class":262},[19,141731,140091],{},[244,141733,141734],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,141735,141736],{"__ignoreMap":169},[252,141737,141738,141740,141742,141744,141746,141748,141750,141752,141754,141756,141758,141760],{"class":254,"line":255},[252,141739,1173],{"class":262},[252,141741,1601],{"class":51440},[252,141743,55379],{"class":2102},[252,141745,308],{"class":262},[252,141747,134149],{"class":367},[252,141749,55387],{"class":2102},[252,141751,308],{"class":262},[252,141753,134156],{"class":367},[252,141755,134159],{"class":2102},[252,141757,308],{"class":262},[252,141759,134164],{"class":367},[252,141761,51447],{"class":262},[224,141763,141765,141766,141769],{"id":141764},"_1633-registerarea-主体模块实现","16.3.3 ",[22,141767,141768],{},"registerarea"," 主体模块实现",[1601,141771],{"style":126488,"src":141772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,141774,141775],{},"整个大盒子 高度为 522px，设置4个边框",[19,141777,140002],{},[244,141779,141780],{"className":126632,"code":130789,"language":126634,"meta":169,"style":169},[22,141781,141782,141788,141804],{"__ignoreMap":169},[252,141783,141784,141786],{"class":254,"line":255},[252,141785,51751],{"class":51440},[252,141787,15712],{"class":262},[252,141789,141790,141792,141794,141796,141798,141800,141802],{"class":254,"line":170},[252,141791,71036],{"class":311},[252,141793,51577],{"class":262},[252,141795,480],{"class":311},[252,141797,51632],{"class":258},[252,141799,51661],{"class":311},[252,141801,130024],{"class":311},[252,141803,1429],{"class":262},[252,141805,141806],{"class":254,"line":1318},[252,141807,1704],{"class":262},[19,141809,140091],{},[244,141811,141812],{"className":126632,"code":130789,"language":126634,"meta":169,"style":169},[22,141813,141814,141820,141836],{"__ignoreMap":169},[252,141815,141816,141818],{"class":254,"line":255},[252,141817,51751],{"class":51440},[252,141819,15712],{"class":262},[252,141821,141822,141824,141826,141828,141830,141832,141834],{"class":254,"line":170},[252,141823,71036],{"class":311},[252,141825,51577],{"class":262},[252,141827,480],{"class":311},[252,141829,51632],{"class":258},[252,141831,51661],{"class":311},[252,141833,130024],{"class":311},[252,141835,1429],{"class":262},[252,141837,141838],{"class":254,"line":1318},[252,141839,1704],{"class":262},[19,141841,141842],{},"1号盒子 是一个 h3 标签，放标题",[1270,141844,141845],{},[210,141846,141847],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,141849,140002],{},[244,141851,141852],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,141853,141854,141860,141870],{"__ignoreMap":169},[252,141855,141856,141858],{"class":254,"line":255},[252,141857,130480],{"class":2102},[252,141859,15712],{"class":262},[252,141861,141862,141864,141866,141868],{"class":254,"line":170},[252,141863,131112],{"class":311},[252,141865,51577],{"class":262},[252,141867,23875],{"class":311},[252,141869,1429],{"class":262},[252,141871,141872],{"class":254,"line":1318},[252,141873,1704],{"class":262},[19,141875,140091],{},[244,141877,141878],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,141879,141880,141886,141896],{"__ignoreMap":169},[252,141881,141882,141884],{"class":254,"line":255},[252,141883,130480],{"class":2102},[252,141885,15712],{"class":262},[252,141887,141888,141890,141892,141894],{"class":254,"line":170},[252,141889,131112],{"class":311},[252,141891,51577],{"class":262},[252,141893,23875],{"class":311},[252,141895,1429],{"class":262},[252,141897,141898],{"class":254,"line":1318},[252,141899,1704],{"class":262},[19,141901,141902],{},"2号盒子 里面放注册的内容",[1270,141904,141905,141908,141917,141931,141944,141947,141950,141968,141982],{},[210,141906,141907],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[210,141909,141910,141911,141913,141914,141916],{},"里面的内容利用 ",[22,141912,1270],{}," 包含 ",[22,141915,210],{}," 来实现的（不需要用表格）",[210,141918,139146,141919,141921,141922,141924,141925,141927,141928,141930],{},[22,141920,210],{}," 里面，左侧放 ",[22,141923,33748],{}," 标签， 中间放",[22,141926,53961],{}," 标签， 右侧放 ",[22,141929,252],{}," 提示信息",[210,141932,141933,141934,141936,141937,141939,141940,141943],{},"左侧 ",[22,141935,33748],{},"里面的文字都是右对齐，我们可以给",[22,141938,33748],{},"设置一个宽度（88px），然后利用",[22,141941,141942],{},"text-align"," 来设置右对齐",[210,141945,141946],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[210,141948,141949],{},"右侧 span修饰一下文字颜色",[210,141951,141952,141953],{},"提示信息的样式优化",[1270,141954,141955,141958,141961],{},[210,141956,141957],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[210,141959,141960],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[210,141962,141963,141964,141967],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[22,141965,141966],{},"vertical-algin"," 来设置 图片与文字对齐方式",[210,141969,141970,141971],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1270,141972,141973,141979],{},[210,141974,141975,141976,141978],{},"设置 ",[22,141977,23692],{}," 的 左右 12px 的内边距，设置一下文字颜色",[210,141980,141981],{},"分别设置 背景颜色",[210,141983,141984,141985,141987],{},"同意协议 和 完成注册 都是用 ",[22,141986,210],{}," 进行包裹",[19,141989,140002],{},[244,141991,141992],{"className":126632,"code":140575,"language":126634,"meta":169,"style":169},[22,141993,141994,142000,142010],{"__ignoreMap":169},[252,141995,141996,141998],{"class":254,"line":255},[252,141997,51751],{"class":51440},[252,141999,15712],{"class":262},[252,142001,142002,142004,142006,142008],{"class":254,"line":170},[252,142003,71018],{"class":311},[252,142005,51577],{"class":262},[252,142007,140592],{"class":311},[252,142009,1429],{"class":262},[252,142011,142012],{"class":254,"line":1318},[252,142013,1704],{"class":262},[19,142015,140091],{},[244,142017,142018],{"className":126632,"code":140575,"language":126634,"meta":169,"style":169},[22,142019,142020,142026,142036],{"__ignoreMap":169},[252,142021,142022,142024],{"class":254,"line":255},[252,142023,51751],{"class":51440},[252,142025,15712],{"class":262},[252,142027,142028,142030,142032,142034],{"class":254,"line":170},[252,142029,71018],{"class":311},[252,142031,51577],{"class":262},[252,142033,140592],{"class":311},[252,142035,1429],{"class":262},[252,142037,142038],{"class":254,"line":1318},[252,142039,1704],{"class":262},[224,142041,142043],{"id":142042},"_1634-底部实现","16.3.4 底部实现",[19,142045,140002],{},[244,142047,142048],{"className":126632,"code":140575,"language":126634,"meta":169,"style":169},[22,142049,142050,142056,142066],{"__ignoreMap":169},[252,142051,142052,142054],{"class":254,"line":255},[252,142053,51751],{"class":51440},[252,142055,15712],{"class":262},[252,142057,142058,142060,142062,142064],{"class":254,"line":170},[252,142059,71018],{"class":311},[252,142061,51577],{"class":262},[252,142063,140592],{"class":311},[252,142065,1429],{"class":262},[252,142067,142068],{"class":254,"line":1318},[252,142069,1704],{"class":262},[19,142071,140091],{},[244,142073,142074],{"className":127379,"code":130736,"language":127381,"meta":169,"style":169},[22,142075,142076,142080,142094,142098],{"__ignoreMap":169},[252,142077,142078],{"class":254,"line":255},[252,142079,130743],{"class":321},[252,142081,142082,142084,142086,142088,142090,142092],{"class":254,"line":170},[252,142083,1173],{"class":262},[252,142085,51751],{"class":51440},[252,142087,53626],{"class":2102},[252,142089,308],{"class":262},[252,142091,130756],{"class":367},[252,142093,51447],{"class":262},[252,142095,142096],{"class":254,"line":1318},[252,142097,130763],{"class":262},[252,142099,142100,142102,142104],{"class":254,"line":1333},[252,142101,51925],{"class":262},[252,142103,51751],{"class":51440},[252,142105,51447],{"class":262},[14,142107,142109],{"id":142108},"_164-项目总结","16.4 项目总结",[207,142111,142112,142115,142118,142121],{},[210,142113,142114],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[210,142116,142117],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[210,142119,142120],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[210,142122,142123],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1601,142125],{"style":126488,"src":142126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[207,142128,142129],{"start":1339},[210,142130,142131],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1601,142133],{"style":126488,"src":142134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[207,142136,142137],{"start":1353},[210,142138,142139],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1601,142141],{"style":126488,"src":142142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[244,142144,142145],{"className":127379,"code":136789,"language":127381,"meta":169,"style":169},[22,142146,142147],{"__ignoreMap":169},[252,142148,142149,142151,142153,142155,142157,142159,142161,142163,142165,142167,142169,142171],{"class":254,"line":255},[252,142150,1173],{"class":262},[252,142152,53961],{"class":51440},[252,142154,53964],{"class":2102},[252,142156,308],{"class":262},[252,142158,62839],{"class":367},[252,142160,15060],{"class":2102},[252,142162,308],{"class":262},[252,142164,136810],{"class":367},[252,142166,61160],{"class":2102},[252,142168,308],{"class":262},[252,142170,136817],{"class":367},[252,142172,51447],{"class":262},[207,142174,142175,142178],{"start":1359},[210,142176,142177],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[210,142179,142180],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5266,142182,142183],{},"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":169,"searchDepth":170,"depth":170,"links":142185},[142186,142191,142198,142206],{"id":139812,"depth":170,"text":139813,"children":142187},[142188,142189,142190],{"id":139816,"depth":1318,"text":139817},{"id":140547,"depth":1318,"text":140548},{"id":140860,"depth":1318,"text":140861},{"id":141160,"depth":170,"text":141161,"children":142192},[142193,142194,142196],{"id":141164,"depth":1318,"text":141165},{"id":141182,"depth":1318,"text":142195},"16.2.2 列表页 header 和 nav 修改",{"id":141466,"depth":1318,"text":142197},"16.2.3 列表页主体 sk_container",{"id":141658,"depth":170,"text":141659,"children":142199},[142200,142201,142203,142205],{"id":141673,"depth":1318,"text":141674},{"id":141685,"depth":1318,"text":142202},"16.3.2 header 头部实现",{"id":141764,"depth":1318,"text":142204},"16.3.3 registerarea 主体模块实现",{"id":142042,"depth":1318,"text":142043},{"id":142108,"depth":170,"text":142109},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139804,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142213,"title":142214,"body":142215,"description":178,"extension":179,"meta":142323,"navigation":181,"path":142324,"seo":142325,"stem":142326,"__hash__":142327},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142216,"toc":142318},[142217,142220,142224,142227,142230,142239,142248,142252,142257,142264,142282,142285,142288,142291,142294,142297,142300,142303,142306,142309,142312,142315],[10,142218,142214],{"id":142219},"_17-web服务器与网站发布",[14,142221,142223],{"id":142222},"_171-web服务器","17.1 Web服务器",[19,142225,142226],{},"把自己网站上传到服务器上，可以让其他人访问",[1601,142228],{"style":126488,"src":142229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142231,142232,142235,142236],{},[412,142233,142234],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[412,142237,142238],{},"Web 服务器等",[19,142240,142241,142242,132,142245,25880],{},"根据服务器在网络中所在的位置不同，又可分为 ",[412,142243,142244],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[412,142246,142247],{},"远程服务器",[224,142249,142251],{"id":142250},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142253,142254],{},[412,142255,142256],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142258,142259,142260],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[501,142261,142262],{"href":142262,"rel":142263},"http:\u002F\u002Ffree.3v.do\u002F",[24004],[1270,142265,142266,142269,142272,142279],{},[210,142267,142268],{},"去免费空间网站注册账号。",[210,142270,142271],{},"记录下主机名、用户名、密码、域名。",[210,142273,142274,142275,142278],{},"利用 ",[22,142276,142277],{},"utftp"," 软件 上传网站到远程服务器",[210,142280,142281],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142283,142284],{},"使用软件上传，对上传软件文件进行解压",[1601,142286],{"style":126488,"src":142287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1601,142289],{"style":126488,"src":142290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142292,142293],{},"输入刚刚申请的服务器账号信息：",[1601,142295],{"style":126488,"src":142296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1601,142298],{"style":126488,"src":142299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1601,142301],{"style":126488,"src":142302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1601,142304],{"style":126488,"src":142305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142307,142308],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1601,142310],{"style":126488,"src":142311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142313,142314],{},"浏览器输入域名即可访问",[19,142316,142317],{},"首页一定必须是index",{"title":169,"searchDepth":170,"depth":170,"links":142319},[142320],{"id":142222,"depth":170,"text":142223,"children":142321},[142322],{"id":142250,"depth":1318,"text":142251},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142214,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142329,"title":142330,"body":142331,"description":178,"extension":179,"meta":143258,"navigation":181,"path":143259,"seo":143260,"stem":143261,"__hash__":143262},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142332,"toc":143241},[142333,142336,142340,142343,142346,142357,142360,142364,142368,142373,142376,142379,142382,142385,142389,142415,142419,142423,142426,142429,142433,142466,142470,142473,142476,142540,142544,142548,142551,142554,142557,142561,142606,142610,142613,142643,142647,142651,142654,142657,142661,142664,142733,142736,142844,142846,142852,142856,142859,142862,142958,142961,142965,142989,142993,142996,143000,143003,143007,143010,143013,143016,143019,143023,143026,143029,143033,143037,143040,143043,143046,143049,143053,143056,143060,143063,143066,143111,143115,143119,143122,143125,143128,143160,143164,143167,143201,143205,143208,143238],[10,142334,142330],{"id":142335},"_18-2d动画与3d转换",[14,142337,142339],{"id":142338},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142341,142342],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142344,142345],{},"转换（transform）你可以简单理解为变形",[1270,142347,142348,142351,142354],{},[210,142349,142350],{},"移动：translate",[210,142352,142353],{},"旋转：rotate",[210,142355,142356],{},"缩放：scale",[1601,142358],{"style":126488,"src":142359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[224,142361,142363],{"id":142362},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22137,142365,142367],{"id":142366},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142369,142370,142371],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[412,142372,133291],{},[1601,142374],{"style":126488,"src":142375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142377,142378],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142380,142381],{},"对于行内元素无效",[19,142383,142384],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22137,142386,142388],{"id":142387},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[244,142390,142391],{"className":126632,"code":138821,"language":126634,"meta":169,"style":169},[22,142392,142393,142399,142411],{"__ignoreMap":169},[252,142394,142395,142397],{"class":254,"line":255},[252,142396,51751],{"class":51440},[252,142398,15712],{"class":262},[252,142400,142401,142403,142405,142407,142409],{"class":254,"line":170},[252,142402,70610],{"class":311},[252,142404,51577],{"class":262},[252,142406,454],{"class":311},[252,142408,51696],{"class":311},[252,142410,1429],{"class":262},[252,142412,142413],{"class":254,"line":1318},[252,142414,1704],{"class":262},[224,142416,142418],{"id":142417},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22137,142420,142422],{"id":142421},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142424,142425],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1601,142427],{"style":126488,"src":142428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22137,142430,142432],{"id":142431},"_18122-旋转效果","18.1.2.2 旋转效果",[244,142434,142436],{"className":126632,"code":142435,"language":126634,"meta":169,"style":169},"div {\n  transform: rotate(45deg);\n}\n",[22,142437,142438,142444,142462],{"__ignoreMap":169},[252,142439,142440,142442],{"class":254,"line":255},[252,142441,51751],{"class":51440},[252,142443,15712],{"class":262},[252,142445,142446,142448,142450,142453,142455,142457,142460],{"class":254,"line":170},[252,142447,136616],{"class":311},[252,142449,51577],{"class":262},[252,142451,142452],{"class":311},"rotate",[252,142454,263],{"class":262},[252,142456,792],{"class":311},[252,142458,142459],{"class":258},"deg",[252,142461,2858],{"class":262},[252,142463,142464],{"class":254,"line":1318},[252,142465,1704],{"class":262},[22137,142467,142469],{"id":142468},"_18123-三角做法","18.1.2.3 三角做法",[19,142471,142472],{},"该下标当经过最外层大盒子时会实现向上反转",[1601,142474],{"style":126488,"src":142475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[244,142477,142478],{"className":126632,"code":135152,"language":126634,"meta":169,"style":169},[22,142479,142480,142484,142490,142500,142510,142526,142536],{"__ignoreMap":169},[252,142481,142482],{"class":254,"line":255},[252,142483,135159],{"class":321},[252,142485,142486,142488],{"class":254,"line":170},[252,142487,135164],{"class":2102},[252,142489,15712],{"class":262},[252,142491,142492,142494,142496,142498],{"class":254,"line":1318},[252,142493,70708],{"class":311},[252,142495,51577],{"class":262},[252,142497,454],{"class":311},[252,142499,1429],{"class":262},[252,142501,142502,142504,142506,142508],{"class":254,"line":1333},[252,142503,70928],{"class":311},[252,142505,51577],{"class":262},[252,142507,454],{"class":311},[252,142509,1429],{"class":262},[252,142511,142512,142514,142516,142518,142520,142522,142524],{"class":254,"line":1339},[252,142513,71036],{"class":311},[252,142515,51577],{"class":262},[252,142517,709],{"class":311},[252,142519,51632],{"class":258},[252,142521,51661],{"class":311},[252,142523,64131],{"class":311},[252,142525,1429],{"class":262},[252,142527,142528,142530,142532,142534],{"class":254,"line":1353},[252,142529,135207],{"class":311},[252,142531,51577],{"class":262},[252,142533,62509],{"class":311},[252,142535,1429],{"class":262},[252,142537,142538],{"class":254,"line":1359},[252,142539,1704],{"class":262},[224,142541,142543],{"id":142542},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22137,142545,142547],{"id":142546},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142549,142550],{},"设置中心点",[1601,142552],{"style":126488,"src":142553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142555,142556],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22137,142558,142560],{"id":142559},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[244,142562,142564],{"className":126632,"code":142563,"language":126634,"meta":169,"style":169},"\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",[22,142565,142566,142571,142577,142592,142597,142602],{"__ignoreMap":169},[252,142567,142568],{"class":254,"line":255},[252,142569,142570],{"class":321},"\u002F* 转换中心点 *\u002F\n",[252,142572,142573,142575],{"class":254,"line":170},[252,142574,51751],{"class":51440},[252,142576,15712],{"class":262},[252,142578,142579,142582,142584,142586,142588,142590],{"class":254,"line":1318},[252,142580,142581],{"class":311},"  transform-origin",[252,142583,51577],{"class":262},[252,142585,51732],{"class":311},[252,142587,17284],{"class":311},[252,142589,130495],{"class":262},[252,142591,135305],{"class":321},[252,142593,142594],{"class":254,"line":1333},[252,142595,142596],{"class":321},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[252,142598,142599],{"class":254,"line":1339},[252,142600,142601],{"class":321},"  \u002F* transform-origin: left top; *\u002F\n",[252,142603,142604],{"class":254,"line":1353},[252,142605,1704],{"class":262},[22137,142607,142609],{"id":142608},"_18133-旋转案例","18.1.3.3 旋转案例",[1601,142611],{"style":126488,"src":142612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[244,142614,142615],{"className":126632,"code":142435,"language":126634,"meta":169,"style":169},[22,142616,142617,142623,142639],{"__ignoreMap":169},[252,142618,142619,142621],{"class":254,"line":255},[252,142620,51751],{"class":51440},[252,142622,15712],{"class":262},[252,142624,142625,142627,142629,142631,142633,142635,142637],{"class":254,"line":170},[252,142626,136616],{"class":311},[252,142628,51577],{"class":262},[252,142630,142452],{"class":311},[252,142632,263],{"class":262},[252,142634,792],{"class":311},[252,142636,142459],{"class":258},[252,142638,2858],{"class":262},[252,142640,142641],{"class":254,"line":1318},[252,142642,1704],{"class":262},[224,142644,142646],{"id":142645},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22137,142648,142650],{"id":142649},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142652,142653],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1601,142655],{"style":126488,"src":142656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22137,142658,142660],{"id":142659},"_18142-分页按钮","18.1.4.2 分页按钮",[1601,142662],{"style":126488,"src":142663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[244,142665,142667],{"className":126632,"code":142666,"language":126634,"meta":169,"style":169},"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",[22,142668,142669,142675,142691,142695,142699,142704,142710,142724,142729],{"__ignoreMap":169},[252,142670,142671,142673],{"class":254,"line":255},[252,142672,51751],{"class":51440},[252,142674,15712],{"class":262},[252,142676,142677,142679,142681,142684,142686,142689],{"class":254,"line":170},[252,142678,136616],{"class":311},[252,142680,51577],{"class":262},[252,142682,142683],{"class":311},"scale",[252,142685,263],{"class":262},[252,142687,142688],{"class":311},"1.2",[252,142690,2858],{"class":262},[252,142692,142693],{"class":254,"line":1318},[252,142694,1704],{"class":262},[252,142696,142697],{"class":254,"line":1333},[252,142698,136093],{"class":262},[252,142700,142701],{"class":254,"line":1339},[252,142702,142703],{"class":321},"\u002F* 2D 缩放 *\u002F\n",[252,142705,142706,142708],{"class":254,"line":1353},[252,142707,51751],{"class":51440},[252,142709,15712],{"class":262},[252,142711,142712,142714,142716,142718,142720,142722],{"class":254,"line":1359},[252,142713,136616],{"class":311},[252,142715,51577],{"class":262},[252,142717,142683],{"class":311},[252,142719,263],{"class":262},[252,142721,142688],{"class":311},[252,142723,2858],{"class":262},[252,142725,142726],{"class":254,"line":1450},[252,142727,142728],{"class":321},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[252,142730,142731],{"class":254,"line":1456},[252,142732,1704],{"class":262},[19,142734,142735],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[244,142737,142739],{"className":126632,"code":142738,"language":126634,"meta":169,"style":169},"\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",[22,142740,142741,142746,142756,142777,142798,142802,142807,142813,142840],{"__ignoreMap":169},[252,142742,142743],{"class":254,"line":255},[252,142744,142745],{"class":321},"\u002F* 定义动画 *\u002F\n",[252,142747,142748,142751,142754],{"class":254,"line":170},[252,142749,142750],{"class":258},"@keyframes",[252,142752,142753],{"class":5356}," move",[252,142755,15712],{"class":262},[252,142757,142758,142761,142763,142765,142767,142770,142772,142774],{"class":254,"line":1318},[252,142759,142760],{"class":2102},"  0%",[252,142762,79946],{"class":262},[252,142764,48274],{"class":311},[252,142766,51577],{"class":262},[252,142768,142769],{"class":311},"translateX",[252,142771,263],{"class":262},[252,142773,454],{"class":311},[252,142775,142776],{"class":262},"); }\n",[252,142778,142779,142782,142784,142786,142788,142790,142792,142794,142796],{"class":254,"line":1333},[252,142780,142781],{"class":2102},"  100%",[252,142783,79946],{"class":262},[252,142785,48274],{"class":311},[252,142787,51577],{"class":262},[252,142789,142769],{"class":311},[252,142791,263],{"class":262},[252,142793,574],{"class":311},[252,142795,51632],{"class":258},[252,142797,142776],{"class":262},[252,142799,142800],{"class":254,"line":1339},[252,142801,1704],{"class":262},[252,142803,142804],{"class":254,"line":1353},[252,142805,142806],{"class":321},"\u002F* 调用动画 *\u002F\n",[252,142808,142809,142811],{"class":254,"line":1359},[252,142810,51751],{"class":51440},[252,142812,15712],{"class":262},[252,142814,142815,142818,142820,142822,142824,142826,142828,142830,142832,142835,142838],{"class":254,"line":1450},[252,142816,142817],{"class":311},"  animation",[252,142819,51577],{"class":262},[252,142821,135318],{"class":311},[252,142823,25258],{"class":311},[252,142825,958],{"class":258},[252,142827,78819],{"class":311},[252,142829,4232],{"class":311},[252,142831,958],{"class":258},[252,142833,142834],{"class":311}," infinite",[252,142836,142837],{"class":311}," alternate",[252,142839,1429],{"class":262},[252,142841,142842],{"class":254,"line":1456},[252,142843,1704],{"class":262},[19,142845,142735],{},[244,142847,142850],{"className":142848,"code":142849,"language":5327},[5325],"\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",[22,142851,142849],{"__ignoreMap":169},[22137,142853,142855],{"id":142854},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,142857,142858],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1601,142860],{"style":126488,"src":142861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[244,142863,142864],{"className":126632,"code":142738,"language":126634,"meta":169,"style":169},[22,142865,142866,142870,142878,142896,142916,142920,142924,142930,142954],{"__ignoreMap":169},[252,142867,142868],{"class":254,"line":255},[252,142869,142745],{"class":321},[252,142871,142872,142874,142876],{"class":254,"line":170},[252,142873,142750],{"class":258},[252,142875,142753],{"class":5356},[252,142877,15712],{"class":262},[252,142879,142880,142882,142884,142886,142888,142890,142892,142894],{"class":254,"line":1318},[252,142881,142760],{"class":2102},[252,142883,79946],{"class":262},[252,142885,48274],{"class":311},[252,142887,51577],{"class":262},[252,142889,142769],{"class":311},[252,142891,263],{"class":262},[252,142893,454],{"class":311},[252,142895,142776],{"class":262},[252,142897,142898,142900,142902,142904,142906,142908,142910,142912,142914],{"class":254,"line":1333},[252,142899,142781],{"class":2102},[252,142901,79946],{"class":262},[252,142903,48274],{"class":311},[252,142905,51577],{"class":262},[252,142907,142769],{"class":311},[252,142909,263],{"class":262},[252,142911,574],{"class":311},[252,142913,51632],{"class":258},[252,142915,142776],{"class":262},[252,142917,142918],{"class":254,"line":1339},[252,142919,1704],{"class":262},[252,142921,142922],{"class":254,"line":1353},[252,142923,142806],{"class":321},[252,142925,142926,142928],{"class":254,"line":1359},[252,142927,51751],{"class":51440},[252,142929,15712],{"class":262},[252,142931,142932,142934,142936,142938,142940,142942,142944,142946,142948,142950,142952],{"class":254,"line":1450},[252,142933,142817],{"class":311},[252,142935,51577],{"class":262},[252,142937,135318],{"class":311},[252,142939,25258],{"class":311},[252,142941,958],{"class":258},[252,142943,78819],{"class":311},[252,142945,4232],{"class":311},[252,142947,958],{"class":258},[252,142949,142834],{"class":311},[252,142951,142837],{"class":311},[252,142953,1429],{"class":262},[252,142955,142956],{"class":254,"line":1456},[252,142957,1704],{"class":262},[19,142959,142960],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[224,142962,142964],{"id":142963},"_1823-知识点回顾","18.2.3 知识点回顾",[244,142966,142967],{"className":126632,"code":128801,"language":126634,"meta":169,"style":169},[22,142968,142969,142975,142985],{"__ignoreMap":169},[252,142970,142971,142973],{"class":254,"line":255},[252,142972,51751],{"class":51440},[252,142974,15712],{"class":262},[252,142976,142977,142979,142981,142983],{"class":254,"line":170},[252,142978,128814],{"class":311},[252,142980,51577],{"class":262},[252,142982,61876],{"class":311},[252,142984,1429],{"class":262},[252,142986,142987],{"class":254,"line":1318},[252,142988,1704],{"class":262},[14,142990,142992],{"id":142991},"_183-3d-转换","18.3 3D 转换",[19,142994,142995],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[224,142997,142999],{"id":142998},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1601,143001],{"style":126488,"src":143002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[224,143004,143006],{"id":143005},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1601,143008],{"style":126488,"src":143009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143011,143012],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143014,143015],{},"translate3d的效果需要搭配透视perspective来使用",[1601,143017],{"style":126488,"src":143018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[224,143020,143022],{"id":143021},"_1833-透视-perspective","18.3.3 透视 perspective",[1601,143024],{"style":126488,"src":143025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143027,143028],{},"透视写在父盒子上，单位为像素",[224,143030,143032],{"id":143031},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22137,143034,143036],{"id":143035},"_18341-分开解释","18.3.4.1 分开解释",[1601,143038],{"style":126488,"src":143039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1601,143041],{"style":126488,"src":143042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1601,143044],{"style":126488,"src":143045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143047,143048],{},"总结来说就是左手原则",[22137,143050,143052],{"id":143051},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1601,143054],{"style":126488,"src":143055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[224,143057,143059],{"id":143058},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1601,143061],{"style":126488,"src":143062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1601,143064],{"style":126488,"src":143065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[244,143067,143069],{"className":126632,"code":143068,"language":126634,"meta":169,"style":169},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[22,143070,143071,143077,143090,143107],{"__ignoreMap":169},[252,143072,143073,143075],{"class":254,"line":255},[252,143074,51751],{"class":51440},[252,143076,15712],{"class":262},[252,143078,143079,143082,143084,143086,143088],{"class":254,"line":170},[252,143080,143081],{"class":311},"  perspective",[252,143083,51577],{"class":262},[252,143085,65214],{"class":311},[252,143087,51632],{"class":258},[252,143089,1429],{"class":262},[252,143091,143092,143094,143096,143099,143101,143103,143105],{"class":254,"line":1318},[252,143093,136616],{"class":311},[252,143095,51577],{"class":262},[252,143097,143098],{"class":311},"rotateX",[252,143100,263],{"class":262},[252,143102,792],{"class":311},[252,143104,142459],{"class":258},[252,143106,2858],{"class":262},[252,143108,143109],{"class":254,"line":1333},[252,143110,1704],{"class":262},[224,143112,143114],{"id":143113},"_1836-案例","18.3.6 案例",[22137,143116,143118],{"id":143117},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1601,143120],{"style":126488,"src":143121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1601,143123],{"style":126488,"src":143124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1601,143126],{"style":126488,"src":143127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[244,143129,143131],{"className":126632,"code":143130,"language":126634,"meta":169,"style":169},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[22,143132,143133,143138,143144,143156],{"__ignoreMap":169},[252,143134,143135],{"class":254,"line":255},[252,143136,143137],{"class":321},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[252,143139,143140,143142],{"class":254,"line":170},[252,143141,133629],{"class":2102},[252,143143,15712],{"class":262},[252,143145,143146,143148,143150,143152,143154],{"class":254,"line":1318},[252,143147,143081],{"class":311},[252,143149,51577],{"class":262},[252,143151,65214],{"class":311},[252,143153,51632],{"class":258},[252,143155,1429],{"class":262},[252,143157,143158],{"class":254,"line":1333},[252,143159,1704],{"class":262},[22137,143161,143163],{"id":143162},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1601,143165],{"style":126488,"src":143166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[244,143168,143169],{"className":127379,"code":130736,"language":127381,"meta":169,"style":169},[22,143170,143171,143175,143189,143193],{"__ignoreMap":169},[252,143172,143173],{"class":254,"line":255},[252,143174,130743],{"class":321},[252,143176,143177,143179,143181,143183,143185,143187],{"class":254,"line":170},[252,143178,1173],{"class":262},[252,143180,51751],{"class":51440},[252,143182,53626],{"class":2102},[252,143184,308],{"class":262},[252,143186,130756],{"class":367},[252,143188,51447],{"class":262},[252,143190,143191],{"class":254,"line":1318},[252,143192,130763],{"class":262},[252,143194,143195,143197,143199],{"class":254,"line":1333},[252,143196,51925],{"class":262},[252,143198,51751],{"class":51440},[252,143200,51447],{"class":262},[22137,143202,143204],{"id":143203},"_18363-旋转木马","18.3.6.3 旋转木马",[1601,143206],{"style":126488,"src":143207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[244,143209,143210],{"className":126632,"code":142435,"language":126634,"meta":169,"style":169},[22,143211,143212,143218,143234],{"__ignoreMap":169},[252,143213,143214,143216],{"class":254,"line":255},[252,143215,51751],{"class":51440},[252,143217,15712],{"class":262},[252,143219,143220,143222,143224,143226,143228,143230,143232],{"class":254,"line":170},[252,143221,136616],{"class":311},[252,143223,51577],{"class":262},[252,143225,142452],{"class":311},[252,143227,263],{"class":262},[252,143229,792],{"class":311},[252,143231,142459],{"class":258},[252,143233,2858],{"class":262},[252,143235,143236],{"class":254,"line":1318},[252,143237,1704],{"class":262},[5266,143239,143240],{},"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":169,"searchDepth":170,"depth":170,"links":143242},[143243,143250],{"id":142338,"depth":170,"text":142339,"children":143244},[143245,143246,143247,143248,143249],{"id":142362,"depth":1318,"text":142363},{"id":142417,"depth":1318,"text":142418},{"id":142542,"depth":1318,"text":142543},{"id":142645,"depth":1318,"text":142646},{"id":142963,"depth":1318,"text":142964},{"id":142991,"depth":170,"text":142992,"children":143251},[143252,143253,143254,143255,143256,143257],{"id":142998,"depth":1318,"text":142999},{"id":143005,"depth":1318,"text":143006},{"id":143021,"depth":1318,"text":143022},{"id":143031,"depth":1318,"text":143032},{"id":143058,"depth":1318,"text":143059},{"id":143113,"depth":1318,"text":143114},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142330,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143264,"title":143265,"body":143266,"description":178,"extension":179,"meta":143469,"navigation":181,"path":143470,"seo":143471,"stem":143472,"__hash__":143473},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143267,"toc":143458},[143268,143271,143275,143278,143281,143285,143288,143291,143294,143298,143301,143305,143308,143312,143315,143319,143333,143337,143362,143365,143368,143385,143389,143393,143396,143399,143403,143406,143409,143427,143431,143434,143448,143452,143455],[10,143269,143265],{"id":143270},"_19-移动端基础-前缀现状与视口",[14,143272,143274],{"id":143273},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1601,143276],{"style":126488,"src":143277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143279,143280],{},"意思就是加个前缀，增加兼容性",[14,143282,143284],{"id":143283},"_192-移动端现状认识","19.2 移动端现状认识",[1601,143286],{"style":126488,"src":143287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143289,143290],{},"调试方法：",[1601,143292],{"style":126488,"src":143293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143295,143297],{"id":143296},"_193-视口","19.3 视口",[19,143299,143300],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[224,143302,143304],{"id":143303},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1601,143306],{"style":126488,"src":143307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[224,143309,143311],{"id":143310},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1601,143313],{"style":126488,"src":143314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[224,143316,143318],{"id":143317},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1270,143320,143321,143324,143327,143330],{},[210,143322,143323],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[210,143325,143326],{},"理想视口，对设备来讲，是最理想的视口尺寸",[210,143328,143329],{},"需要手动添写meta视口标签通知浏览器操作",[210,143331,143332],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[224,143334,143336],{"id":143335},"_1934-meta视口标签","19.3.4 meta视口标签",[244,143338,143340],{"className":127379,"code":143339,"language":127381,"meta":169,"style":169},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[22,143341,143342],{"__ignoreMap":169},[252,143343,143344,143346,143348,143350,143352,143354,143356,143358,143360],{"class":254,"line":255},[252,143345,1173],{"class":262},[252,143347,51484],{"class":51440},[252,143349,15060],{"class":2102},[252,143351,308],{"class":262},[252,143353,51531],{"class":367},[252,143355,51511],{"class":2102},[252,143357,308],{"class":262},[252,143359,51538],{"class":367},[252,143361,51447],{"class":262},[1601,143363],{"style":126488,"src":143364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143366,143367],{},"标准视口设置：",[207,143369,143370,143373,143376,143379,143382],{},[210,143371,143372],{},"视口宽度和设备保持一致",[210,143374,143375],{},"视口的默认缩放比例1.0",[210,143377,143378],{},"不允许用户自行缩放",[210,143380,143381],{},"最大允许的缩放比例1.0",[210,143383,143384],{},"最小允许的缩放比例1.0",[224,143386,143388],{"id":143387},"_1935-二倍图","19.3.5 二倍图",[22137,143390,143392],{"id":143391},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1601,143394],{"style":126488,"src":143395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1601,143397],{"style":126488,"src":143398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22137,143400,143402],{"id":143401},"_19352-多倍图","19.3.5.2 多倍图",[1601,143404],{"style":126488,"src":143405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143407,143408],{},"二倍图法，代码如下：",[244,143410,143412],{"className":126632,"code":143411,"language":126634,"meta":169,"style":169},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[22,143413,143414,143419],{"__ignoreMap":169},[252,143415,143416],{"class":254,"line":255},[252,143417,143418],{"class":321},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[252,143420,143421,143424],{"class":254,"line":170},[252,143422,143423],{"class":51440},"background-size",[252,143425,143426],{"class":262},": 50% 50%;\n",[22137,143428,143430],{"id":143429},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1601,143432],{"style":126488,"src":143433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[207,143435,143436,143439,143442,143445],{},[210,143437,143438],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[210,143440,143441],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[210,143443,143444],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[210,143446,143447],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22137,143449,143451],{"id":143450},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1601,143453],{"style":126488,"src":143454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5266,143456,143457],{},"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":169,"searchDepth":170,"depth":170,"links":143459},[143460,143461,143462],{"id":143273,"depth":170,"text":143274},{"id":143283,"depth":170,"text":143284},{"id":143296,"depth":170,"text":143297,"children":143463},[143464,143465,143466,143467,143468],{"id":143303,"depth":1318,"text":143304},{"id":143310,"depth":1318,"text":143311},{"id":143317,"depth":1318,"text":143318},{"id":143335,"depth":1318,"text":143336},{"id":143387,"depth":1318,"text":143388},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143265,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143475,"title":143476,"body":143477,"description":178,"extension":179,"meta":144354,"navigation":181,"path":144355,"seo":144356,"stem":144357,"__hash__":144358},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143478,"toc":144338},[143479,143482,143486,143493,143496,143503,143506,143511,143514,143518,143522,143529,143532,143535,143539,143542,143545,143548,143551,143554,143558,143561,143565,143567,143570,143573,143576,143579,143581,143584,143586,143616,143618,143648,143652,143655,143659,143662,143679,143682,143685,143761,143763,143766,143769,143772,143775,143777,143780,143783,143787,143809,143812,143815,143819,143822,143828,143831,143835,143838,143841,143845,143848,143851,143854,143858,143861,143864,143867,143870,143874,143877,143881,143888,143891,143894,143897,143900,143910,143913,143916,143923,143926,143930,143933,143936,143940,143943,143946,143949,143994,143997,144000,144003,144005,144134,144136,144174,144177,144180,144182,144300,144302,144336],[10,143480,143476],{"id":143481},"_20-移动端布局实战上篇",[14,143483,143485],{"id":143484},"_201-移动端主流方案","20.1 移动端主流方案",[207,143487,143488],{},[210,143489,143490],{},[412,143491,143492],{},"单独移动端页面（主流）",[1601,143494],{"style":126488,"src":143495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[207,143497,143498],{"start":170},[210,143499,143500],{},[412,143501,143502],{},"响应式兼容PC移动端",[1601,143504],{"style":126488,"src":143505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[207,143507,143508],{"start":1318},[210,143509,143510],{},"两种页面选型布局方式",[1601,143512],{"style":126488,"src":143513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143515,143517],{"id":143516},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[224,143519,143521],{"id":143520},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143523,143524,143525],{},"官网地址： ",[501,143526,143527],{"href":143527,"rel":143528},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24004],[1601,143530],{"style":126488,"src":143531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1601,143533],{"style":126488,"src":143534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[224,143536,143538],{"id":143537},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1601,143540],{"style":126488,"src":143541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1601,143543],{"style":126488,"src":143544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143546,143547],{},"去除高亮：",[19,143549,143550],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143552,143553],{},"-webkit- tap-highlight-color: transparent;",[14,143555,143557],{"id":143556},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1601,143559],{"style":126488,"src":143560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143562,143564],{"id":143563},"_204-流式布局案例","20.4 流式布局案例",[19,143566,292],{},[19,143568,143569],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143571,143572],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143574,143575],{},"图片格式：",[1601,143577],{"style":126488,"src":143578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143580,135675],{},[1601,143582],{"style":126488,"src":143583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143585,140002],{},[244,143587,143588],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,143589,143590],{"__ignoreMap":169},[252,143591,143592,143594,143596,143598,143600,143602,143604,143606,143608,143610,143612,143614],{"class":254,"line":255},[252,143593,1173],{"class":262},[252,143595,1601],{"class":51440},[252,143597,55379],{"class":2102},[252,143599,308],{"class":262},[252,143601,134149],{"class":367},[252,143603,55387],{"class":2102},[252,143605,308],{"class":262},[252,143607,134156],{"class":367},[252,143609,134159],{"class":2102},[252,143611,308],{"class":262},[252,143613,134164],{"class":367},[252,143615,51447],{"class":262},[19,143617,140091],{},[244,143619,143620],{"className":127379,"code":134134,"language":127381,"meta":169,"style":169},[22,143621,143622],{"__ignoreMap":169},[252,143623,143624,143626,143628,143630,143632,143634,143636,143638,143640,143642,143644,143646],{"class":254,"line":255},[252,143625,1173],{"class":262},[252,143627,1601],{"class":51440},[252,143629,55379],{"class":2102},[252,143631,308],{"class":262},[252,143633,134149],{"class":367},[252,143635,55387],{"class":2102},[252,143637,308],{"class":262},[252,143639,134156],{"class":367},[252,143641,134159],{"class":2102},[252,143643,308],{"class":262},[252,143645,134164],{"class":367},[252,143647,51447],{"class":262},[14,143649,143651],{"id":143650},"_205-flex布局","20.5 flex布局",[1601,143653],{"style":126488,"src":143654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[224,143656,143658],{"id":143657},"_2051-布局原理","20.5.1 布局原理",[19,143660,143661],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1270,143663,143664,143667,143670,143673,143676],{},[210,143665,143666],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[210,143668,143669],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[210,143671,143672],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[210,143674,143675],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[210,143677,143678],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143680,143681],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143683,143684],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[244,143686,143688],{"className":126632,"code":143687,"language":126634,"meta":169,"style":169},"\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",[22,143689,143690,143695,143702,143712,143724,143735,143746,143757],{"__ignoreMap":169},[252,143691,143692],{"class":254,"line":255},[252,143693,143694],{"class":321},"\u002F* Flex 弹性布局 *\u002F\n",[252,143696,143697,143700],{"class":254,"line":170},[252,143698,143699],{"class":2102},".container",[252,143701,15712],{"class":262},[252,143703,143704,143706,143708,143710],{"class":254,"line":1318},[252,143705,128248],{"class":311},[252,143707,51577],{"class":262},[252,143709,51617],{"class":311},[252,143711,1429],{"class":262},[252,143713,143714,143717,143719,143722],{"class":254,"line":1333},[252,143715,143716],{"class":311},"  flex-direction",[252,143718,51577],{"class":262},[252,143720,143721],{"class":311},"row",[252,143723,1429],{"class":262},[252,143725,143726,143729,143731,143733],{"class":254,"line":1339},[252,143727,143728],{"class":311},"  justify-content",[252,143730,51577],{"class":262},[252,143732,51808],{"class":311},[252,143734,1429],{"class":262},[252,143736,143737,143740,143742,143744],{"class":254,"line":1353},[252,143738,143739],{"class":311},"  align-items",[252,143741,51577],{"class":262},[252,143743,51732],{"class":311},[252,143745,1429],{"class":262},[252,143747,143748,143751,143753,143755],{"class":254,"line":1359},[252,143749,143750],{"class":311},"  flex-wrap",[252,143752,51577],{"class":262},[252,143754,78749],{"class":311},[252,143756,1429],{"class":262},[252,143758,143759],{"class":254,"line":1450},[252,143760,1704],{"class":262},[19,143762,70593],{},[19,143764,143765],{},".form-item .male-label {",[19,143767,143768],{},"   margin-right: 20px;",[19,143770,143771],{},"   display: inline-flex;",[19,143773,143774],{},"   align-items: center;",[19,143776,1209],{},[1601,143778],{"style":126488,"src":143779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1601,143781],{"style":126488,"src":143782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[224,143784,143786],{"id":143785},"_2052-常见父项属性","20.5.2 常见父项属性",[207,143788,143789,143792,143795,143798,143801,143804,143807],{},[210,143790,143791],{},"flex-direction：设置主轴的方向",[210,143793,143794],{},"justify-content：设置主轴上的子元素排列方式",[210,143796,143797],{},"flex-wrap：设置子元素是否换行",[210,143799,143800],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[210,143802,143803],{},"align-items：设置侧轴上的子元素排列方式（单行）",[210,143805,143806],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[210,143808,143791],{},[1601,143810],{"style":126488,"src":143811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1601,143813],{"style":126488,"src":143814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[207,143816,143817],{"start":170},[210,143818,143794],{},[1601,143820],{"style":126488,"src":143821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,143823,143824,143827],{},[22,143825,143826],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,143829,143830],{},"跟着主轴走",[207,143832,143833],{"start":1318},[210,143834,143797],{},[1601,143836],{"style":126488,"src":143837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,143839,143840],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[207,143842,143843],{"start":1333},[210,143844,143800],{},[1601,143846],{"style":126488,"src":143847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,143849,143850],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,143852,143853],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[207,143855,143856],{"start":1339},[210,143857,143803],{},[1601,143859],{"style":126488,"src":143860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,143862,143863],{},"align-items与align-content之间的区别：",[19,143865,143866],{},"单找items，多找content",[1601,143868],{"style":126488,"src":143869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[207,143871,143872],{"start":1353},[210,143873,143806],{},[1601,143875],{"style":126488,"src":143876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[224,143878,143880],{"id":143879},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[207,143882,143883],{},[210,143884,143885],{},[412,143886,143887],{},"flex 属性",[19,143889,143890],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1601,143892],{"style":126488,"src":143893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,143895,143896],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,143898,143899],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[207,143901,143902],{"start":170},[210,143903,143904,13935,143907],{},[412,143905,143906],{},"align-self",[412,143908,143909],{},"控制子项自己在侧轴上的排列方式",[1601,143911],{"style":126488,"src":143912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,143914,143915],{},"单个子盒子在父盒子侧轴上的排列方式",[207,143917,143918],{"start":1318},[210,143919,143920,143922],{},[412,143921,95435],{}," 属性定义项目的排列顺序",[1601,143924],{"style":126488,"src":143925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[224,143927,143929],{"id":143928},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1601,143931],{"style":126488,"src":143932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,143934,143935],{},"必须要添加浏览器的私有前缀",[224,143937,143939],{"id":143938},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,143941,143942],{},"学到最重要的知识：",[19,143944,143945],{},"flex处理这样的布局思路",[1601,143947],{"style":126488,"src":143948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[244,143950,143952],{"className":126632,"code":143951,"language":126634,"meta":169,"style":169},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[22,143953,143954,143960,143970,143980,143990],{"__ignoreMap":169},[252,143955,143956,143958],{"class":254,"line":255},[252,143957,143699],{"class":2102},[252,143959,15712],{"class":262},[252,143961,143962,143964,143966,143968],{"class":254,"line":170},[252,143963,128248],{"class":311},[252,143965,51577],{"class":262},[252,143967,51617],{"class":311},[252,143969,1429],{"class":262},[252,143971,143972,143974,143976,143978],{"class":254,"line":1318},[252,143973,143728],{"class":311},[252,143975,51577],{"class":262},[252,143977,51732],{"class":311},[252,143979,1429],{"class":262},[252,143981,143982,143984,143986,143988],{"class":254,"line":1333},[252,143983,143739],{"class":311},[252,143985,51577],{"class":262},[252,143987,51732],{"class":311},[252,143989,1429],{"class":262},[252,143991,143992],{"class":254,"line":1339},[252,143993,1704],{"class":262},[19,143995,143996],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,143998,143999],{},"使用属性选择器",[1601,144001],{"style":126488,"src":144002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144004,69029],{},[244,144006,144008],{"className":127379,"code":144007,"language":127381,"meta":169,"style":169},"\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",[22,144009,144010,144015,144029,144034,144054,144059,144078,144083,144102,144107,144126],{"__ignoreMap":169},[252,144011,144012],{"class":254,"line":255},[252,144013,144014],{"class":321},"\u003C!-- 携程网移动端案例结构 -->\n",[252,144016,144017,144019,144021,144023,144025,144027],{"class":254,"line":170},[252,144018,1173],{"class":262},[252,144020,51751],{"class":51440},[252,144022,53626],{"class":2102},[252,144024,308],{"class":262},[252,144026,92461],{"class":367},[252,144028,51447],{"class":262},[252,144030,144031],{"class":254,"line":1318},[252,144032,144033],{"class":321},"  \u003C!-- 搜索栏 -->\n",[252,144035,144036,144038,144040,144042,144044,144047,144050,144052],{"class":254,"line":1333},[252,144037,52284],{"class":262},[252,144039,51751],{"class":51440},[252,144041,53626],{"class":2102},[252,144043,308],{"class":262},[252,144045,144046],{"class":367},"\"search-index\"",[252,144048,144049],{"class":262},">...\u003C\u002F",[252,144051,51751],{"class":51440},[252,144053,51447],{"class":262},[252,144055,144056],{"class":254,"line":1339},[252,144057,144058],{"class":321},"  \u003C!-- 焦点图 -->\n",[252,144060,144061,144063,144065,144067,144069,144072,144074,144076],{"class":254,"line":1353},[252,144062,52284],{"class":262},[252,144064,51751],{"class":51440},[252,144066,53626],{"class":2102},[252,144068,308],{"class":262},[252,144070,144071],{"class":367},"\"focus\"",[252,144073,144049],{"class":262},[252,144075,51751],{"class":51440},[252,144077,51447],{"class":262},[252,144079,144080],{"class":254,"line":1359},[252,144081,144082],{"class":321},"  \u003C!-- 主导航 -->\n",[252,144084,144085,144087,144089,144091,144093,144096,144098,144100],{"class":254,"line":1450},[252,144086,52284],{"class":262},[252,144088,51751],{"class":51440},[252,144090,53626],{"class":2102},[252,144092,308],{"class":262},[252,144094,144095],{"class":367},"\"local-nav\"",[252,144097,144049],{"class":262},[252,144099,51751],{"class":51440},[252,144101,51447],{"class":262},[252,144103,144104],{"class":254,"line":1456},[252,144105,144106],{"class":321},"  \u003C!-- 子导航 -->\n",[252,144108,144109,144111,144113,144115,144117,144120,144122,144124],{"class":254,"line":1468},[252,144110,52284],{"class":262},[252,144112,51751],{"class":51440},[252,144114,53626],{"class":2102},[252,144116,308],{"class":262},[252,144118,144119],{"class":367},"\"nav-common\"",[252,144121,144049],{"class":262},[252,144123,51751],{"class":51440},[252,144125,51447],{"class":262},[252,144127,144128,144130,144132],{"class":254,"line":1751},[252,144129,51925],{"class":262},[252,144131,51751],{"class":51440},[252,144133,51447],{"class":262},[19,144135,70593],{},[244,144137,144138],{"className":126632,"code":137084,"language":126634,"meta":169,"style":169},[22,144139,144140,144154,144170],{"__ignoreMap":169},[252,144141,144142,144144,144146,144148,144150,144152],{"class":254,"line":255},[252,144143,53961],{"class":51440},[252,144145,1153],{"class":262},[252,144147,103243],{"class":2102},[252,144149,308],{"class":258},[252,144151,62839],{"class":367},[252,144153,137101],{"class":262},[252,144155,144156,144158,144160,144162,144164,144166,144168],{"class":254,"line":170},[252,144157,71036],{"class":311},[252,144159,51577],{"class":262},[252,144161,480],{"class":311},[252,144163,51632],{"class":258},[252,144165,51661],{"class":311},[252,144167,130212],{"class":311},[252,144169,1429],{"class":262},[252,144171,144172],{"class":254,"line":1318},[252,144173,1704],{"class":262},[19,144175,144176],{},"总代码和效果展示：",[1601,144178],{"style":126488,"src":144179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144181,69029],{},[244,144183,144184],{"className":127379,"code":144007,"language":127381,"meta":169,"style":169},[22,144185,144186,144190,144204,144208,144226,144230,144248,144252,144270,144274,144292],{"__ignoreMap":169},[252,144187,144188],{"class":254,"line":255},[252,144189,144014],{"class":321},[252,144191,144192,144194,144196,144198,144200,144202],{"class":254,"line":170},[252,144193,1173],{"class":262},[252,144195,51751],{"class":51440},[252,144197,53626],{"class":2102},[252,144199,308],{"class":262},[252,144201,92461],{"class":367},[252,144203,51447],{"class":262},[252,144205,144206],{"class":254,"line":1318},[252,144207,144033],{"class":321},[252,144209,144210,144212,144214,144216,144218,144220,144222,144224],{"class":254,"line":1333},[252,144211,52284],{"class":262},[252,144213,51751],{"class":51440},[252,144215,53626],{"class":2102},[252,144217,308],{"class":262},[252,144219,144046],{"class":367},[252,144221,144049],{"class":262},[252,144223,51751],{"class":51440},[252,144225,51447],{"class":262},[252,144227,144228],{"class":254,"line":1339},[252,144229,144058],{"class":321},[252,144231,144232,144234,144236,144238,144240,144242,144244,144246],{"class":254,"line":1353},[252,144233,52284],{"class":262},[252,144235,51751],{"class":51440},[252,144237,53626],{"class":2102},[252,144239,308],{"class":262},[252,144241,144071],{"class":367},[252,144243,144049],{"class":262},[252,144245,51751],{"class":51440},[252,144247,51447],{"class":262},[252,144249,144250],{"class":254,"line":1359},[252,144251,144082],{"class":321},[252,144253,144254,144256,144258,144260,144262,144264,144266,144268],{"class":254,"line":1450},[252,144255,52284],{"class":262},[252,144257,51751],{"class":51440},[252,144259,53626],{"class":2102},[252,144261,308],{"class":262},[252,144263,144095],{"class":367},[252,144265,144049],{"class":262},[252,144267,51751],{"class":51440},[252,144269,51447],{"class":262},[252,144271,144272],{"class":254,"line":1456},[252,144273,144106],{"class":321},[252,144275,144276,144278,144280,144282,144284,144286,144288,144290],{"class":254,"line":1468},[252,144277,52284],{"class":262},[252,144279,51751],{"class":51440},[252,144281,53626],{"class":2102},[252,144283,308],{"class":262},[252,144285,144119],{"class":367},[252,144287,144049],{"class":262},[252,144289,51751],{"class":51440},[252,144291,51447],{"class":262},[252,144293,144294,144296,144298],{"class":254,"line":1751},[252,144295,51925],{"class":262},[252,144297,51751],{"class":51440},[252,144299,51447],{"class":262},[19,144301,70593],{},[244,144303,144304],{"className":127379,"code":130736,"language":127381,"meta":169,"style":169},[22,144305,144306,144310,144324,144328],{"__ignoreMap":169},[252,144307,144308],{"class":254,"line":255},[252,144309,130743],{"class":321},[252,144311,144312,144314,144316,144318,144320,144322],{"class":254,"line":170},[252,144313,1173],{"class":262},[252,144315,51751],{"class":51440},[252,144317,53626],{"class":2102},[252,144319,308],{"class":262},[252,144321,130756],{"class":367},[252,144323,51447],{"class":262},[252,144325,144326],{"class":254,"line":1318},[252,144327,130763],{"class":262},[252,144329,144330,144332,144334],{"class":254,"line":1333},[252,144331,51925],{"class":262},[252,144333,51751],{"class":51440},[252,144335,51447],{"class":262},[5266,144337,138033],{},{"title":169,"searchDepth":170,"depth":170,"links":144339},[144340,144341,144345,144346,144347],{"id":143484,"depth":170,"text":143485},{"id":143516,"depth":170,"text":143517,"children":144342},[144343,144344],{"id":143520,"depth":1318,"text":143521},{"id":143537,"depth":1318,"text":143538},{"id":143556,"depth":170,"text":143557},{"id":143563,"depth":170,"text":143564},{"id":143650,"depth":170,"text":143651,"children":144348},[144349,144350,144351,144352,144353],{"id":143657,"depth":1318,"text":143658},{"id":143785,"depth":1318,"text":143786},{"id":143879,"depth":1318,"text":143880},{"id":143928,"depth":1318,"text":143929},{"id":143938,"depth":1318,"text":143939},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143476,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144360,"title":144361,"body":144362,"description":178,"extension":179,"meta":145589,"navigation":181,"path":145590,"seo":145591,"stem":145592,"__hash__":145593},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144363,"toc":145567},[144364,144367,144371,144375,144378,144381,144385,144390,144393,144396,144399,144402,144405,144462,144465,144470,144473,144476,144480,144491,144495,144498,144501,144508,144513,144517,144520,144526,144529,144533,144536,144543,144546,144549,144556,144559,144566,144569,144572,144579,144582,144585,144587,144604,144608,144611,144614,144617,144621,144624,144627,144630,144633,144636,144639,144641,144644,144647,144709,144712,144822,144829,144835,144838,144841,144845,144848,144852,144857,144860,144867,144870,144876,144881,144884,144887,144890,144893,144896,144899,144902,144905,144961,144963,144989,144993,144996,144999,145002,145010,145013,145016,145020,145076,145079,145083,145089,145100,145103,145108,145111,145114,145120,145123,145126,145129,145132,145135,145138,145141,145144,145169,145175,145178,145181,145184,145187,145190,145193,145198,145201,145204,145207,145215,145218,145225,145228,145231,145233,145257,145259,145262,145265,145268,145271,145274,145277,145280,145314,145317,145320,145354,145361,145364,145367,145370,145373,145376,145379,145386,145389,145392,145395,145398,145405,145408,145411,145418,145421,145424,145428,145431,145434,145437,145440,145443,145446,145449,145452,145454,145478,145480,145504,145508,145519,145522,145525,145528,145531,145534,145537,145540,145543,145546,145549,145552,145555,145558,145561,145564],[10,144365,144361],{"id":144366},"_21-移动端布局实战下篇",[14,144368,144370],{"id":144369},"_211-rem适配布局","21.1 rem适配布局",[224,144372,144374],{"id":144373},"_2111-rem单位","21.1.1 rem单位",[1601,144376],{"style":126488,"src":144377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144379,144380],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[224,144382,144384],{"id":144383},"_2112-媒体查询","21.1.2 媒体查询",[207,144386,144387],{},[210,144388,144389],{},"参数介绍",[1601,144391],{"style":126488,"src":144392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1601,144394],{"style":126488,"src":144395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1601,144397],{"style":126488,"src":144398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1601,144400],{"style":126488,"src":144401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1601,144403],{"style":126488,"src":144404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[244,144406,144408],{"className":126632,"code":144407,"language":126634,"meta":169,"style":169},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[22,144409,144410,144415,144434,144441,144454,144458],{"__ignoreMap":169},[252,144411,144412],{"class":254,"line":255},[252,144413,144414],{"class":321},"\u002F* 媒体查询 *\u002F\n",[252,144416,144417,144420,144422,144425,144427,144430,144432],{"class":254,"line":170},[252,144418,144419],{"class":258},"@media",[252,144421,1797],{"class":262},[252,144423,144424],{"class":311},"max-width",[252,144426,51577],{"class":262},[252,144428,144429],{"class":311},"768",[252,144431,51632],{"class":258},[252,144433,12582],{"class":262},[252,144435,144436,144439],{"class":254,"line":1318},[252,144437,144438],{"class":2102},"  .container",[252,144440,15712],{"class":262},[252,144442,144443,144446,144448,144450,144452],{"class":254,"line":1333},[252,144444,144445],{"class":311},"    width",[252,144447,51577],{"class":262},[252,144449,574],{"class":311},[252,144451,591],{"class":258},[252,144453,1429],{"class":262},[252,144455,144456],{"class":254,"line":1339},[252,144457,127428],{"class":262},[252,144459,144460],{"class":254,"line":1353},[252,144461,1704],{"class":262},[19,144463,144464],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[207,144466,144467],{"start":170},[210,144468,144469],{},"引入资源",[1601,144471],{"style":126488,"src":144472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144474,144475],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[224,144477,144479],{"id":144478},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1270,144481,144482,144485,144488],{},[210,144483,144484],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[210,144486,144487],{},"媒体查询可以根据不同设备宽度来修改样式",[210,144489,144490],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144492,144494],{"id":144493},"_212-less基础","21.2 Less基础",[19,144496,144497],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144499,144500],{},"Less可以解决该问题，它是css的扩展语言",[19,144502,144503,144504],{},"Less中文网址： ",[501,144505,144506],{"href":144506,"rel":144507},"http:\u002F\u002Flesscss.cn\u002F",[24004],[19,144509,144510],{},[412,144511,144512],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[224,144514,144516],{"id":144515},"_2121-less安装","21.2.1 less安装",[19,144518,144519],{},"如果使用vscode，则无需进行下方安装步骤",[19,144521,144522],{},[501,144523,144524],{"href":144524,"rel":144525},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24004],[1601,144527],{"style":126488,"src":144528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[224,144530,144532],{"id":144531},"_2122-less使用","21.2.2 less使用",[19,144534,144535],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[207,144537,144538],{},[210,144539,144540],{},[412,144541,144542],{},"Less 变量",[1601,144544],{"style":126488,"src":144545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1601,144547],{"style":126488,"src":144548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[207,144550,144551],{"start":170},[210,144552,144553],{},[412,144554,144555],{},"Less 编译",[1601,144557],{"style":126488,"src":144558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[207,144560,144561],{"start":1318},[210,144562,144563],{},[412,144564,144565],{},"Less 嵌套",[1601,144567],{"style":126488,"src":144568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1601,144570],{"style":126488,"src":144571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[207,144573,144574],{"start":1333},[210,144575,144576],{},[412,144577,144578],{},"Less 运算",[1601,144580],{"style":126488,"src":144581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144583,144584],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144586,292],{},[1270,144588,144589,144592,144595,144598,144601],{},[210,144590,144591],{},"乘号（*）和除号（\u002F）的写法",[210,144593,144594],{},"运算符中间左右有个空格隔开 1px + 5",[210,144596,144597],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[210,144599,144600],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[210,144602,144603],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144605,144607],{"id":144606},"_213-rem-适配方案","21.3 rem 适配方案",[19,144609,144610],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144612,144613],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1601,144615],{"style":126488,"src":144616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[224,144618,144620],{"id":144619},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144622,144623],{},"rem + 媒体查询 + less 技术",[1601,144625],{"style":126488,"src":144626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144628,144629],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144631,144632],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1601,144634],{"style":126488,"src":144635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144637,144638],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144640,14773],{},[1601,144642],{"style":126488,"src":144643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144645,144646],{},"index.html:",[244,144648,144650],{"className":126632,"code":144649,"language":126634,"meta":169,"style":169},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[22,144651,144652,144657,144663,144679,144683,144689,144705],{"__ignoreMap":169},[252,144653,144654],{"class":254,"line":255},[252,144655,144656],{"class":321},"\u002F* rem 适配方案 *\u002F\n",[252,144658,144659,144661],{"class":254,"line":170},[252,144660,50775],{"class":51440},[252,144662,15712],{"class":262},[252,144664,144665,144667,144669,144672,144674,144676],{"class":254,"line":1318},[252,144666,70766],{"class":311},[252,144668,51577],{"class":262},[252,144670,144671],{"class":311},"62.5",[252,144673,591],{"class":258},[252,144675,130495],{"class":262},[252,144677,144678],{"class":321},"\u002F* 1rem = 10px *\u002F\n",[252,144680,144681],{"class":254,"line":1333},[252,144682,1704],{"class":262},[252,144684,144685,144687],{"class":254,"line":1339},[252,144686,130480],{"class":2102},[252,144688,15712],{"class":262},[252,144690,144691,144693,144695,144697,144700,144702],{"class":254,"line":1353},[252,144692,70708],{"class":311},[252,144694,51577],{"class":262},[252,144696,709],{"class":311},[252,144698,144699],{"class":258},"rem",[252,144701,130495],{"class":262},[252,144703,144704],{"class":321},"\u002F* 100px *\u002F\n",[252,144706,144707],{"class":254,"line":1359},[252,144708,1704],{"class":262},[19,144710,144711],{},"common.less",[244,144713,144715],{"className":126632,"code":144714,"language":126634,"meta":169,"style":169},"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",[22,144716,144717,144723,144738,144742,144748,144762,144766,144770,144774,144780,144794,144798,144804,144818],{"__ignoreMap":169},[252,144718,144719,144721],{"class":254,"line":255},[252,144720,50775],{"class":51440},[252,144722,15712],{"class":262},[252,144724,144725,144727,144729,144731,144733,144735],{"class":254,"line":170},[252,144726,70766],{"class":311},[252,144728,51577],{"class":262},[252,144730,144671],{"class":311},[252,144732,591],{"class":258},[252,144734,26207],{"class":262},[252,144736,144737],{"class":321},"\u002F* 10px *\u002F\n",[252,144739,144740],{"class":254,"line":1318},[252,144741,1704],{"class":262},[252,144743,144744,144746],{"class":254,"line":1333},[252,144745,51751],{"class":51440},[252,144747,15712],{"class":262},[252,144749,144750,144752,144754,144756,144758,144760],{"class":254,"line":1339},[252,144751,70708],{"class":311},[252,144753,51577],{"class":262},[252,144755,709],{"class":311},[252,144757,144699],{"class":258},[252,144759,26207],{"class":262},[252,144761,144704],{"class":321},[252,144763,144764],{"class":254,"line":1353},[252,144765,1704],{"class":262},[252,144767,144768],{"class":254,"line":1359},[252,144769,136093],{"class":262},[252,144771,144772],{"class":254,"line":1450},[252,144773,144656],{"class":321},[252,144775,144776,144778],{"class":254,"line":1456},[252,144777,50775],{"class":51440},[252,144779,15712],{"class":262},[252,144781,144782,144784,144786,144788,144790,144792],{"class":254,"line":1468},[252,144783,70766],{"class":311},[252,144785,51577],{"class":262},[252,144787,144671],{"class":311},[252,144789,591],{"class":258},[252,144791,130495],{"class":262},[252,144793,144678],{"class":321},[252,144795,144796],{"class":254,"line":1751},[252,144797,1704],{"class":262},[252,144799,144800,144802],{"class":254,"line":1756},[252,144801,130480],{"class":2102},[252,144803,15712],{"class":262},[252,144805,144806,144808,144810,144812,144814,144816],{"class":254,"line":1762},[252,144807,70708],{"class":311},[252,144809,51577],{"class":262},[252,144811,709],{"class":311},[252,144813,144699],{"class":258},[252,144815,130495],{"class":262},[252,144817,144704],{"class":321},[252,144819,144820],{"class":254,"line":1767},[252,144821,1704],{"class":262},[19,144823,144824,144825,144828],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23692,144826,144827],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[244,144830,144833],{"className":144831,"code":144832,"language":5327},[5325],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[22,144834,144832],{"__ignoreMap":169},[19,144836,144837],{},"less保存时会自动变成.css文件",[19,144839,144840],{},"好好搞懂上述代码写法",[224,144842,144844],{"id":144843},"_2132-样式导入样式","21.3.2 样式导入样式",[1601,144846],{"style":126488,"src":144847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[224,144849,144851],{"id":144850},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[207,144853,144854],{},[210,144855,144856],{},"准备工作",[1601,144858],{"style":126488,"src":144859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,144861,144862,144863],{},"github地址：",[501,144864,144865],{"href":144865,"rel":144866},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24004],[19,144868,144869],{},"下载之后，将index.js文件拖到项目中就可以了",[19,144871,144872,144873],{},"js文件引入到index.html中使用的是",[22,144874,144875],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[207,144877,144878],{"start":170},[210,144879,144880],{},"vscode插件",[1601,144882],{"style":126488,"src":144883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,144885,144886],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,144888,144889],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1601,144891],{"style":126488,"src":144892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,144894,144895],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1601,144897],{"style":126488,"src":144898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,144900,144901],{},"修改成75就可以，alt+z为快捷键",[19,144903,144904],{},"index.css：",[244,144906,144907],{"className":126632,"code":144649,"language":126634,"meta":169,"style":169},[22,144908,144909,144913,144919,144933,144937,144943,144957],{"__ignoreMap":169},[252,144910,144911],{"class":254,"line":255},[252,144912,144656],{"class":321},[252,144914,144915,144917],{"class":254,"line":170},[252,144916,50775],{"class":51440},[252,144918,15712],{"class":262},[252,144920,144921,144923,144925,144927,144929,144931],{"class":254,"line":1318},[252,144922,70766],{"class":311},[252,144924,51577],{"class":262},[252,144926,144671],{"class":311},[252,144928,591],{"class":258},[252,144930,130495],{"class":262},[252,144932,144678],{"class":321},[252,144934,144935],{"class":254,"line":1333},[252,144936,1704],{"class":262},[252,144938,144939,144941],{"class":254,"line":1339},[252,144940,130480],{"class":2102},[252,144942,15712],{"class":262},[252,144944,144945,144947,144949,144951,144953,144955],{"class":254,"line":1353},[252,144946,70708],{"class":311},[252,144948,51577],{"class":262},[252,144950,709],{"class":311},[252,144952,144699],{"class":258},[252,144954,130495],{"class":262},[252,144956,144704],{"class":321},[252,144958,144959],{"class":254,"line":1359},[252,144960,1704],{"class":262},[19,144962,144646],{},[244,144964,144965],{"className":126632,"code":127036,"language":126634,"meta":169,"style":169},[22,144966,144967,144973,144985],{"__ignoreMap":169},[252,144968,144969,144971],{"class":254,"line":255},[252,144970,51940],{"class":51440},[252,144972,15712],{"class":262},[252,144974,144975,144977,144979,144981,144983],{"class":254,"line":170},[252,144976,70766],{"class":311},[252,144978,51577],{"class":262},[252,144980,864],{"class":311},[252,144982,51632],{"class":258},[252,144984,1429],{"class":262},[252,144986,144987],{"class":254,"line":1318},[252,144988,1704],{"class":262},[14,144990,144992],{"id":144991},"_214-响应式开发","21.4 响应式开发",[19,144994,144995],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1601,144997],{"style":126488,"src":144998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145000,145001],{},"做法：",[1270,145003,145004,145007],{},[210,145005,145006],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[210,145008,145009],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1601,145011],{"style":126488,"src":145012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145014,145015],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[224,145017,145019],{"id":145018},"_2141-简单代码示范","21.4.1 简单代码示范",[244,145021,145022],{"className":126632,"code":144649,"language":126634,"meta":169,"style":169},[22,145023,145024,145028,145034,145048,145052,145058,145072],{"__ignoreMap":169},[252,145025,145026],{"class":254,"line":255},[252,145027,144656],{"class":321},[252,145029,145030,145032],{"class":254,"line":170},[252,145031,50775],{"class":51440},[252,145033,15712],{"class":262},[252,145035,145036,145038,145040,145042,145044,145046],{"class":254,"line":1318},[252,145037,70766],{"class":311},[252,145039,51577],{"class":262},[252,145041,144671],{"class":311},[252,145043,591],{"class":258},[252,145045,130495],{"class":262},[252,145047,144678],{"class":321},[252,145049,145050],{"class":254,"line":1333},[252,145051,1704],{"class":262},[252,145053,145054,145056],{"class":254,"line":1339},[252,145055,130480],{"class":2102},[252,145057,15712],{"class":262},[252,145059,145060,145062,145064,145066,145068,145070],{"class":254,"line":1353},[252,145061,70708],{"class":311},[252,145063,51577],{"class":262},[252,145065,709],{"class":311},[252,145067,144699],{"class":258},[252,145069,130495],{"class":262},[252,145071,144704],{"class":321},[252,145073,145074],{"class":254,"line":1359},[252,145075,1704],{"class":262},[19,145077,145078],{},"父盒子一般命名为container",[224,145080,145082],{"id":145081},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145084,145085,145086],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[412,145087,145088],{},"使得 Web 开发更加快捷",[1270,145090,145091],{},[210,145092,145093,145094],{},"官网：",[412,145095,145096],{},[501,145097,145098],{"href":145098,"rel":145099},"http:\u002F\u002Fgetbootstrap.com\u002F",[24004],[19,145101,145102],{},"可以直接去官网拿现成的东西",[207,145104,145105],{},[210,145106,145107],{},"Bootstrap的使用",[19,145109,145110],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145112,145113],{},"Bootstrap 使用四步曲：",[19,145115,145116,145119],{},[412,145117,145118],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1601,145121],{"style":126488,"src":145122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145124,145125],{},"打开Bootstrap官网，然后下载",[1601,145127],{"style":126488,"src":145128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1601,145130],{"style":126488,"src":145131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145133,145134],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145136,145137],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145139,145140],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1601,145142],{"style":126488,"src":145143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[244,145145,145147],{"className":126632,"code":145146,"language":126634,"meta":169,"style":169},".center {\n  color: red;\n}\n",[22,145148,145149,145155,145165],{"__ignoreMap":169},[252,145150,145151,145153],{"class":254,"line":255},[252,145152,126923],{"class":2102},[252,145154,15712],{"class":262},[252,145156,145157,145159,145161,145163],{"class":254,"line":170},[252,145158,71045],{"class":311},[252,145160,51577],{"class":262},[252,145162,57561],{"class":311},[252,145164,1429],{"class":262},[252,145166,145167],{"class":254,"line":1318},[252,145168,1704],{"class":262},[19,145170,145171,145174],{},[22,145172,145173],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1601,145176],{"style":126488,"src":145177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1601,145179],{"style":126488,"src":145180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1601,145182],{"style":126488,"src":145183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145185,145186],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1601,145188],{"style":126488,"src":145189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145191,145192],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[207,145194,145195],{"start":170},[210,145196,145197],{},"布局容器",[1601,145199],{"style":126488,"src":145200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145202,145203],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145205,145206],{},"container-fluid用于移动式布局比较方便",[207,145208,145209],{"start":1318},[210,145210,145211,145212],{},"bootstrap ",[412,145213,145214],{},"栅格系统原理",[1601,145216],{"style":126488,"src":145217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[207,145219,145220],{"start":1333},[210,145221,145222],{},[412,145223,145224],{},"栅格选项参数",[1601,145226],{"style":126488,"src":145227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145229,145230],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145232,14773],{},[244,145234,145235],{"className":126632,"code":145146,"language":126634,"meta":169,"style":169},[22,145236,145237,145243,145253],{"__ignoreMap":169},[252,145238,145239,145241],{"class":254,"line":255},[252,145240,126923],{"class":2102},[252,145242,15712],{"class":262},[252,145244,145245,145247,145249,145251],{"class":254,"line":170},[252,145246,71045],{"class":311},[252,145248,51577],{"class":262},[252,145250,57561],{"class":311},[252,145252,1429],{"class":262},[252,145254,145255],{"class":254,"line":1318},[252,145256,1704],{"class":262},[19,145258,135675],{},[1601,145260],{"style":126488,"src":145261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145263,145264],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145266,145267],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145269,145270],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145272,145273],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145275,145276],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145278,145279],{},"汇总展示说明：",[244,145281,145282],{"className":127379,"code":130736,"language":127381,"meta":169,"style":169},[22,145283,145284,145288,145302,145306],{"__ignoreMap":169},[252,145285,145286],{"class":254,"line":255},[252,145287,130743],{"class":321},[252,145289,145290,145292,145294,145296,145298,145300],{"class":254,"line":170},[252,145291,1173],{"class":262},[252,145293,51751],{"class":51440},[252,145295,53626],{"class":2102},[252,145297,308],{"class":262},[252,145299,130756],{"class":367},[252,145301,51447],{"class":262},[252,145303,145304],{"class":254,"line":1318},[252,145305,130763],{"class":262},[252,145307,145308,145310,145312],{"class":254,"line":1333},[252,145309,51925],{"class":262},[252,145311,51751],{"class":51440},[252,145313,51447],{"class":262},[1601,145315],{"style":126488,"src":145316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145318,145319],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[244,145321,145322],{"className":127379,"code":130736,"language":127381,"meta":169,"style":169},[22,145323,145324,145328,145342,145346],{"__ignoreMap":169},[252,145325,145326],{"class":254,"line":255},[252,145327,130743],{"class":321},[252,145329,145330,145332,145334,145336,145338,145340],{"class":254,"line":170},[252,145331,1173],{"class":262},[252,145333,51751],{"class":51440},[252,145335,53626],{"class":2102},[252,145337,308],{"class":262},[252,145339,130756],{"class":367},[252,145341,51447],{"class":262},[252,145343,145344],{"class":254,"line":1318},[252,145345,130763],{"class":262},[252,145347,145348,145350,145352],{"class":254,"line":1333},[252,145349,51925],{"class":262},[252,145351,51751],{"class":51440},[252,145353,51447],{"class":262},[207,145355,145356],{"start":1339},[210,145357,145358],{},[412,145359,145360],{},"列嵌套",[1601,145362],{"style":126488,"src":145363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145365,145366],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145368,145369],{},"没加row内部这样：",[1601,145371],{"style":126488,"src":145372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145374,145375],{},"加上row之后内部为：",[1601,145377],{"style":126488,"src":145378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[207,145380,145381],{"start":1353},[210,145382,145383],{},[412,145384,145385],{},"列偏移",[1601,145387],{"style":126488,"src":145388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145390,145391],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145393,145394],{},"要加偏移量，即偏移份数",[19,145396,145397],{},"偏移的份数=12-两个盒子的份数",[207,145399,145400],{"start":1359},[210,145401,145402],{},[412,145403,145404],{},"列排序",[1601,145406],{"style":126488,"src":145407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145409,145410],{},"pull拉左；push推右",[207,145412,145413],{"start":1450},[210,145414,145415],{},[412,145416,145417],{},"响应式工具",[1601,145419],{"style":126488,"src":145420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145422,145423],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[224,145425,145427],{"id":145426},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145429,145430],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145432,145433],{},"ul {",[19,145435,145436],{},"list-style: none;",[19,145438,145439],{},"margin:0;",[19,145441,145442],{},"padding:0; }",[1601,145444],{"style":126488,"src":145445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1601,145447],{"style":126488,"src":145448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145450,145451],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145453,69029],{},[244,145455,145456],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,145457,145458,145464,145474],{"__ignoreMap":169},[252,145459,145460,145462],{"class":254,"line":255},[252,145461,130480],{"class":2102},[252,145463,15712],{"class":262},[252,145465,145466,145468,145470,145472],{"class":254,"line":170},[252,145467,131112],{"class":311},[252,145469,51577],{"class":262},[252,145471,23875],{"class":311},[252,145473,1429],{"class":262},[252,145475,145476],{"class":254,"line":1318},[252,145477,1704],{"class":262},[19,145479,70593],{},[244,145481,145482],{"className":126632,"code":139302,"language":126634,"meta":169,"style":169},[22,145483,145484,145490,145500],{"__ignoreMap":169},[252,145485,145486,145488],{"class":254,"line":255},[252,145487,130480],{"class":2102},[252,145489,15712],{"class":262},[252,145491,145492,145494,145496,145498],{"class":254,"line":170},[252,145493,131112],{"class":311},[252,145495,51577],{"class":262},[252,145497,23875],{"class":311},[252,145499,1429],{"class":262},[252,145501,145502],{"class":254,"line":1318},[252,145503,1704],{"class":262},[14,145505,145507],{"id":145506},"_215-swiper-插件使用","21.5 swiper 插件使用",[1270,145509,145510,145513,145516],{},[210,145511,145512],{},"下载需要的css和js文件html页面中 引入相关文件",[210,145514,145515],{},"官网找到类似案例，复制html结构，css样式 js 语法",[210,145517,145518],{},"根据需求定制修改模块",[1601,145520],{"style":126488,"src":145521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145523,145524],{},"解压后将这两部分放到项目中",[1601,145526],{"style":126488,"src":145527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145529,145530],{},"这个插件可以帮助我们实现轮播图效果",[19,145532,145533],{},"用法：",[1601,145535],{"style":126488,"src":145536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145538,145539],{},"找到自己喜欢的",[1601,145541],{"style":126488,"src":145542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145544,145545],{},"右键，查看网页源代码",[1601,145547],{"style":126488,"src":145548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145550,145551],{},"复制人家的结构内容",[19,145553,145554],{},"然后去看API文档：",[1601,145556],{"style":126488,"src":145557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145559,145560],{},"可以看看如何修改样式",[19,145562,145563],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5266,145565,145566],{},"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":169,"searchDepth":170,"depth":170,"links":145568},[145569,145574,145578,145583,145588],{"id":144369,"depth":170,"text":144370,"children":145570},[145571,145572,145573],{"id":144373,"depth":1318,"text":144374},{"id":144383,"depth":1318,"text":144384},{"id":144478,"depth":1318,"text":144479},{"id":144493,"depth":170,"text":144494,"children":145575},[145576,145577],{"id":144515,"depth":1318,"text":144516},{"id":144531,"depth":1318,"text":144532},{"id":144606,"depth":170,"text":144607,"children":145579},[145580,145581,145582],{"id":144619,"depth":1318,"text":144620},{"id":144843,"depth":1318,"text":144844},{"id":144850,"depth":1318,"text":144851},{"id":144991,"depth":170,"text":144992,"children":145584},[145585,145586,145587],{"id":145018,"depth":1318,"text":145019},{"id":145081,"depth":1318,"text":145082},{"id":145426,"depth":1318,"text":145427},{"id":145506,"depth":170,"text":145507},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144361,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145595,"title":145596,"body":145597,"description":178,"extension":179,"meta":145817,"navigation":181,"path":145818,"seo":145819,"stem":145820,"__hash__":145821},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145598,"toc":145813},[145599,145602,145606,145609,145624,145629,145632,145637,145672,145677,145689,145694,145707,145712,145729,145734,145754,145759,145777,145780,145783,145786,145789,145793,145796,145799,145802,145805,145808,145811],[10,145600,145596],{"id":145601},"_22-代码提交与新型相对单位",[14,145603,145605],{"id":145604},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145607,145608],{},"法1：",[207,145610,145611,145618,145621],{},[210,145612,145613,145614],{},"登录网站注册：",[501,145615,145616],{"href":145616,"rel":145617},"https:\u002F\u002Fgitee.com\u002F",[24004],[210,145619,145620],{},"码云创建新的仓库",[210,145622,145623],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1270,145625,145626],{},[210,145627,145628],{},"在网站根目录右键-- Git Bash Here",[1601,145630],{"style":126488,"src":145631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1270,145633,145634],{},[210,145635,145636],{},"如果是第一次利用git提交，请配置好全局选项",[244,145638,145640],{"className":117432,"code":145639,"language":117434,"meta":169,"style":169},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[22,145641,145642,145658],{"__ignoreMap":169},[252,145643,145644,145647,145649,145652,145655],{"class":254,"line":255},[252,145645,145646],{"class":2102},"git",[252,145648,119855],{"class":367},[252,145650,145651],{"class":311}," --global",[252,145653,145654],{"class":367}," user.name",[252,145656,145657],{"class":367}," \"你的名字\"\n",[252,145659,145660,145662,145664,145666,145669],{"class":254,"line":170},[252,145661,145646],{"class":2102},[252,145663,119855],{"class":367},[252,145665,145651],{"class":311},[252,145667,145668],{"class":367}," user.email",[252,145670,145671],{"class":367}," \"你的邮箱\"\n",[1270,145673,145674],{},[210,145675,145676],{},"初始化仓库",[244,145678,145680],{"className":117432,"code":145679,"language":117434,"meta":169,"style":169},"git init\n",[22,145681,145682],{"__ignoreMap":169},[252,145683,145684,145686],{"class":254,"line":255},[252,145685,145646],{"class":2102},[252,145687,145688],{"class":367}," init\n",[1270,145690,145691],{},[210,145692,145693],{},"把本地文件放到暂存区",[244,145695,145697],{"className":117432,"code":145696,"language":117434,"meta":169,"style":169},"git add .\n",[22,145698,145699],{"__ignoreMap":169},[252,145700,145701,145703,145705],{"class":254,"line":255},[252,145702,145646],{"class":2102},[252,145704,5349],{"class":367},[252,145706,28881],{"class":367},[1270,145708,145709],{},[210,145710,145711],{},"把本地文件放到本地仓库里面",[244,145713,145715],{"className":117432,"code":145714,"language":117434,"meta":169,"style":169},"git commit -m \"first commit\"\n",[22,145716,145717],{"__ignoreMap":169},[252,145718,145719,145721,145724,145726],{"class":254,"line":255},[252,145720,145646],{"class":2102},[252,145722,145723],{"class":367}," commit",[252,145725,101020],{"class":311},[252,145727,145728],{"class":367}," \"first commit\"\n",[1270,145730,145731],{},[210,145732,145733],{},"链接远程仓库",[244,145735,145737],{"className":117432,"code":145736,"language":117434,"meta":169,"style":169},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[22,145738,145739],{"__ignoreMap":169},[252,145740,145741,145743,145746,145748,145751],{"class":254,"line":255},[252,145742,145646],{"class":2102},[252,145744,145745],{"class":367}," remote",[252,145747,5349],{"class":367},[252,145749,145750],{"class":367}," origin",[252,145752,145753],{"class":367}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1270,145755,145756],{},[210,145757,145758],{},"把本地仓库的文件推送到远程仓库 push",[244,145760,145762],{"className":117432,"code":145761,"language":117434,"meta":169,"style":169},"git push -u origin master\n",[22,145763,145764],{"__ignoreMap":169},[252,145765,145766,145768,145770,145772,145774],{"class":254,"line":255},[252,145767,145646],{"class":2102},[252,145769,29156],{"class":367},[252,145771,28430],{"class":311},[252,145773,145750],{"class":367},[252,145775,145776],{"class":367}," master\n",[1601,145778],{"style":126488,"src":145779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,145781,145782],{},"上方方法暂未实现，后边学完git后在整",[19,145784,145785],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1601,145787],{"style":126488,"src":145788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145790,145792],{"id":145791},"_222-新型相对单位","22.2 新型相对单位",[1601,145794],{"style":126488,"src":145795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1601,145797],{"style":126488,"src":145798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,145800,145801],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,145803,145804],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1601,145806],{"style":126488,"src":145807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,145809,145810],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5266,145812,24097],{},{"title":169,"searchDepth":170,"depth":170,"links":145814},[145815,145816],{"id":145604,"depth":170,"text":145605},{"id":145791,"depth":170,"text":145792},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145596,"description":178},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145823,"title":145824,"body":145825,"description":145829,"extension":179,"meta":145830,"navigation":181,"path":145831,"seo":145832,"stem":145833,"__hash__":145834},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145826,"toc":145827},[],{"title":169,"searchDepth":170,"depth":170,"links":145828},[],"自己正经开始学编程的第一门语言！",{"category":92977},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145824,"description":145829},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145836,"title":145837,"body":145838,"description":178,"extension":179,"meta":146985,"navigation":181,"path":146986,"seo":146987,"stem":146988,"__hash__":146989},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145839,"toc":146961},[145840,145843,145847,145850,145853,145878,145881,145887,145891,145894,145921,145924,145964,145967,145979,145982,145988,145992,145996,146023,146040,146047,146051,146054,146080,146083,146087,146090,146130,146133,146150,146156,146160,146165,146209,146212,146230,146233,146301,146305,146312,146315,146330,146333,146342,146345,146356,146359,146368,146371,146388,146391,146406,146410,146414,146417,146419,146439,146443,146446,146449,146460,146463,146469,146473,146479,146506,146509,146521,146524,146535,146538,146544,146548,146554,146604,146607,146649,146652,146685,146688,146722,146726,146729,146749,146752,146788,146791,146804,146808,146812,146818,146821,146834,146838,146841,146847,146850,146854,146857,146860,146909,146913,146929,146935,146942,146948,146958],[10,145841,145837],{"id":145842},"_1-python环境与第一个程序",[14,145844,145846],{"id":145845},"_11-什么是python","1.1 什么是Python",[19,145848,145849],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,145851,145852],{},"理解 Python 时抓住三个关键词：",[207,145854,145855,145858,145861],{},[210,145856,145857],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[210,145859,145860],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[210,145862,145863,145864,475,145867,475,145870,475,145873,475,145875,28525],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[22,145865,145866],{},"os",[22,145868,145869],{},"sys",[22,145871,145872],{},"json",[22,145874,58000],{},[22,145876,145877],{},"datetime",[19,145879,145880],{},"Python 程序的运行链路：",[244,145882,145885],{"className":145883,"code":145884,"language":5327,"meta":169},[5325],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[22,145886,145884],{"__ignoreMap":169},[14,145888,145890],{"id":145889},"_12-python解释器","1.2 Python解释器",[19,145892,145893],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[244,145895,145897],{"className":23961,"code":145896,"language":23963,"meta":169,"style":169},"python --version\npython3 --version\npython\npython3\n",[22,145898,145899,145905,145911,145916],{"__ignoreMap":169},[252,145900,145901,145903],{"class":254,"line":255},[252,145902,30520],{"class":2102},[252,145904,26433],{"class":311},[252,145906,145907,145909],{"class":254,"line":170},[252,145908,101017],{"class":2102},[252,145910,26433],{"class":311},[252,145912,145913],{"class":254,"line":1318},[252,145914,145915],{"class":2102},"python\n",[252,145917,145918],{"class":254,"line":1333},[252,145919,145920],{"class":2102},"python3\n",[19,145922,145923],{},"进入交互模式后，可以直接输入表达式：",[244,145925,145927],{"className":30518,"code":145926,"language":30520,"meta":169,"style":169},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[22,145928,145929,145940,145945,145959],{"__ignoreMap":169},[252,145930,145931,145934,145936,145938],{"class":254,"line":255},[252,145932,145933],{"class":258},">>>",[252,145935,25258],{"class":311},[252,145937,45706],{"class":258},[252,145939,47863],{"class":311},[252,145941,145942],{"class":254,"line":170},[252,145943,145944],{"class":311},"3\n",[252,145946,145947,145949,145952,145954,145957],{"class":254,"line":1318},[252,145948,145933],{"class":258},[252,145950,145951],{"class":311}," print",[252,145953,263],{"class":262},[252,145955,145956],{"class":367},"\"hello python\"",[252,145958,269],{"class":262},[252,145960,145961],{"class":254,"line":1333},[252,145962,145963],{"class":262},"hello python\n",[19,145965,145966],{},"退出交互模式：",[244,145968,145970],{"className":30518,"code":145969,"language":30520,"meta":169,"style":169},"exit()\n",[22,145971,145972],{"__ignoreMap":169},[252,145973,145974,145977],{"class":254,"line":255},[252,145975,145976],{"class":311},"exit",[252,145978,2115],{"class":262},[19,145980,145981],{},"或使用快捷键：",[244,145983,145986],{"className":145984,"code":145985,"language":5327,"meta":169},[5325],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[22,145987,145985],{"__ignoreMap":169},[14,145989,145991],{"id":145990},"_13-安装python","1.3 安装Python",[224,145993,145995],{"id":145994},"_131-windows安装","1.3.1 Windows安装",[207,145997,145998,146005,146008,146014,146020],{},[210,145999,146000,146001],{},"打开 Python 官网：",[501,146002,146003],{"href":146003,"rel":146004},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24004],[210,146006,146007],{},"下载 Windows Installer。",[210,146009,146010,146011,28525],{},"安装时勾选 ",[22,146012,146013],{},"Add Python to PATH",[210,146015,146016,146017,28525],{},"点击 ",[22,146018,146019],{},"Install Now",[210,146021,146022],{},"安装完成后打开命令提示符验证：",[244,146024,146026],{"className":23961,"code":146025,"language":23963,"meta":169,"style":169},"python --version\npip --version\n",[22,146027,146028,146034],{"__ignoreMap":169},[252,146029,146030,146032],{"class":254,"line":255},[252,146031,30520],{"class":2102},[252,146033,26433],{"class":311},[252,146035,146036,146038],{"class":254,"line":170},[252,146037,23970],{"class":2102},[252,146039,26433],{"class":311},[19,146041,146042,146043,146046],{},"如果提示 ",[22,146044,146045],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[224,146048,146050],{"id":146049},"_132-macos安装","1.3.2 macOS安装",[19,146052,146053],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[244,146055,146057],{"className":23961,"code":146056,"language":23963,"meta":169,"style":169},"brew install python\npython3 --version\npip3 --version\n",[22,146058,146059,146068,146074],{"__ignoreMap":169},[252,146060,146061,146064,146066],{"class":254,"line":255},[252,146062,146063],{"class":2102},"brew",[252,146065,23973],{"class":367},[252,146067,124453],{"class":367},[252,146069,146070,146072],{"class":254,"line":170},[252,146071,101017],{"class":2102},[252,146073,26433],{"class":311},[252,146075,146076,146078],{"class":254,"line":1318},[252,146077,119836],{"class":2102},[252,146079,26433],{"class":311},[19,146081,146082],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[224,146084,146086],{"id":146085},"_133-linux安装","1.3.3 Linux安装",[19,146088,146089],{},"Ubuntu\u002FDebian：",[244,146091,146093],{"className":23961,"code":146092,"language":23963,"meta":169,"style":169},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[22,146094,146095,146103,146118,146124],{"__ignoreMap":169},[252,146096,146097,146099,146101],{"class":254,"line":255},[252,146098,24716],{"class":2102},[252,146100,117453],{"class":367},[252,146102,26382],{"class":367},[252,146104,146105,146107,146109,146111,146113,146115],{"class":254,"line":170},[252,146106,24716],{"class":2102},[252,146108,117453],{"class":367},[252,146110,23973],{"class":367},[252,146112,104539],{"class":367},[252,146114,100936],{"class":367},[252,146116,146117],{"class":367}," python3-venv\n",[252,146119,146120,146122],{"class":254,"line":1318},[252,146121,101017],{"class":2102},[252,146123,26433],{"class":311},[252,146125,146126,146128],{"class":254,"line":1333},[252,146127,119836],{"class":2102},[252,146129,26433],{"class":311},[19,146131,146132],{},"Fedora：",[244,146134,146136],{"className":23961,"code":146135,"language":23963,"meta":169,"style":169},"sudo dnf install python3 python3-pip\n",[22,146137,146138],{"__ignoreMap":169},[252,146139,146140,146142,146144,146146,146148],{"class":254,"line":255},[252,146141,24716],{"class":2102},[252,146143,26455],{"class":367},[252,146145,23973],{"class":367},[252,146147,104539],{"class":367},[252,146149,119901],{"class":367},[19,146151,146152,146153,146155],{},"Linux 上通常使用 ",[22,146154,101017],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146157,146159],{"id":146158},"_14-pip包管理器","1.4 pip包管理器",[19,146161,146162,146164],{},[22,146163,23970],{}," 用来安装第三方库。",[244,146166,146168],{"className":23961,"code":146167,"language":23963,"meta":169,"style":169},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[22,146169,146170,146179,146188,146196,146202],{"__ignoreMap":169},[252,146171,146172,146174,146176],{"class":254,"line":255},[252,146173,23970],{"class":2102},[252,146175,23973],{"class":367},[252,146177,146178],{"class":367}," requests\n",[252,146180,146181,146183,146186],{"class":254,"line":170},[252,146182,23970],{"class":2102},[252,146184,146185],{"class":367}," uninstall",[252,146187,146178],{"class":367},[252,146189,146190,146192,146194],{"class":254,"line":1318},[252,146191,23970],{"class":2102},[252,146193,117710],{"class":367},[252,146195,146178],{"class":367},[252,146197,146198,146200],{"class":254,"line":1333},[252,146199,23970],{"class":2102},[252,146201,119091],{"class":367},[252,146203,146204,146206],{"class":254,"line":1339},[252,146205,23970],{"class":2102},[252,146207,146208],{"class":367}," freeze\n",[19,146210,146211],{},"国内网络较慢时可以临时使用镜像：",[244,146213,146215],{"className":23961,"code":146214,"language":23963,"meta":169,"style":169},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[22,146216,146217],{"__ignoreMap":169},[252,146218,146219,146221,146223,146226,146228],{"class":254,"line":255},[252,146220,23970],{"class":2102},[252,146222,23973],{"class":367},[252,146224,146225],{"class":367}," requests",[252,146227,26570],{"class":311},[252,146229,119864],{"class":367},[19,146231,146232],{},"常见第三方库：",[400,146234,146235,146244],{},[403,146236,146237],{},[406,146238,146239,146242],{},[409,146240,146241],{},"库",[409,146243,102832],{},[447,146245,146246,146254,146261,146269,146277,146285,146293],{},[406,146247,146248,146251],{},[452,146249,146250],{},"requests",[452,146252,146253],{},"网络请求",[406,146255,146256,146258],{},[452,146257,100764],{},[452,146259,146260],{},"数值计算",[406,146262,146263,146266],{},[452,146264,146265],{},"pandas",[452,146267,146268],{},"表格数据处理",[406,146270,146271,146274],{},[452,146272,146273],{},"matplotlib",[452,146275,146276],{},"绘图",[406,146278,146279,146282],{},[452,146280,146281],{},"pyecharts",[452,146283,146284],{},"ECharts 图表",[406,146286,146287,146290],{},[452,146288,146289],{},"flask",[452,146291,146292],{},"Web 后端",[406,146294,146295,146298],{},[452,146296,146297],{},"pytest",[452,146299,146300],{},"自动化测试",[14,146302,146304],{"id":146303},"_15-虚拟环境","1.5 虚拟环境",[19,146306,146307,146308,146311],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[22,146309,146310],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146313,146314],{},"创建虚拟环境：",[244,146316,146318],{"className":23961,"code":146317,"language":23963,"meta":169,"style":169},"python -m venv .venv\n",[22,146319,146320],{"__ignoreMap":169},[252,146321,146322,146324,146326,146328],{"class":254,"line":255},[252,146323,30520],{"class":2102},[252,146325,101020],{"class":311},[252,146327,101023],{"class":367},[252,146329,101026],{"class":367},[19,146331,146332],{},"Windows 激活：",[244,146334,146336],{"className":23961,"code":146335,"language":23963,"meta":169,"style":169},".venv\\Scripts\\activate\n",[22,146337,146338],{"__ignoreMap":169},[252,146339,146340],{"class":254,"line":255},[252,146341,146335],{"class":2102},[19,146343,146344],{},"macOS\u002FLinux 激活：",[244,146346,146348],{"className":23961,"code":146347,"language":23963,"meta":169,"style":169},"source .venv\u002Fbin\u002Factivate\n",[22,146349,146350],{"__ignoreMap":169},[252,146351,146352,146354],{"class":254,"line":255},[252,146353,101031],{"class":311},[252,146355,101034],{"class":367},[19,146357,146358],{},"退出虚拟环境：",[244,146360,146362],{"className":23961,"code":146361,"language":23963,"meta":169,"style":169},"deactivate\n",[22,146363,146364],{"__ignoreMap":169},[252,146365,146366],{"class":254,"line":255},[252,146367,146361],{"class":2102},[19,146369,146370],{},"保存依赖：",[244,146372,146374],{"className":23961,"code":146373,"language":23963,"meta":169,"style":169},"pip freeze > requirements.txt\n",[22,146375,146376],{"__ignoreMap":169},[252,146377,146378,146380,146383,146385],{"class":254,"line":255},[252,146379,23970],{"class":2102},[252,146381,146382],{"class":367}," freeze",[252,146384,26362],{"class":258},[252,146386,146387],{"class":367}," requirements.txt\n",[19,146389,146390],{},"安装依赖：",[244,146392,146394],{"className":23961,"code":146393,"language":23963,"meta":169,"style":169},"pip install -r requirements.txt\n",[22,146395,146396],{"__ignoreMap":169},[252,146397,146398,146400,146402,146404],{"class":254,"line":255},[252,146399,23970],{"class":2102},[252,146401,23973],{"class":367},[252,146403,119775],{"class":311},[252,146405,146387],{"class":367},[14,146407,146409],{"id":146408},"_16-开发工具","1.6 开发工具",[224,146411,146413],{"id":146412},"_161-pycharm","1.6.1 PyCharm",[19,146415,146416],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146418,122198],{},[207,146420,146421,146424,146427,146433,146436],{},[210,146422,146423],{},"New Project：创建项目。",[210,146425,146426],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[210,146428,146429,146430,126118],{},"New Python File：创建 ",[22,146431,146432],{},".py",[210,146434,146435],{},"Run：运行当前文件。",[210,146437,146438],{},"Debug：断点调试。",[224,146440,146442],{"id":146441},"_162-vs-code","1.6.2 VS Code",[19,146444,146445],{},"VS Code 轻量，适合后续多语言开发。",[19,146447,146448],{},"建议安装插件：",[207,146450,146451,146454,146457],{},[210,146452,146453],{},"Python。",[210,146455,146456],{},"Pylance。",[210,146458,146459],{},"Jupyter。",[19,146461,146462],{},"选择解释器：",[244,146464,146467],{"className":146465,"code":146466,"language":5327,"meta":169},[5325],"Ctrl + Shift + P -> Python: Select Interpreter\n",[22,146468,146466],{"__ignoreMap":169},[14,146470,146472],{"id":146471},"_17-第一个python程序","1.7 第一个Python程序",[19,146474,146475,146476,24758],{},"创建文件 ",[22,146477,146478],{},"hello.py",[244,146480,146482],{"className":30518,"code":146481,"language":30520,"meta":169,"style":169},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[22,146483,146484,146495],{"__ignoreMap":169},[252,146485,146486,146488,146490,146493],{"class":254,"line":255},[252,146487,30555],{"class":311},[252,146489,263],{"class":262},[252,146491,146492],{"class":367},"\"Hello World\"",[252,146494,269],{"class":262},[252,146496,146497,146499,146501,146504],{"class":254,"line":170},[252,146498,30555],{"class":311},[252,146500,263],{"class":262},[252,146502,146503],{"class":367},"\"你好，Python\"",[252,146505,269],{"class":262},[19,146507,146508],{},"在终端运行：",[244,146510,146512],{"className":23961,"code":146511,"language":23963,"meta":169,"style":169},"python hello.py\n",[22,146513,146514],{"__ignoreMap":169},[252,146515,146516,146518],{"class":254,"line":255},[252,146517,30520],{"class":2102},[252,146519,146520],{"class":367}," hello.py\n",[19,146522,146523],{},"或：",[244,146525,146527],{"className":23961,"code":146526,"language":23963,"meta":169,"style":169},"python3 hello.py\n",[22,146528,146529],{"__ignoreMap":169},[252,146530,146531,146533],{"class":254,"line":255},[252,146532,101017],{"class":2102},[252,146534,146520],{"class":367},[19,146536,146537],{},"输出：",[244,146539,146542],{"className":146540,"code":146541,"language":5327,"meta":169},[5325],"Hello World\n你好，Python\n",[22,146543,146541],{"__ignoreMap":169},[14,146545,146547],{"id":146546},"_18-print函数","1.8 print函数",[19,146549,146550,146553],{},[22,146551,146552],{},"print()"," 用来输出内容。",[244,146555,146557],{"className":30518,"code":146556,"language":30520,"meta":169,"style":169},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[22,146558,146559,146569,146579,146589],{"__ignoreMap":169},[252,146560,146561,146563,146565,146567],{"class":254,"line":255},[252,146562,30555],{"class":311},[252,146564,263],{"class":262},[252,146566,5984],{"class":367},[252,146568,269],{"class":262},[252,146570,146571,146573,146575,146577],{"class":254,"line":170},[252,146572,30555],{"class":311},[252,146574,263],{"class":262},[252,146576,574],{"class":311},[252,146578,269],{"class":262},[252,146580,146581,146583,146585,146587],{"class":254,"line":1318},[252,146582,30555],{"class":311},[252,146584,263],{"class":262},[252,146586,312],{"class":311},[252,146588,269],{"class":262},[252,146590,146591,146593,146595,146598,146600,146602],{"class":254,"line":1333},[252,146592,30555],{"class":311},[252,146594,263],{"class":262},[252,146596,146597],{"class":367},"\"年龄:\"",[252,146599,12575],{"class":262},[252,146601,913],{"class":311},[252,146603,269],{"class":262},[19,146605,146606],{},"多个内容用逗号隔开，默认中间加空格：",[244,146608,146610],{"className":30518,"code":146609,"language":30520,"meta":169,"style":169},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[22,146611,146612,146622,146632],{"__ignoreMap":169},[252,146613,146614,146617,146619],{"class":254,"line":255},[252,146615,146616],{"class":262},"name ",[252,146618,308],{"class":258},[252,146620,146621],{"class":367}," \"张三\"\n",[252,146623,146624,146627,146629],{"class":254,"line":170},[252,146625,146626],{"class":262},"age ",[252,146628,308],{"class":258},[252,146630,146631],{"class":311}," 18\n",[252,146633,146634,146636,146638,146641,146644,146646],{"class":254,"line":1318},[252,146635,30555],{"class":311},[252,146637,263],{"class":262},[252,146639,146640],{"class":367},"\"姓名:\"",[252,146642,146643],{"class":262},", name, ",[252,146645,146597],{"class":367},[252,146647,146648],{"class":262},", age)\n",[19,146650,146651],{},"修改分隔符：",[244,146653,146655],{"className":30518,"code":146654,"language":30520,"meta":169,"style":169},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[22,146656,146657],{"__ignoreMap":169},[252,146658,146659,146661,146663,146666,146668,146670,146672,146674,146676,146679,146681,146683],{"class":254,"line":255},[252,146660,30555],{"class":311},[252,146662,263],{"class":262},[252,146664,146665],{"class":367},"\"2024\"",[252,146667,12575],{"class":262},[252,146669,54456],{"class":367},[252,146671,12575],{"class":262},[252,146673,54456],{"class":367},[252,146675,12575],{"class":262},[252,146677,146678],{"class":5356},"sep",[252,146680,308],{"class":258},[252,146682,32623],{"class":367},[252,146684,269],{"class":262},[19,146686,146687],{},"修改结尾符：",[244,146689,146691],{"className":30518,"code":146690,"language":30520,"meta":169,"style":169},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[22,146692,146693,146711],{"__ignoreMap":169},[252,146694,146695,146697,146699,146701,146703,146705,146707,146709],{"class":254,"line":255},[252,146696,30555],{"class":311},[252,146698,263],{"class":262},[252,146700,5984],{"class":367},[252,146702,12575],{"class":262},[252,146704,45941],{"class":5356},[252,146706,308],{"class":258},[252,146708,4498],{"class":367},[252,146710,269],{"class":262},[252,146712,146713,146715,146717,146720],{"class":254,"line":170},[252,146714,30555],{"class":311},[252,146716,263],{"class":262},[252,146718,146719],{"class":367},"\"python\"",[252,146721,269],{"class":262},[14,146723,146725],{"id":146724},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,146727,146728],{},"交互运行适合临时验证：",[244,146730,146732],{"className":30518,"code":146731,"language":30520,"meta":169,"style":169},">>> 10 * 3\n30\n",[22,146733,146734,146744],{"__ignoreMap":169},[252,146735,146736,146738,146740,146742],{"class":254,"line":255},[252,146737,145933],{"class":258},[252,146739,2177],{"class":311},[252,146741,6658],{"class":258},[252,146743,120172],{"class":311},[252,146745,146746],{"class":254,"line":170},[252,146747,146748],{"class":311},"30\n",[19,146750,146751],{},"脚本运行适合保存程序：",[244,146753,146755],{"className":30518,"code":146754,"language":30520,"meta":169,"style":169},"price = 8\ncount = 5\nprint(price * count)\n",[22,146756,146757,146767,146776],{"__ignoreMap":169},[252,146758,146759,146762,146764],{"class":254,"line":255},[252,146760,146761],{"class":262},"price ",[252,146763,308],{"class":258},[252,146765,146766],{"class":311}," 8\n",[252,146768,146769,146772,146774],{"class":254,"line":170},[252,146770,146771],{"class":262},"count ",[252,146773,308],{"class":258},[252,146775,54567],{"class":311},[252,146777,146778,146780,146783,146785],{"class":254,"line":1318},[252,146779,30555],{"class":311},[252,146781,146782],{"class":262},"(price ",[252,146784,718],{"class":258},[252,146786,146787],{"class":262}," count)\n",[19,146789,146790],{},"实际学习中推荐：",[207,146792,146793,146796,146801],{},[210,146794,146795],{},"临时试一个语法，用交互模式。",[210,146797,146798,146799,126118],{},"写完整练习，用 ",[22,146800,146432],{},[210,146802,146803],{},"写项目，用独立目录和虚拟环境。",[14,146805,146807],{"id":146806},"_110-常见错误","1.10 常见错误",[224,146809,146811],{"id":146810},"_1101-命令找不到","1.10.1 命令找不到",[244,146813,146816],{"className":146814,"code":146815,"language":5327,"meta":169},[5325],"python: command not found\n",[22,146817,146815],{"__ignoreMap":169},[19,146819,146820],{},"原因：",[207,146822,146823,146826,146829],{},[210,146824,146825],{},"没安装 Python。",[210,146827,146828],{},"PATH 没配置。",[210,146830,146831,146832,28525],{},"Linux\u002FmacOS 应该使用 ",[22,146833,101017],{},[224,146835,146837],{"id":146836},"_1102-文件名冲突","1.10.2 文件名冲突",[19,146839,146840],{},"不要把文件命名为：",[244,146842,146845],{"className":146843,"code":146844,"language":5327,"meta":169},[5325],"random.py\njson.py\ntime.py\nrequests.py\n",[22,146846,146844],{"__ignoreMap":169},[19,146848,146849],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[224,146851,146853],{"id":146852},"_1103-中文乱码","1.10.3 中文乱码",[19,146855,146856],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,146858,146859],{},"如果读写文件出现乱码，要明确指定编码：",[244,146861,146863],{"className":30518,"code":146862,"language":30520,"meta":169,"style":169},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[22,146864,146865,146899],{"__ignoreMap":169},[252,146866,146867,146869,146872,146874,146877,146879,146882,146884,146887,146889,146892,146894,146896],{"class":254,"line":255},[252,146868,107969],{"class":258},[252,146870,146871],{"class":311}," open",[252,146873,263],{"class":262},[252,146875,146876],{"class":367},"\"data.txt\"",[252,146878,12575],{"class":262},[252,146880,146881],{"class":367},"\"r\"",[252,146883,12575],{"class":262},[252,146885,146886],{"class":5356},"encoding",[252,146888,308],{"class":258},[252,146890,146891],{"class":367},"\"utf-8\"",[252,146893,13854],{"class":262},[252,146895,31523],{"class":258},[252,146897,146898],{"class":262}," f:\n",[252,146900,146901,146904,146906],{"class":254,"line":170},[252,146902,146903],{"class":262},"    content ",[252,146905,308],{"class":258},[252,146907,146908],{"class":262}," f.read()\n",[14,146910,146912],{"id":146911},"_111-本章练习","1.11 本章练习",[207,146914,146915,146918,146924],{},[210,146916,146917],{},"安装 Python，并在终端输出版本号。",[210,146919,146920,146921,146923],{},"新建 ",[22,146922,146478],{},"，输出自己的姓名、年龄、学习目标。",[210,146925,104502,146926,146928],{},[22,146927,146552],{}," 输出下面格式：",[244,146930,146933],{"className":146931,"code":146932,"language":5327,"meta":169},[5325],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[22,146934,146932],{"__ignoreMap":169},[207,146936,146937],{"start":1333},[210,146938,104502,146939,146941],{},[22,146940,146678],{}," 输出日期：",[244,146943,146946],{"className":146944,"code":146945,"language":5327,"meta":169},[5325],"2024-10-10\n",[22,146947,146945],{"__ignoreMap":169},[207,146949,146950],{"start":1339},[210,146951,104502,146952,146954,146955,146957],{},[22,146953,45941],{}," 让两次 ",[22,146956,146552],{}," 输出在同一行。",[5266,146959,146960],{},"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":169,"searchDepth":170,"depth":170,"links":146962},[146963,146964,146965,146970,146971,146972,146976,146977,146978,146979,146984],{"id":145845,"depth":170,"text":145846},{"id":145889,"depth":170,"text":145890},{"id":145990,"depth":170,"text":145991,"children":146966},[146967,146968,146969],{"id":145994,"depth":1318,"text":145995},{"id":146049,"depth":1318,"text":146050},{"id":146085,"depth":1318,"text":146086},{"id":146158,"depth":170,"text":146159},{"id":146303,"depth":170,"text":146304},{"id":146408,"depth":170,"text":146409,"children":146973},[146974,146975],{"id":146412,"depth":1318,"text":146413},{"id":146441,"depth":1318,"text":146442},{"id":146471,"depth":170,"text":146472},{"id":146546,"depth":170,"text":146547},{"id":146724,"depth":170,"text":146725},{"id":146806,"depth":170,"text":146807,"children":146980},[146981,146982,146983],{"id":146810,"depth":1318,"text":146811},{"id":146836,"depth":1318,"text":146837},{"id":146852,"depth":1318,"text":146853},{"id":146911,"depth":170,"text":146912},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145837,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146991,"title":146992,"body":146993,"description":178,"extension":179,"meta":149397,"navigation":181,"path":149398,"seo":149399,"stem":149400,"__hash__":149401},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146994,"toc":149382},[146995,146998,147002,147005,147008,147025,147028,147070,147073,147077,147080,147083,147120,147123,147157,147160,147252,147256,147270,147273,147300,147303,147307,147410,147417,147420,147437,147441,147448,147637,147640,147713,147717,147720,147804,147807,147839,147843,148047,148050,148054,148060,148162,148165,148421,148425,148428,148431,148445,148447,148633,148637,148999,149005,149009,149012,149136,149139,149318,149321,149325,149358,149362,149379],[10,146996,146992],{"id":146997},"_10-json与pyecharts折线图",[14,146999,147001],{"id":147000},"_101-数据可视化","10.1 数据可视化",[19,147003,147004],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147006,147007],{},"常见图表：",[207,147009,147010,147013,147016,147019,147022],{},[210,147011,147012],{},"折线图：看趋势。",[210,147014,147015],{},"柱状图：看分类对比。",[210,147017,147018],{},"饼图：看占比。",[210,147020,147021],{},"地图：看地域分布。",[210,147023,147024],{},"散点图：看两个变量之间的关系。",[19,147026,147027],{},"Python 可视化常用库：",[400,147029,147030,147038],{},[403,147031,147032],{},[406,147033,147034,147036],{},[409,147035,146241],{},[409,147037,23879],{},[447,147039,147040,147047,147055,147062],{},[406,147041,147042,147044],{},[452,147043,146273],{},[452,147045,147046],{},"基础、经典、可定制",[406,147048,147049,147052],{},[452,147050,147051],{},"seaborn",[452,147053,147054],{},"统计图表更美观",[406,147056,147057,147059],{},[452,147058,146281],{},[452,147060,147061],{},"生成交互式网页图表",[406,147063,147064,147067],{},[452,147065,147066],{},"plotly",[452,147068,147069],{},"交互图表能力强",[19,147071,147072],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147074,147076],{"id":147075},"_102-json回顾","10.2 JSON回顾",[19,147078,147079],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147081,147082],{},"Python 字典：",[244,147084,147086],{"className":30518,"code":147085,"language":30520,"meta":169,"style":169},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[22,147087,147088,147096,147107,147116],{"__ignoreMap":169},[252,147089,147090,147092,147094],{"class":254,"line":255},[252,147091,101795],{"class":262},[252,147093,308],{"class":258},[252,147095,15712],{"class":262},[252,147097,147098,147101,147103,147105],{"class":254,"line":170},[252,147099,147100],{"class":367},"    \"name\"",[252,147102,51577],{"class":262},[252,147104,69409],{"class":367},[252,147106,31606],{"class":262},[252,147108,147109,147112,147114],{"class":254,"line":1318},[252,147110,147111],{"class":367},"    \"value\"",[252,147113,51577],{"class":262},[252,147115,97596],{"class":311},[252,147117,147118],{"class":254,"line":1333},[252,147119,1704],{"class":262},[19,147121,147122],{},"JSON 字符串：",[244,147124,147127],{"className":147125,"code":147126,"language":145872,"meta":169,"style":169},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[22,147128,147129,147133,147144,147153],{"__ignoreMap":169},[252,147130,147131],{"class":254,"line":255},[252,147132,1685],{"class":262},[252,147134,147135,147138,147140,147142],{"class":254,"line":170},[252,147136,147137],{"class":311},"  \"name\"",[252,147139,51577],{"class":262},[252,147141,69409],{"class":367},[252,147143,31606],{"class":262},[252,147145,147146,147149,147151],{"class":254,"line":1318},[252,147147,147148],{"class":311},"  \"value\"",[252,147150,51577],{"class":262},[252,147152,97596],{"class":311},[252,147154,147155],{"class":254,"line":1333},[252,147156,1704],{"class":262},[19,147158,147159],{},"Python 与 JSON 的转换：",[244,147161,147163],{"className":30518,"code":147162,"language":30520,"meta":169,"style":169},"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",[22,147164,147165,147172,147176,147201,147205,147224,147231,147235,147245],{"__ignoreMap":169},[252,147166,147167,147169],{"class":254,"line":255},[252,147168,30532],{"class":258},[252,147170,147171],{"class":262}," json\n",[252,147173,147174],{"class":254,"line":170},[252,147175,2539],{"emptyLinePlaceholder":181},[252,147177,147178,147180,147182,147184,147186,147188,147190,147192,147195,147197,147199],{"class":254,"line":1318},[252,147179,101795],{"class":262},[252,147181,308],{"class":258},[252,147183,4587],{"class":262},[252,147185,62819],{"class":367},[252,147187,51577],{"class":262},[252,147189,69409],{"class":367},[252,147191,12575],{"class":262},[252,147193,147194],{"class":367},"\"value\"",[252,147196,51577],{"class":262},[252,147198,574],{"class":311},[252,147200,1704],{"class":262},[252,147202,147203],{"class":254,"line":1333},[252,147204,2539],{"emptyLinePlaceholder":181},[252,147206,147207,147210,147212,147215,147218,147220,147222],{"class":254,"line":1339},[252,147208,147209],{"class":262},"json_text ",[252,147211,308],{"class":258},[252,147213,147214],{"class":262}," json.dumps(data, ",[252,147216,147217],{"class":5356},"ensure_ascii",[252,147219,308],{"class":258},[252,147221,34127],{"class":311},[252,147223,269],{"class":262},[252,147225,147226,147228],{"class":254,"line":1353},[252,147227,30555],{"class":311},[252,147229,147230],{"class":262},"(json_text)\n",[252,147232,147233],{"class":254,"line":1359},[252,147234,2539],{"emptyLinePlaceholder":181},[252,147236,147237,147240,147242],{"class":254,"line":1450},[252,147238,147239],{"class":262},"new_data ",[252,147241,308],{"class":258},[252,147243,147244],{"class":262}," json.loads(json_text)\n",[252,147246,147247,147249],{"class":254,"line":1456},[252,147248,30555],{"class":311},[252,147250,147251],{"class":262},"(new_data)\n",[14,147253,147255],{"id":147254},"_103-安装pyecharts","10.3 安装pyecharts",[244,147257,147259],{"className":23961,"code":147258,"language":23963,"meta":169,"style":169},"pip install pyecharts\n",[22,147260,147261],{"__ignoreMap":169},[252,147262,147263,147265,147267],{"class":254,"line":255},[252,147264,23970],{"class":2102},[252,147266,23973],{"class":367},[252,147268,147269],{"class":367}," pyecharts\n",[19,147271,147272],{},"验证：",[244,147274,147276],{"className":30518,"code":147275,"language":30520,"meta":169,"style":169},"import pyecharts\n\nprint(pyecharts.__version__)\n",[22,147277,147278,147284,147288],{"__ignoreMap":169},[252,147279,147280,147282],{"class":254,"line":255},[252,147281,30532],{"class":258},[252,147283,147269],{"class":262},[252,147285,147286],{"class":254,"line":170},[252,147287,2539],{"emptyLinePlaceholder":181},[252,147289,147290,147292,147295,147298],{"class":254,"line":1318},[252,147291,30555],{"class":311},[252,147293,147294],{"class":262},"(pyecharts.",[252,147296,147297],{"class":311},"__version__",[252,147299,269],{"class":262},[19,147301,147302],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147304,147306],{"id":147305},"_104-第一个折线图","10.4 第一个折线图",[244,147308,147310],{"className":30518,"code":147309,"language":30520,"meta":169,"style":169},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[22,147311,147312,147324,147328,147338,147368,147400],{"__ignoreMap":169},[252,147313,147314,147316,147319,147321],{"class":254,"line":255},[252,147315,30877],{"class":258},[252,147317,147318],{"class":262}," pyecharts.charts ",[252,147320,30532],{"class":258},[252,147322,147323],{"class":262}," Line\n",[252,147325,147326],{"class":254,"line":170},[252,147327,2539],{"emptyLinePlaceholder":181},[252,147329,147330,147333,147335],{"class":254,"line":1318},[252,147331,147332],{"class":262},"line ",[252,147334,308],{"class":258},[252,147336,147337],{"class":262}," Line()\n",[252,147339,147340,147343,147346,147348,147351,147353,147356,147358,147361,147363,147366],{"class":254,"line":1333},[252,147341,147342],{"class":262},"line.add_xaxis([",[252,147344,147345],{"class":367},"\"周一\"",[252,147347,12575],{"class":262},[252,147349,147350],{"class":367},"\"周二\"",[252,147352,12575],{"class":262},[252,147354,147355],{"class":367},"\"周三\"",[252,147357,12575],{"class":262},[252,147359,147360],{"class":367},"\"周四\"",[252,147362,12575],{"class":262},[252,147364,147365],{"class":367},"\"周五\"",[252,147367,4796],{"class":262},[252,147369,147370,147373,147376,147378,147380,147382,147384,147386,147388,147390,147393,147395,147398],{"class":254,"line":1339},[252,147371,147372],{"class":262},"line.add_yaxis(",[252,147374,147375],{"class":367},"\"销售额\"",[252,147377,77657],{"class":262},[252,147379,574],{"class":311},[252,147381,12575],{"class":262},[252,147383,1080],{"class":311},[252,147385,12575],{"class":262},[252,147387,1125],{"class":311},[252,147389,12575],{"class":262},[252,147391,147392],{"class":311},"150",[252,147394,12575],{"class":262},[252,147396,147397],{"class":311},"180",[252,147399,4796],{"class":262},[252,147401,147402,147405,147408],{"class":254,"line":1353},[252,147403,147404],{"class":262},"line.render(",[252,147406,147407],{"class":367},"\"line.html\"",[252,147409,269],{"class":262},[19,147411,147412,147413,147416],{},"运行后会生成 ",[22,147414,147415],{},"line.html","，用浏览器打开即可看到图表。",[19,147418,147419],{},"核心步骤：",[207,147421,147422,147425,147428,147431,147434],{},[210,147423,147424],{},"导入图表类。",[210,147426,147427],{},"创建图表对象。",[210,147429,147430],{},"添加 x 轴数据。",[210,147432,147433],{},"添加 y 轴数据。",[210,147435,147436],{},"渲染为 HTML。",[14,147438,147440],{"id":147439},"_105-全局配置","10.5 全局配置",[19,147442,147443,147444,147447],{},"常用配置在 ",[22,147445,147446],{},"pyecharts.options"," 中。",[244,147449,147451],{"className":30518,"code":147450,"language":30520,"meta":169,"style":169},"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",[22,147452,147453,147470,147480,147484,147492,147516,147544,147549,147568,147587,147605,147625,147629],{"__ignoreMap":169},[252,147454,147455,147457,147460,147462,147465,147467],{"class":254,"line":255},[252,147456,30877],{"class":258},[252,147458,147459],{"class":262}," pyecharts ",[252,147461,30532],{"class":258},[252,147463,147464],{"class":262}," options ",[252,147466,31523],{"class":258},[252,147468,147469],{"class":262}," opts\n",[252,147471,147472,147474,147476,147478],{"class":254,"line":170},[252,147473,30877],{"class":258},[252,147475,147318],{"class":262},[252,147477,30532],{"class":258},[252,147479,147323],{"class":262},[252,147481,147482],{"class":254,"line":1318},[252,147483,2539],{"emptyLinePlaceholder":181},[252,147485,147486,147488,147490],{"class":254,"line":1333},[252,147487,147332],{"class":262},[252,147489,308],{"class":258},[252,147491,147337],{"class":262},[252,147493,147494,147496,147498,147500,147502,147504,147506,147508,147510,147512,147514],{"class":254,"line":1339},[252,147495,147342],{"class":262},[252,147497,147345],{"class":367},[252,147499,12575],{"class":262},[252,147501,147350],{"class":367},[252,147503,12575],{"class":262},[252,147505,147355],{"class":367},[252,147507,12575],{"class":262},[252,147509,147360],{"class":367},[252,147511,12575],{"class":262},[252,147513,147365],{"class":367},[252,147515,4796],{"class":262},[252,147517,147518,147520,147522,147524,147526,147528,147530,147532,147534,147536,147538,147540,147542],{"class":254,"line":1353},[252,147519,147372],{"class":262},[252,147521,147375],{"class":367},[252,147523,77657],{"class":262},[252,147525,574],{"class":311},[252,147527,12575],{"class":262},[252,147529,1080],{"class":311},[252,147531,12575],{"class":262},[252,147533,1125],{"class":311},[252,147535,12575],{"class":262},[252,147537,147392],{"class":311},[252,147539,12575],{"class":262},[252,147541,147397],{"class":311},[252,147543,4796],{"class":262},[252,147545,147546],{"class":254,"line":1359},[252,147547,147548],{"class":262},"line.set_global_opts(\n",[252,147550,147551,147554,147556,147559,147561,147563,147566],{"class":254,"line":1450},[252,147552,147553],{"class":5356},"    title_opts",[252,147555,308],{"class":258},[252,147557,147558],{"class":262},"opts.TitleOpts(",[252,147560,51547],{"class":5356},[252,147562,308],{"class":258},[252,147564,147565],{"class":367},"\"一周销售额\"",[252,147567,38187],{"class":262},[252,147569,147570,147573,147575,147578,147580,147582,147585],{"class":254,"line":1456},[252,147571,147572],{"class":5356},"    xaxis_opts",[252,147574,308],{"class":258},[252,147576,147577],{"class":262},"opts.AxisOpts(",[252,147579,79949],{"class":5356},[252,147581,308],{"class":258},[252,147583,147584],{"class":367},"\"日期\"",[252,147586,38187],{"class":262},[252,147588,147589,147592,147594,147596,147598,147600,147603],{"class":254,"line":1468},[252,147590,147591],{"class":5356},"    yaxis_opts",[252,147593,308],{"class":258},[252,147595,147577],{"class":262},[252,147597,79949],{"class":5356},[252,147599,308],{"class":258},[252,147601,147602],{"class":367},"\"金额\"",[252,147604,38187],{"class":262},[252,147606,147607,147610,147612,147615,147618,147620,147623],{"class":254,"line":1751},[252,147608,147609],{"class":5356},"    tooltip_opts",[252,147611,308],{"class":258},[252,147613,147614],{"class":262},"opts.TooltipOpts(",[252,147616,147617],{"class":5356},"trigger",[252,147619,308],{"class":258},[252,147621,147622],{"class":367},"\"axis\"",[252,147624,38187],{"class":262},[252,147626,147627],{"class":254,"line":1756},[252,147628,269],{"class":262},[252,147630,147631,147633,147635],{"class":254,"line":1762},[252,147632,147404],{"class":262},[252,147634,147407],{"class":367},[252,147636,269],{"class":262},[19,147638,147639],{},"常见全局配置：",[400,147641,147642,147651],{},[403,147643,147644],{},[406,147645,147646,147649],{},[409,147647,147648],{},"配置",[409,147650,102832],{},[447,147652,147653,147663,147673,147683,147693,147703],{},[406,147654,147655,147660],{},[452,147656,147657],{},[22,147658,147659],{},"TitleOpts",[452,147661,147662],{},"标题",[406,147664,147665,147670],{},[452,147666,147667],{},[22,147668,147669],{},"LegendOpts",[452,147671,147672],{},"图例",[406,147674,147675,147680],{},[452,147676,147677],{},[22,147678,147679],{},"TooltipOpts",[452,147681,147682],{},"提示框",[406,147684,147685,147690],{},[452,147686,147687],{},[22,147688,147689],{},"AxisOpts",[452,147691,147692],{},"坐标轴",[406,147694,147695,147700],{},[452,147696,147697],{},[22,147698,147699],{},"VisualMapOpts",[452,147701,147702],{},"视觉映射",[406,147704,147705,147710],{},[452,147706,147707],{},[22,147708,147709],{},"DataZoomOpts",[452,147711,147712],{},"区域缩放",[14,147714,147716],{"id":147715},"_106-系列配置","10.6 系列配置",[19,147718,147719],{},"系列配置作用于某一组数据。",[244,147721,147723],{"className":30518,"code":147722,"language":30520,"meta":169,"style":169},"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",[22,147724,147725,147730,147741,147770,147781,147800],{"__ignoreMap":169},[252,147726,147727],{"class":254,"line":255},[252,147728,147729],{"class":262},"line.add_yaxis(\n",[252,147731,147732,147735,147737,147739],{"class":254,"line":170},[252,147733,147734],{"class":5356},"    series_name",[252,147736,308],{"class":258},[252,147738,147375],{"class":367},[252,147740,31606],{"class":262},[252,147742,147743,147746,147748,147750,147752,147754,147756,147758,147760,147762,147764,147766,147768],{"class":254,"line":1318},[252,147744,147745],{"class":5356},"    y_axis",[252,147747,308],{"class":258},[252,147749,1153],{"class":262},[252,147751,574],{"class":311},[252,147753,12575],{"class":262},[252,147755,1080],{"class":311},[252,147757,12575],{"class":262},[252,147759,1125],{"class":311},[252,147761,12575],{"class":262},[252,147763,147392],{"class":311},[252,147765,12575],{"class":262},[252,147767,147397],{"class":311},[252,147769,87974],{"class":262},[252,147771,147772,147775,147777,147779],{"class":254,"line":1333},[252,147773,147774],{"class":5356},"    is_smooth",[252,147776,308],{"class":258},[252,147778,31616],{"class":311},[252,147780,31606],{"class":262},[252,147782,147783,147786,147788,147791,147794,147796,147798],{"class":254,"line":1339},[252,147784,147785],{"class":5356},"    label_opts",[252,147787,308],{"class":258},[252,147789,147790],{"class":262},"opts.LabelOpts(",[252,147792,147793],{"class":5356},"is_show",[252,147795,308],{"class":258},[252,147797,31616],{"class":311},[252,147799,38187],{"class":262},[252,147801,147802],{"class":254,"line":1353},[252,147803,269],{"class":262},[19,147805,147806],{},"常用参数：",[207,147808,147809,147815,147821,147827,147833],{},[210,147810,147811,147814],{},[22,147812,147813],{},"series_name","：系列名称。",[210,147816,147817,147820],{},[22,147818,147819],{},"y_axis","：y 轴数据。",[210,147822,147823,147826],{},[22,147824,147825],{},"is_smooth","：是否平滑曲线。",[210,147828,147829,147832],{},[22,147830,147831],{},"label_opts","：标签配置。",[210,147834,147835,147838],{},[22,147836,147837],{},"symbol_size","：标记点大小。",[14,147840,147842],{"id":147841},"_107-多条折线","10.7 多条折线",[244,147844,147846],{"className":30518,"code":147845,"language":30520,"meta":169,"style":169},"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",[22,147847,147848,147862,147872,147876,147905,147909,147917,147922,147960,147997,148001,148018,148034,148038],{"__ignoreMap":169},[252,147849,147850,147852,147854,147856,147858,147860],{"class":254,"line":255},[252,147851,30877],{"class":258},[252,147853,147459],{"class":262},[252,147855,30532],{"class":258},[252,147857,147464],{"class":262},[252,147859,31523],{"class":258},[252,147861,147469],{"class":262},[252,147863,147864,147866,147868,147870],{"class":254,"line":170},[252,147865,30877],{"class":258},[252,147867,147318],{"class":262},[252,147869,30532],{"class":258},[252,147871,147323],{"class":262},[252,147873,147874],{"class":254,"line":1318},[252,147875,2539],{"emptyLinePlaceholder":181},[252,147877,147878,147881,147883,147885,147887,147889,147891,147893,147895,147897,147899,147901,147903],{"class":254,"line":1333},[252,147879,147880],{"class":262},"dates ",[252,147882,308],{"class":258},[252,147884,52366],{"class":262},[252,147886,147345],{"class":367},[252,147888,12575],{"class":262},[252,147890,147350],{"class":367},[252,147892,12575],{"class":262},[252,147894,147355],{"class":367},[252,147896,12575],{"class":262},[252,147898,147360],{"class":367},[252,147900,12575],{"class":262},[252,147902,147365],{"class":367},[252,147904,33386],{"class":262},[252,147906,147907],{"class":254,"line":1339},[252,147908,2539],{"emptyLinePlaceholder":181},[252,147910,147911,147913,147915],{"class":254,"line":1353},[252,147912,147332],{"class":262},[252,147914,308],{"class":258},[252,147916,147337],{"class":262},[252,147918,147919],{"class":254,"line":1359},[252,147920,147921],{"class":262},"line.add_xaxis(dates)\n",[252,147923,147924,147926,147929,147931,147933,147935,147938,147940,147942,147944,147946,147948,147950,147952,147954,147956,147958],{"class":254,"line":1450},[252,147925,147372],{"class":262},[252,147927,147928],{"class":367},"\"线上销售\"",[252,147930,77657],{"class":262},[252,147932,574],{"class":311},[252,147934,12575],{"class":262},[252,147936,147937],{"class":311},"130",[252,147939,12575],{"class":262},[252,147941,1080],{"class":311},[252,147943,12575],{"class":262},[252,147945,21187],{"class":311},[252,147947,12575],{"class":262},[252,147949,1861],{"class":311},[252,147951,112338],{"class":262},[252,147953,147825],{"class":5356},[252,147955,308],{"class":258},[252,147957,31616],{"class":311},[252,147959,269],{"class":262},[252,147961,147962,147964,147967,147969,147971,147973,147975,147977,147979,147981,147983,147985,147987,147989,147991,147993,147995],{"class":254,"line":1456},[252,147963,147372],{"class":262},[252,147965,147966],{"class":367},"\"线下销售\"",[252,147968,77657],{"class":262},[252,147970,875],{"class":311},[252,147972,12575],{"class":262},[252,147974,1125],{"class":311},[252,147976,12575],{"class":262},[252,147978,574],{"class":311},[252,147980,12575],{"class":262},[252,147982,1080],{"class":311},[252,147984,12575],{"class":262},[252,147986,147392],{"class":311},[252,147988,112338],{"class":262},[252,147990,147825],{"class":5356},[252,147992,308],{"class":258},[252,147994,31616],{"class":311},[252,147996,269],{"class":262},[252,147998,147999],{"class":254,"line":1468},[252,148000,147548],{"class":262},[252,148002,148003,148005,148007,148009,148011,148013,148016],{"class":254,"line":1751},[252,148004,147553],{"class":5356},[252,148006,308],{"class":258},[252,148008,147558],{"class":262},[252,148010,51547],{"class":5356},[252,148012,308],{"class":258},[252,148014,148015],{"class":367},"\"线上线下销售趋势\"",[252,148017,38187],{"class":262},[252,148019,148020,148022,148024,148026,148028,148030,148032],{"class":254,"line":1756},[252,148021,147609],{"class":5356},[252,148023,308],{"class":258},[252,148025,147614],{"class":262},[252,148027,147617],{"class":5356},[252,148029,308],{"class":258},[252,148031,147622],{"class":367},[252,148033,38187],{"class":262},[252,148035,148036],{"class":254,"line":1762},[252,148037,269],{"class":262},[252,148039,148040,148042,148045],{"class":254,"line":1767},[252,148041,147404],{"class":262},[252,148043,148044],{"class":367},"\"sales.html\"",[252,148046,269],{"class":262},[19,148048,148049],{},"多条折线适合比较不同指标或不同地区。",[14,148051,148053],{"id":148052},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148055,148056,148057,24758],{},"假设 ",[22,148058,148059],{},"sales.json",[244,148061,148063],{"className":147125,"code":148062,"language":145872,"meta":169,"style":169},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[22,148064,148065,148070,148102,148130,148158],{"__ignoreMap":169},[252,148066,148067],{"class":254,"line":255},[252,148068,148069],{"class":262},"[\n",[252,148071,148072,148075,148078,148080,148082,148084,148087,148089,148091,148093,148096,148098,148100],{"class":254,"line":170},[252,148073,148074],{"class":262},"  {",[252,148076,148077],{"class":311},"\"date\"",[252,148079,51577],{"class":262},[252,148081,147345],{"class":367},[252,148083,12575],{"class":262},[252,148085,148086],{"class":311},"\"online\"",[252,148088,51577],{"class":262},[252,148090,574],{"class":311},[252,148092,12575],{"class":262},[252,148094,148095],{"class":311},"\"offline\"",[252,148097,51577],{"class":262},[252,148099,875],{"class":311},[252,148101,5069],{"class":262},[252,148103,148104,148106,148108,148110,148112,148114,148116,148118,148120,148122,148124,148126,148128],{"class":254,"line":1318},[252,148105,148074],{"class":262},[252,148107,148077],{"class":311},[252,148109,51577],{"class":262},[252,148111,147350],{"class":367},[252,148113,12575],{"class":262},[252,148115,148086],{"class":311},[252,148117,51577],{"class":262},[252,148119,147937],{"class":311},[252,148121,12575],{"class":262},[252,148123,148095],{"class":311},[252,148125,51577],{"class":262},[252,148127,1125],{"class":311},[252,148129,5069],{"class":262},[252,148131,148132,148134,148136,148138,148140,148142,148144,148146,148148,148150,148152,148154,148156],{"class":254,"line":1333},[252,148133,148074],{"class":262},[252,148135,148077],{"class":311},[252,148137,51577],{"class":262},[252,148139,147355],{"class":367},[252,148141,12575],{"class":262},[252,148143,148086],{"class":311},[252,148145,51577],{"class":262},[252,148147,1080],{"class":311},[252,148149,12575],{"class":262},[252,148151,148095],{"class":311},[252,148153,51577],{"class":262},[252,148155,574],{"class":311},[252,148157,1704],{"class":262},[252,148159,148160],{"class":254,"line":1339},[252,148161,33386],{"class":262},[19,148163,148164],{},"读取并绘图：",[244,148166,148168],{"className":30518,"code":148167,"language":30520,"meta":169,"style":169},"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",[22,148169,148170,148176,148190,148200,148204,148236,148249,148253,148261,148270,148279,148283,148295,148304,148313,148322,148326,148334,148338,148355,148372,148376,148393,148409,148413],{"__ignoreMap":169},[252,148171,148172,148174],{"class":254,"line":255},[252,148173,30532],{"class":258},[252,148175,147171],{"class":262},[252,148177,148178,148180,148182,148184,148186,148188],{"class":254,"line":170},[252,148179,30877],{"class":258},[252,148181,147459],{"class":262},[252,148183,30532],{"class":258},[252,148185,147464],{"class":262},[252,148187,31523],{"class":258},[252,148189,147469],{"class":262},[252,148191,148192,148194,148196,148198],{"class":254,"line":1318},[252,148193,30877],{"class":258},[252,148195,147318],{"class":262},[252,148197,30532],{"class":258},[252,148199,147323],{"class":262},[252,148201,148202],{"class":254,"line":1333},[252,148203,2539],{"emptyLinePlaceholder":181},[252,148205,148206,148208,148210,148212,148215,148217,148219,148221,148223,148225,148227,148229,148231,148234],{"class":254,"line":1339},[252,148207,107969],{"class":258},[252,148209,146871],{"class":311},[252,148211,263],{"class":262},[252,148213,148214],{"class":367},"\"sales.json\"",[252,148216,12575],{"class":262},[252,148218,146881],{"class":367},[252,148220,12575],{"class":262},[252,148222,146886],{"class":5356},[252,148224,308],{"class":258},[252,148226,146891],{"class":367},[252,148228,13854],{"class":262},[252,148230,31523],{"class":258},[252,148232,148233],{"class":5356}," file",[252,148235,3878],{"class":262},[252,148237,148238,148240,148242,148245,148247],{"class":254,"line":1353},[252,148239,101558],{"class":262},[252,148241,308],{"class":258},[252,148243,148244],{"class":262}," json.load(",[252,148246,45494],{"class":5356},[252,148248,269],{"class":262},[252,148250,148251],{"class":254,"line":1359},[252,148252,2539],{"emptyLinePlaceholder":181},[252,148254,148255,148257,148259],{"class":254,"line":1450},[252,148256,147880],{"class":262},[252,148258,308],{"class":258},[252,148260,51978],{"class":262},[252,148262,148263,148266,148268],{"class":254,"line":1456},[252,148264,148265],{"class":262},"online_sales ",[252,148267,308],{"class":258},[252,148269,51978],{"class":262},[252,148271,148272,148275,148277],{"class":254,"line":1468},[252,148273,148274],{"class":262},"offline_sales ",[252,148276,308],{"class":258},[252,148278,51978],{"class":262},[252,148280,148281],{"class":254,"line":1751},[252,148282,2539],{"emptyLinePlaceholder":181},[252,148284,148285,148287,148290,148292],{"class":254,"line":1756},[252,148286,3164],{"class":258},[252,148288,148289],{"class":262}," item ",[252,148291,26183],{"class":258},[252,148293,148294],{"class":262}," data:\n",[252,148296,148297,148300,148302],{"class":254,"line":1762},[252,148298,148299],{"class":262},"    dates.append(item[",[252,148301,148077],{"class":367},[252,148303,4796],{"class":262},[252,148305,148306,148309,148311],{"class":254,"line":1767},[252,148307,148308],{"class":262},"    online_sales.append(item[",[252,148310,148086],{"class":367},[252,148312,4796],{"class":262},[252,148314,148315,148318,148320],{"class":254,"line":1781},[252,148316,148317],{"class":262},"    offline_sales.append(item[",[252,148319,148095],{"class":367},[252,148321,4796],{"class":262},[252,148323,148324],{"class":254,"line":1786},[252,148325,2539],{"emptyLinePlaceholder":181},[252,148327,148328,148330,148332],{"class":254,"line":1792},[252,148329,147332],{"class":262},[252,148331,308],{"class":258},[252,148333,147337],{"class":262},[252,148335,148336],{"class":254,"line":1813},[252,148337,147921],{"class":262},[252,148339,148340,148342,148344,148347,148349,148351,148353],{"class":254,"line":1818},[252,148341,147372],{"class":262},[252,148343,147928],{"class":367},[252,148345,148346],{"class":262},", online_sales, ",[252,148348,147825],{"class":5356},[252,148350,308],{"class":258},[252,148352,31616],{"class":311},[252,148354,269],{"class":262},[252,148356,148357,148359,148361,148364,148366,148368,148370],{"class":254,"line":1832},[252,148358,147372],{"class":262},[252,148360,147966],{"class":367},[252,148362,148363],{"class":262},", offline_sales, ",[252,148365,147825],{"class":5356},[252,148367,308],{"class":258},[252,148369,31616],{"class":311},[252,148371,269],{"class":262},[252,148373,148374],{"class":254,"line":1837},[252,148375,147548],{"class":262},[252,148377,148378,148380,148382,148384,148386,148388,148391],{"class":254,"line":1866},[252,148379,147553],{"class":5356},[252,148381,308],{"class":258},[252,148383,147558],{"class":262},[252,148385,51547],{"class":5356},[252,148387,308],{"class":258},[252,148389,148390],{"class":367},"\"销售趋势\"",[252,148392,38187],{"class":262},[252,148394,148395,148397,148399,148401,148403,148405,148407],{"class":254,"line":1871},[252,148396,147609],{"class":5356},[252,148398,308],{"class":258},[252,148400,147614],{"class":262},[252,148402,147617],{"class":5356},[252,148404,308],{"class":258},[252,148406,147622],{"class":367},[252,148408,38187],{"class":262},[252,148410,148411],{"class":254,"line":1888},[252,148412,269],{"class":262},[252,148414,148415,148417,148419],{"class":254,"line":1893},[252,148416,147404],{"class":262},[252,148418,148044],{"class":367},[252,148420,269],{"class":262},[14,148422,148424],{"id":148423},"_109-数据清洗","10.9 数据清洗",[19,148426,148427],{},"真实数据经常不整齐，需要清洗。",[19,148429,148430],{},"常见问题：",[207,148432,148433,148436,148439,148442],{},[210,148434,148435],{},"数字是字符串。",[210,148437,148438],{},"字段缺失。",[210,148440,148441],{},"空值。",[210,148443,148444],{},"日期格式不统一。",[19,148446,15275],{},[244,148448,148450],{"className":30518,"code":148449,"language":30520,"meta":169,"style":169},"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",[22,148451,148452,148461,148484,148504,148525,148529,148533,148541,148550,148554,148565,148579,148588,148593,148597,148605,148615,148619,148626],{"__ignoreMap":169},[252,148453,148454,148457,148459],{"class":254,"line":255},[252,148455,148456],{"class":262},"raw_data ",[252,148458,308],{"class":258},[252,148460,55587],{"class":262},[252,148462,148463,148466,148468,148470,148472,148474,148477,148479,148482],{"class":254,"line":170},[252,148464,148465],{"class":262},"    {",[252,148467,148077],{"class":367},[252,148469,51577],{"class":262},[252,148471,147345],{"class":367},[252,148473,12575],{"class":262},[252,148475,148476],{"class":367},"\"sales\"",[252,148478,51577],{"class":262},[252,148480,148481],{"class":367},"\"100\"",[252,148483,5069],{"class":262},[252,148485,148486,148488,148490,148492,148494,148496,148498,148500,148502],{"class":254,"line":1318},[252,148487,148465],{"class":262},[252,148489,148077],{"class":367},[252,148491,51577],{"class":262},[252,148493,147350],{"class":367},[252,148495,12575],{"class":262},[252,148497,148476],{"class":367},[252,148499,51577],{"class":262},[252,148501,7792],{"class":367},[252,148503,5069],{"class":262},[252,148505,148506,148508,148510,148512,148514,148516,148518,148520,148523],{"class":254,"line":1333},[252,148507,148465],{"class":262},[252,148509,148077],{"class":367},[252,148511,51577],{"class":262},[252,148513,147355],{"class":367},[252,148515,12575],{"class":262},[252,148517,148476],{"class":367},[252,148519,51577],{"class":262},[252,148521,148522],{"class":367},"\"120\"",[252,148524,5069],{"class":262},[252,148526,148527],{"class":254,"line":1339},[252,148528,33386],{"class":262},[252,148530,148531],{"class":254,"line":1353},[252,148532,2539],{"emptyLinePlaceholder":181},[252,148534,148535,148537,148539],{"class":254,"line":1359},[252,148536,147880],{"class":262},[252,148538,308],{"class":258},[252,148540,51978],{"class":262},[252,148542,148543,148546,148548],{"class":254,"line":1450},[252,148544,148545],{"class":262},"sales ",[252,148547,308],{"class":258},[252,148549,51978],{"class":262},[252,148551,148552],{"class":254,"line":1456},[252,148553,2539],{"emptyLinePlaceholder":181},[252,148555,148556,148558,148560,148562],{"class":254,"line":1468},[252,148557,3164],{"class":258},[252,148559,148289],{"class":262},[252,148561,26183],{"class":258},[252,148563,148564],{"class":262}," raw_data:\n",[252,148566,148567,148570,148572,148575,148577],{"class":254,"line":1751},[252,148568,148569],{"class":262},"    value ",[252,148571,308],{"class":258},[252,148573,148574],{"class":262}," item.get(",[252,148576,148476],{"class":367},[252,148578,269],{"class":262},[252,148580,148581,148583,148585],{"class":254,"line":1756},[252,148582,3240],{"class":258},[252,148584,39070],{"class":258},[252,148586,148587],{"class":262}," value:\n",[252,148589,148590],{"class":254,"line":1762},[252,148591,148592],{"class":258},"        continue\n",[252,148594,148595],{"class":254,"line":1767},[252,148596,2539],{"emptyLinePlaceholder":181},[252,148598,148599,148601,148603],{"class":254,"line":1781},[252,148600,148299],{"class":262},[252,148602,148077],{"class":367},[252,148604,4796],{"class":262},[252,148606,148607,148610,148612],{"class":254,"line":1786},[252,148608,148609],{"class":262},"    sales.append(",[252,148611,266],{"class":311},[252,148613,148614],{"class":262},"(value))\n",[252,148616,148617],{"class":254,"line":1792},[252,148618,2539],{"emptyLinePlaceholder":181},[252,148620,148621,148623],{"class":254,"line":1813},[252,148622,30555],{"class":311},[252,148624,148625],{"class":262},"(dates)\n",[252,148627,148628,148630],{"class":254,"line":1818},[252,148629,30555],{"class":311},[252,148631,148632],{"class":262},"(sales)\n",[14,148634,148636],{"id":148635},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[244,148638,148640],{"className":30518,"code":148639,"language":30520,"meta":169,"style":169},"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",[22,148641,148642,148656,148666,148670,148678,148699,148721,148743,148765,148787,148791,148795,148817,148838,148842,148850,148854,148858,148868,148877,148887,148903,148907,148911,148928,148944,148960,148976,148986,148990],{"__ignoreMap":169},[252,148643,148644,148646,148648,148650,148652,148654],{"class":254,"line":255},[252,148645,30877],{"class":258},[252,148647,147459],{"class":262},[252,148649,30532],{"class":258},[252,148651,147464],{"class":262},[252,148653,31523],{"class":258},[252,148655,147469],{"class":262},[252,148657,148658,148660,148662,148664],{"class":254,"line":170},[252,148659,30877],{"class":258},[252,148661,147318],{"class":262},[252,148663,30532],{"class":258},[252,148665,147323],{"class":262},[252,148667,148668],{"class":254,"line":1318},[252,148669,2539],{"emptyLinePlaceholder":181},[252,148671,148672,148674,148676],{"class":254,"line":1333},[252,148673,148545],{"class":262},[252,148675,308],{"class":258},[252,148677,55587],{"class":262},[252,148679,148680,148682,148684,148686,148689,148691,148693,148695,148697],{"class":254,"line":1339},[252,148681,148465],{"class":262},[252,148683,148077],{"class":367},[252,148685,51577],{"class":262},[252,148687,148688],{"class":367},"\"2024-10-01\"",[252,148690,12575],{"class":262},[252,148692,84222],{"class":367},[252,148694,51577],{"class":262},[252,148696,92161],{"class":311},[252,148698,5069],{"class":262},[252,148700,148701,148703,148705,148707,148710,148712,148714,148716,148719],{"class":254,"line":1353},[252,148702,148465],{"class":262},[252,148704,148077],{"class":367},[252,148706,51577],{"class":262},[252,148708,148709],{"class":367},"\"2024-10-02\"",[252,148711,12575],{"class":262},[252,148713,84222],{"class":367},[252,148715,51577],{"class":262},[252,148717,148718],{"class":311},"1800",[252,148720,5069],{"class":262},[252,148722,148723,148725,148727,148729,148732,148734,148736,148738,148741],{"class":254,"line":1359},[252,148724,148465],{"class":262},[252,148726,148077],{"class":367},[252,148728,51577],{"class":262},[252,148730,148731],{"class":367},"\"2024-10-03\"",[252,148733,12575],{"class":262},[252,148735,84222],{"class":367},[252,148737,51577],{"class":262},[252,148739,148740],{"class":311},"1500",[252,148742,5069],{"class":262},[252,148744,148745,148747,148749,148751,148754,148756,148758,148760,148763],{"class":254,"line":1450},[252,148746,148465],{"class":262},[252,148748,148077],{"class":367},[252,148750,51577],{"class":262},[252,148752,148753],{"class":367},"\"2024-10-04\"",[252,148755,12575],{"class":262},[252,148757,84222],{"class":367},[252,148759,51577],{"class":262},[252,148761,148762],{"class":311},"2100",[252,148764,5069],{"class":262},[252,148766,148767,148769,148771,148773,148776,148778,148780,148782,148785],{"class":254,"line":1456},[252,148768,148465],{"class":262},[252,148770,148077],{"class":367},[252,148772,51577],{"class":262},[252,148774,148775],{"class":367},"\"2024-10-05\"",[252,148777,12575],{"class":262},[252,148779,84222],{"class":367},[252,148781,51577],{"class":262},[252,148783,148784],{"class":311},"2600",[252,148786,5069],{"class":262},[252,148788,148789],{"class":254,"line":1468},[252,148790,33386],{"class":262},[252,148792,148793],{"class":254,"line":1751},[252,148794,2539],{"emptyLinePlaceholder":181},[252,148796,148797,148799,148801,148804,148806,148808,148810,148812,148814],{"class":254,"line":1756},[252,148798,147880],{"class":262},[252,148800,308],{"class":258},[252,148802,148803],{"class":262}," [item[",[252,148805,148077],{"class":367},[252,148807,4582],{"class":262},[252,148809,3164],{"class":258},[252,148811,148289],{"class":262},[252,148813,26183],{"class":258},[252,148815,148816],{"class":262}," sales]\n",[252,148818,148819,148822,148824,148826,148828,148830,148832,148834,148836],{"class":254,"line":1762},[252,148820,148821],{"class":262},"amounts ",[252,148823,308],{"class":258},[252,148825,148803],{"class":262},[252,148827,84222],{"class":367},[252,148829,4582],{"class":262},[252,148831,3164],{"class":258},[252,148833,148289],{"class":262},[252,148835,26183],{"class":258},[252,148837,148816],{"class":262},[252,148839,148840],{"class":254,"line":1767},[252,148841,2539],{"emptyLinePlaceholder":181},[252,148843,148844,148846,148848],{"class":254,"line":1781},[252,148845,147332],{"class":262},[252,148847,308],{"class":258},[252,148849,147337],{"class":262},[252,148851,148852],{"class":254,"line":1786},[252,148853,147921],{"class":262},[252,148855,148856],{"class":254,"line":1792},[252,148857,147729],{"class":262},[252,148859,148860,148862,148864,148866],{"class":254,"line":1813},[252,148861,147734],{"class":5356},[252,148863,308],{"class":258},[252,148865,147375],{"class":367},[252,148867,31606],{"class":262},[252,148869,148870,148872,148874],{"class":254,"line":1818},[252,148871,147745],{"class":5356},[252,148873,308],{"class":258},[252,148875,148876],{"class":262},"amounts,\n",[252,148878,148879,148881,148883,148885],{"class":254,"line":1832},[252,148880,147774],{"class":5356},[252,148882,308],{"class":258},[252,148884,31616],{"class":311},[252,148886,31606],{"class":262},[252,148888,148889,148891,148893,148895,148897,148899,148901],{"class":254,"line":1837},[252,148890,147785],{"class":5356},[252,148892,308],{"class":258},[252,148894,147790],{"class":262},[252,148896,147793],{"class":5356},[252,148898,308],{"class":258},[252,148900,31616],{"class":311},[252,148902,38187],{"class":262},[252,148904,148905],{"class":254,"line":1866},[252,148906,269],{"class":262},[252,148908,148909],{"class":254,"line":1871},[252,148910,147548],{"class":262},[252,148912,148913,148915,148917,148919,148921,148923,148926],{"class":254,"line":1888},[252,148914,147553],{"class":5356},[252,148916,308],{"class":258},[252,148918,147558],{"class":262},[252,148920,51547],{"class":5356},[252,148922,308],{"class":258},[252,148924,148925],{"class":367},"\"每日销售额\"",[252,148927,38187],{"class":262},[252,148929,148930,148932,148934,148936,148938,148940,148942],{"class":254,"line":1893},[252,148931,147572],{"class":5356},[252,148933,308],{"class":258},[252,148935,147577],{"class":262},[252,148937,79949],{"class":5356},[252,148939,308],{"class":258},[252,148941,147584],{"class":367},[252,148943,38187],{"class":262},[252,148945,148946,148948,148950,148952,148954,148956,148958],{"class":254,"line":1898},[252,148947,147591],{"class":5356},[252,148949,308],{"class":258},[252,148951,147577],{"class":262},[252,148953,79949],{"class":5356},[252,148955,308],{"class":258},[252,148957,147602],{"class":367},[252,148959,38187],{"class":262},[252,148961,148962,148964,148966,148968,148970,148972,148974],{"class":254,"line":1903},[252,148963,147609],{"class":5356},[252,148965,308],{"class":258},[252,148967,147614],{"class":262},[252,148969,147617],{"class":5356},[252,148971,308],{"class":258},[252,148973,147622],{"class":367},[252,148975,38187],{"class":262},[252,148977,148978,148981,148983],{"class":254,"line":1917},[252,148979,148980],{"class":5356},"    datazoom_opts",[252,148982,308],{"class":258},[252,148984,148985],{"class":262},"[opts.DataZoomOpts()],\n",[252,148987,148988],{"class":254,"line":1922},[252,148989,269],{"class":262},[252,148991,148992,148994,148997],{"class":254,"line":2716},[252,148993,147404],{"class":262},[252,148995,148996],{"class":367},"\"daily_sales.html\"",[252,148998,269],{"class":262},[19,149000,149001,149004],{},[22,149002,149003],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149006,149008],{"id":149007},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149010,149011],{},"如果数据结构如下：",[244,149013,149015],{"className":30518,"code":149014,"language":30520,"meta":169,"style":169},"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",[22,149016,149017,149025,149033,149055,149076,149081,149088,149108,149128,149132],{"__ignoreMap":169},[252,149018,149019,149021,149023],{"class":254,"line":255},[252,149020,101795],{"class":262},[252,149022,308],{"class":258},[252,149024,15712],{"class":262},[252,149026,149027,149030],{"class":254,"line":170},[252,149028,149029],{"class":367},"    \"北京\"",[252,149031,149032],{"class":262},": [\n",[252,149034,149035,149037,149039,149041,149044,149046,149049,149051,149053],{"class":254,"line":1318},[252,149036,5056],{"class":262},[252,149038,148077],{"class":367},[252,149040,51577],{"class":262},[252,149042,149043],{"class":367},"\"2024-01-01\"",[252,149045,12575],{"class":262},[252,149047,149048],{"class":367},"\"confirm\"",[252,149050,51577],{"class":262},[252,149052,709],{"class":311},[252,149054,5069],{"class":262},[252,149056,149057,149059,149061,149063,149066,149068,149070,149072,149074],{"class":254,"line":1333},[252,149058,5056],{"class":262},[252,149060,148077],{"class":367},[252,149062,51577],{"class":262},[252,149064,149065],{"class":367},"\"2024-01-02\"",[252,149067,12575],{"class":262},[252,149069,149048],{"class":367},[252,149071,51577],{"class":262},[252,149073,761],{"class":311},[252,149075,5069],{"class":262},[252,149077,149078],{"class":254,"line":1339},[252,149079,149080],{"class":262},"    ],\n",[252,149082,149083,149086],{"class":254,"line":1353},[252,149084,149085],{"class":367},"    \"上海\"",[252,149087,149032],{"class":262},[252,149089,149090,149092,149094,149096,149098,149100,149102,149104,149106],{"class":254,"line":1359},[252,149091,5056],{"class":262},[252,149093,148077],{"class":367},[252,149095,51577],{"class":262},[252,149097,149043],{"class":367},[252,149099,12575],{"class":262},[252,149101,149048],{"class":367},[252,149103,51577],{"class":262},[252,149105,658],{"class":311},[252,149107,5069],{"class":262},[252,149109,149110,149112,149114,149116,149118,149120,149122,149124,149126],{"class":254,"line":1450},[252,149111,5056],{"class":262},[252,149113,148077],{"class":367},[252,149115,51577],{"class":262},[252,149117,149065],{"class":367},[252,149119,12575],{"class":262},[252,149121,149048],{"class":367},[252,149123,51577],{"class":262},[252,149125,786],{"class":311},[252,149127,5069],{"class":262},[252,149129,149130],{"class":254,"line":1456},[252,149131,149080],{"class":262},[252,149133,149134],{"class":254,"line":1468},[252,149135,1704],{"class":262},[19,149137,149138],{},"绘制多地区趋势：",[244,149140,149142],{"className":30518,"code":149141,"language":30520,"meta":169,"style":169},"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",[22,149143,149144,149158,149168,149172,149197,149201,149209,149213,149217,149229,149251,149264,149268,149272,149289,149305,149309],{"__ignoreMap":169},[252,149145,149146,149148,149150,149152,149154,149156],{"class":254,"line":255},[252,149147,30877],{"class":258},[252,149149,147459],{"class":262},[252,149151,30532],{"class":258},[252,149153,147464],{"class":262},[252,149155,31523],{"class":258},[252,149157,147469],{"class":262},[252,149159,149160,149162,149164,149166],{"class":254,"line":170},[252,149161,30877],{"class":258},[252,149163,147318],{"class":262},[252,149165,30532],{"class":258},[252,149167,147323],{"class":262},[252,149169,149170],{"class":254,"line":1318},[252,149171,2539],{"emptyLinePlaceholder":181},[252,149173,149174,149176,149178,149180,149182,149184,149186,149188,149190,149193,149195],{"class":254,"line":1333},[252,149175,147880],{"class":262},[252,149177,308],{"class":258},[252,149179,148803],{"class":262},[252,149181,148077],{"class":367},[252,149183,4582],{"class":262},[252,149185,3164],{"class":258},[252,149187,148289],{"class":262},[252,149189,26183],{"class":258},[252,149191,149192],{"class":262}," data[",[252,149194,69409],{"class":367},[252,149196,77666],{"class":262},[252,149198,149199],{"class":254,"line":1339},[252,149200,2539],{"emptyLinePlaceholder":181},[252,149202,149203,149205,149207],{"class":254,"line":1353},[252,149204,147332],{"class":262},[252,149206,308],{"class":258},[252,149208,147337],{"class":262},[252,149210,149211],{"class":254,"line":1359},[252,149212,147921],{"class":262},[252,149214,149215],{"class":254,"line":1450},[252,149216,2539],{"emptyLinePlaceholder":181},[252,149218,149219,149221,149224,149226],{"class":254,"line":1456},[252,149220,3164],{"class":258},[252,149222,149223],{"class":262}," city, records ",[252,149225,26183],{"class":258},[252,149227,149228],{"class":262}," data.items():\n",[252,149230,149231,149234,149236,149238,149240,149242,149244,149246,149248],{"class":254,"line":1468},[252,149232,149233],{"class":262},"    values ",[252,149235,308],{"class":258},[252,149237,148803],{"class":262},[252,149239,149048],{"class":367},[252,149241,4582],{"class":262},[252,149243,3164],{"class":258},[252,149245,148289],{"class":262},[252,149247,26183],{"class":258},[252,149249,149250],{"class":262}," records]\n",[252,149252,149253,149256,149258,149260,149262],{"class":254,"line":1751},[252,149254,149255],{"class":262},"    line.add_yaxis(city, values, ",[252,149257,147825],{"class":5356},[252,149259,308],{"class":258},[252,149261,31616],{"class":311},[252,149263,269],{"class":262},[252,149265,149266],{"class":254,"line":1756},[252,149267,2539],{"emptyLinePlaceholder":181},[252,149269,149270],{"class":254,"line":1762},[252,149271,147548],{"class":262},[252,149273,149274,149276,149278,149280,149282,149284,149287],{"class":254,"line":1767},[252,149275,147553],{"class":5356},[252,149277,308],{"class":258},[252,149279,147558],{"class":262},[252,149281,51547],{"class":5356},[252,149283,308],{"class":258},[252,149285,149286],{"class":367},"\"多地区趋势图\"",[252,149288,38187],{"class":262},[252,149290,149291,149293,149295,149297,149299,149301,149303],{"class":254,"line":1781},[252,149292,147609],{"class":5356},[252,149294,308],{"class":258},[252,149296,147614],{"class":262},[252,149298,147617],{"class":5356},[252,149300,308],{"class":258},[252,149302,147622],{"class":367},[252,149304,38187],{"class":262},[252,149306,149307],{"class":254,"line":1786},[252,149308,269],{"class":262},[252,149310,149311,149313,149316],{"class":254,"line":1792},[252,149312,147404],{"class":262},[252,149314,149315],{"class":367},"\"trend.html\"",[252,149317,269],{"class":262},[19,149319,149320],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149322,149324],{"id":149323},"_1012-易错点","10.12 易错点",[207,149326,149327,149333,149339,149349,149355],{},[210,149328,149329,149332],{},[22,149330,149331],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[210,149334,149335,149338],{},[22,149336,149337],{},"render()"," 生成的是 HTML，不是图片。",[210,149340,149341,149342,149345,149346,28525],{},"JSON 字符串用 ",[22,149343,149344],{},"json.loads()","，JSON 文件用 ",[22,149347,149348],{},"json.load()",[210,149350,149351,149352,28525],{},"中文 JSON 保存时加 ",[22,149353,149354],{},"ensure_ascii=False",[210,149356,149357],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149359,149361],{"id":149360},"_1013-本章练习","10.13 本章练习",[207,149363,149364,149367,149370,149373,149376],{},[210,149365,149366],{},"安装 pyecharts 并生成第一个折线图。",[210,149368,149369],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[210,149371,149372],{},"绘制两条折线，对比线上和线下销售额。",[210,149374,149375],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[210,149377,149378],{},"对含有空值的销售数据进行清洗后再绘图。",[5266,149380,149381],{},"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":169,"searchDepth":170,"depth":170,"links":149383},[149384,149385,149386,149387,149388,149389,149390,149391,149392,149393,149394,149395,149396],{"id":147000,"depth":170,"text":147001},{"id":147075,"depth":170,"text":147076},{"id":147254,"depth":170,"text":147255},{"id":147305,"depth":170,"text":147306},{"id":147439,"depth":170,"text":147440},{"id":147715,"depth":170,"text":147716},{"id":147841,"depth":170,"text":147842},{"id":148052,"depth":170,"text":148053},{"id":148423,"depth":170,"text":148424},{"id":148635,"depth":170,"text":148636},{"id":149007,"depth":170,"text":149008},{"id":149323,"depth":170,"text":149324},{"id":149360,"depth":170,"text":149361},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146992,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149403,"title":149404,"body":149405,"description":178,"extension":179,"meta":151765,"navigation":181,"path":151766,"seo":151767,"stem":151768,"__hash__":151769},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149406,"toc":151742},[149407,149410,149414,149417,149420,149496,149499,149590,149593,149597,149600,149644,149657,149661,149664,149731,149734,149738,149741,149825,149833,149837,149842,149983,149986,149997,150003,150009,150123,150127,150130,150133,150386,150389,150393,150396,150500,150503,150507,150658,150662,150669,150782,150786,150789,150895,150898,150902,150905,150936,150939,151044,151047,151051,151055,151065,151133,151137,151144,151208,151211,151215,151221,151317,151326,151330,151654,151663,151667,151695,151699,151739],[10,149408,149404],{"id":149409},"_11-面向对象基础",[14,149411,149413],{"id":149412},"_111-什么是面向对象","11.1 什么是面向对象",[19,149415,149416],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149418,149419],{},"面向过程：",[244,149421,149423],{"className":30518,"code":149422,"language":30520,"meta":169,"style":169},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[22,149424,149425,149434,149442,149446,149456,149487,149491],{"__ignoreMap":169},[252,149426,149427,149429,149431],{"class":254,"line":255},[252,149428,146616],{"class":262},[252,149430,308],{"class":258},[252,149432,149433],{"class":367}," \"小明\"\n",[252,149435,149436,149438,149440],{"class":254,"line":170},[252,149437,146626],{"class":262},[252,149439,308],{"class":258},[252,149441,146631],{"class":311},[252,149443,149444],{"class":254,"line":1318},[252,149445,2539],{"emptyLinePlaceholder":181},[252,149447,149448,149450,149453],{"class":254,"line":1333},[252,149449,32087],{"class":258},[252,149451,149452],{"class":2102}," introduce",[252,149454,149455],{"class":262},"(name, age):\n",[252,149457,149458,149460,149462,149464,149467,149469,149471,149473,149476,149478,149480,149482,149485],{"class":254,"line":1339},[252,149459,31439],{"class":311},[252,149461,263],{"class":262},[252,149463,315],{"class":258},[252,149465,149466],{"class":367},"\"我叫",[252,149468,1159],{"class":311},[252,149470,79949],{"class":262},[252,149472,1209],{"class":311},[252,149474,149475],{"class":367},"，今年",[252,149477,1159],{"class":311},[252,149479,70361],{"class":262},[252,149481,1209],{"class":311},[252,149483,149484],{"class":367},"岁\"",[252,149486,269],{"class":262},[252,149488,149489],{"class":254,"line":1353},[252,149490,2539],{"emptyLinePlaceholder":181},[252,149492,149493],{"class":254,"line":1359},[252,149494,149495],{"class":262},"introduce(name, age)\n",[19,149497,149498],{},"面向对象：",[244,149500,149502],{"className":30518,"code":149501,"language":30520,"meta":169,"style":169},"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",[22,149503,149504,149512,149520,149549,149553,149557,149567,149576,149585],{"__ignoreMap":169},[252,149505,149506,149508,149510],{"class":254,"line":255},[252,149507,14834],{"class":258},[252,149509,8038],{"class":2102},[252,149511,3878],{"class":262},[252,149513,149514,149516,149518],{"class":254,"line":170},[252,149515,30941],{"class":258},[252,149517,149452],{"class":2102},[252,149519,30947],{"class":262},[252,149521,149522,149524,149526,149528,149530,149533,149535,149537,149539,149541,149543,149545,149547],{"class":254,"line":1318},[252,149523,32591],{"class":311},[252,149525,263],{"class":262},[252,149527,315],{"class":258},[252,149529,149466],{"class":367},[252,149531,149532],{"class":311},"{self",[252,149534,80440],{"class":262},[252,149536,1209],{"class":311},[252,149538,149475],{"class":367},[252,149540,149532],{"class":311},[252,149542,80452],{"class":262},[252,149544,1209],{"class":311},[252,149546,149484],{"class":367},[252,149548,269],{"class":262},[252,149550,149551],{"class":254,"line":1333},[252,149552,2539],{"emptyLinePlaceholder":181},[252,149554,149555],{"class":254,"line":1339},[252,149556,2539],{"emptyLinePlaceholder":181},[252,149558,149559,149562,149564],{"class":254,"line":1353},[252,149560,149561],{"class":262},"student ",[252,149563,308],{"class":258},[252,149565,149566],{"class":262}," Student()\n",[252,149568,149569,149572,149574],{"class":254,"line":1359},[252,149570,149571],{"class":262},"student.name ",[252,149573,308],{"class":258},[252,149575,149433],{"class":367},[252,149577,149578,149581,149583],{"class":254,"line":1450},[252,149579,149580],{"class":262},"student.age ",[252,149582,308],{"class":258},[252,149584,146631],{"class":311},[252,149586,149587],{"class":254,"line":1456},[252,149588,149589],{"class":262},"student.introduce()\n",[19,149591,149592],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149594,149596],{"id":149595},"_112-类和对象","11.2 类和对象",[19,149598,149599],{},"类是模板，对象是根据模板创建出来的具体实例。",[244,149601,149603],{"className":30518,"code":149602,"language":30520,"meta":169,"style":169},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[22,149604,149605,149613,149618,149622,149626,149635],{"__ignoreMap":169},[252,149606,149607,149609,149611],{"class":254,"line":255},[252,149608,14834],{"class":258},[252,149610,8038],{"class":2102},[252,149612,3878],{"class":262},[252,149614,149615],{"class":254,"line":170},[252,149616,149617],{"class":258},"    pass\n",[252,149619,149620],{"class":254,"line":1318},[252,149621,2539],{"emptyLinePlaceholder":181},[252,149623,149624],{"class":254,"line":1333},[252,149625,2539],{"emptyLinePlaceholder":181},[252,149627,149628,149631,149633],{"class":254,"line":1339},[252,149629,149630],{"class":262},"student1 ",[252,149632,308],{"class":258},[252,149634,149566],{"class":262},[252,149636,149637,149640,149642],{"class":254,"line":1353},[252,149638,149639],{"class":262},"student2 ",[252,149641,308],{"class":258},[252,149643,149566],{"class":262},[19,149645,149646,149649,149650,132,149653,149656],{},[22,149647,149648],{},"Student"," 是类，",[22,149651,149652],{},"student1",[22,149654,149655],{},"student2"," 是对象。",[14,149658,149660],{"id":149659},"_113-属性","11.3 属性",[19,149662,149663],{},"属性是对象保存的数据。",[244,149665,149667],{"className":30518,"code":149666,"language":30520,"meta":169,"style":169},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[22,149668,149669,149677,149681,149685,149689,149697,149705,149713,149717,149724],{"__ignoreMap":169},[252,149670,149671,149673,149675],{"class":254,"line":255},[252,149672,14834],{"class":258},[252,149674,8038],{"class":2102},[252,149676,3878],{"class":262},[252,149678,149679],{"class":254,"line":170},[252,149680,149617],{"class":258},[252,149682,149683],{"class":254,"line":1318},[252,149684,2539],{"emptyLinePlaceholder":181},[252,149686,149687],{"class":254,"line":1333},[252,149688,2539],{"emptyLinePlaceholder":181},[252,149690,149691,149693,149695],{"class":254,"line":1339},[252,149692,149561],{"class":262},[252,149694,308],{"class":258},[252,149696,149566],{"class":262},[252,149698,149699,149701,149703],{"class":254,"line":1353},[252,149700,149571],{"class":262},[252,149702,308],{"class":258},[252,149704,149433],{"class":367},[252,149706,149707,149709,149711],{"class":254,"line":1359},[252,149708,149580],{"class":262},[252,149710,308],{"class":258},[252,149712,146631],{"class":311},[252,149714,149715],{"class":254,"line":1450},[252,149716,2539],{"emptyLinePlaceholder":181},[252,149718,149719,149721],{"class":254,"line":1456},[252,149720,30555],{"class":311},[252,149722,149723],{"class":262},"(student.name)\n",[252,149725,149726,149728],{"class":254,"line":1468},[252,149727,30555],{"class":311},[252,149729,149730],{"class":262},"(student.age)\n",[19,149732,149733],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149735,149737],{"id":149736},"_114-方法","11.4 方法",[19,149739,149740],{},"类中的函数叫方法。",[244,149742,149743],{"className":30518,"code":149501,"language":30520,"meta":169,"style":169},[22,149744,149745,149753,149761,149789,149793,149797,149805,149813,149821],{"__ignoreMap":169},[252,149746,149747,149749,149751],{"class":254,"line":255},[252,149748,14834],{"class":258},[252,149750,8038],{"class":2102},[252,149752,3878],{"class":262},[252,149754,149755,149757,149759],{"class":254,"line":170},[252,149756,30941],{"class":258},[252,149758,149452],{"class":2102},[252,149760,30947],{"class":262},[252,149762,149763,149765,149767,149769,149771,149773,149775,149777,149779,149781,149783,149785,149787],{"class":254,"line":1318},[252,149764,32591],{"class":311},[252,149766,263],{"class":262},[252,149768,315],{"class":258},[252,149770,149466],{"class":367},[252,149772,149532],{"class":311},[252,149774,80440],{"class":262},[252,149776,1209],{"class":311},[252,149778,149475],{"class":367},[252,149780,149532],{"class":311},[252,149782,80452],{"class":262},[252,149784,1209],{"class":311},[252,149786,149484],{"class":367},[252,149788,269],{"class":262},[252,149790,149791],{"class":254,"line":1333},[252,149792,2539],{"emptyLinePlaceholder":181},[252,149794,149795],{"class":254,"line":1339},[252,149796,2539],{"emptyLinePlaceholder":181},[252,149798,149799,149801,149803],{"class":254,"line":1353},[252,149800,149561],{"class":262},[252,149802,308],{"class":258},[252,149804,149566],{"class":262},[252,149806,149807,149809,149811],{"class":254,"line":1359},[252,149808,149571],{"class":262},[252,149810,308],{"class":258},[252,149812,149433],{"class":367},[252,149814,149815,149817,149819],{"class":254,"line":1450},[252,149816,149580],{"class":262},[252,149818,308],{"class":258},[252,149820,146631],{"class":311},[252,149822,149823],{"class":254,"line":1456},[252,149824,149589],{"class":262},[19,149826,149827,149829,149830,149832],{},[22,149828,30963],{}," 表示当前对象。调用方法时不需要手动传入 ",[22,149831,30963],{},"，Python 会自动传。",[14,149834,149836],{"id":149835},"_115-构造方法__init__","11.5 构造方法__init__",[19,149838,149839,149841],{},[22,149840,30969],{}," 在对象创建时自动执行，用于初始化属性。",[244,149843,149845],{"className":30518,"code":149844,"language":30520,"meta":169,"style":169},"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",[22,149846,149847,149855,149864,149876,149888,149899,149903,149911,149949,149953,149957,149979],{"__ignoreMap":169},[252,149848,149849,149851,149853],{"class":254,"line":255},[252,149850,14834],{"class":258},[252,149852,8038],{"class":2102},[252,149854,3878],{"class":262},[252,149856,149857,149859,149861],{"class":254,"line":170},[252,149858,30941],{"class":258},[252,149860,30944],{"class":311},[252,149862,149863],{"class":262},"(self, name, age, score):\n",[252,149865,149866,149868,149871,149873],{"class":254,"line":1318},[252,149867,30985],{"class":311},[252,149869,149870],{"class":262},".name ",[252,149872,308],{"class":258},[252,149874,149875],{"class":262}," name\n",[252,149877,149878,149880,149883,149885],{"class":254,"line":1333},[252,149879,30985],{"class":311},[252,149881,149882],{"class":262},".age ",[252,149884,308],{"class":258},[252,149886,149887],{"class":262}," age\n",[252,149889,149890,149892,149895,149897],{"class":254,"line":1339},[252,149891,30985],{"class":311},[252,149893,149894],{"class":262},".score ",[252,149896,308],{"class":258},[252,149898,1718],{"class":262},[252,149900,149901],{"class":254,"line":1353},[252,149902,2539],{"emptyLinePlaceholder":181},[252,149904,149905,149907,149909],{"class":254,"line":1359},[252,149906,30941],{"class":258},[252,149908,149452],{"class":2102},[252,149910,30947],{"class":262},[252,149912,149913,149915,149917,149919,149921,149923,149925,149927,149929,149931,149933,149935,149938,149940,149943,149945,149947],{"class":254,"line":1450},[252,149914,32591],{"class":311},[252,149916,263],{"class":262},[252,149918,315],{"class":258},[252,149920,149466],{"class":367},[252,149922,149532],{"class":311},[252,149924,80440],{"class":262},[252,149926,1209],{"class":311},[252,149928,149475],{"class":367},[252,149930,149532],{"class":311},[252,149932,80452],{"class":262},[252,149934,1209],{"class":311},[252,149936,149937],{"class":367},"岁，成绩",[252,149939,149532],{"class":311},[252,149941,149942],{"class":262},".score",[252,149944,1209],{"class":311},[252,149946,514],{"class":367},[252,149948,269],{"class":262},[252,149950,149951],{"class":254,"line":1456},[252,149952,2539],{"emptyLinePlaceholder":181},[252,149954,149955],{"class":254,"line":1468},[252,149956,2539],{"emptyLinePlaceholder":181},[252,149958,149959,149961,149963,149966,149969,149971,149973,149975,149977],{"class":254,"line":1751},[252,149960,149561],{"class":262},[252,149962,308],{"class":258},[252,149964,149965],{"class":262}," Student(",[252,149967,149968],{"class":367},"\"小明\"",[252,149970,12575],{"class":262},[252,149972,913],{"class":311},[252,149974,12575],{"class":262},[252,149976,1252],{"class":311},[252,149978,269],{"class":262},[252,149980,149981],{"class":254,"line":1756},[252,149982,149589],{"class":262},[19,149984,149985],{},"构造方法的好处：",[207,149987,149988,149991,149994],{},[210,149989,149990],{},"创建对象时必须提供必要数据。",[210,149992,149993],{},"属性初始化集中，不容易漏。",[210,149995,149996],{},"对象状态更完整。",[14,149998,150000,150001],{"id":149999},"_116-str","11.6 ",[412,150002,1438],{},[19,150004,150005,150006,28525],{},"直接打印对象时，默认输出不直观。可以定义 ",[22,150007,150008],{},"__str__",[244,150010,150012],{"className":30518,"code":150011,"language":30520,"meta":169,"style":169},"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",[22,150013,150014,150022,150031,150041,150051,150055,150064,150092,150096,150100,150116],{"__ignoreMap":169},[252,150015,150016,150018,150020],{"class":254,"line":255},[252,150017,14834],{"class":258},[252,150019,8038],{"class":2102},[252,150021,3878],{"class":262},[252,150023,150024,150026,150028],{"class":254,"line":170},[252,150025,30941],{"class":258},[252,150027,30944],{"class":311},[252,150029,150030],{"class":262},"(self, name, age):\n",[252,150032,150033,150035,150037,150039],{"class":254,"line":1318},[252,150034,30985],{"class":311},[252,150036,149870],{"class":262},[252,150038,308],{"class":258},[252,150040,149875],{"class":262},[252,150042,150043,150045,150047,150049],{"class":254,"line":1333},[252,150044,30985],{"class":311},[252,150046,149882],{"class":262},[252,150048,308],{"class":258},[252,150050,149887],{"class":262},[252,150052,150053],{"class":254,"line":1339},[252,150054,2539],{"emptyLinePlaceholder":181},[252,150056,150057,150059,150062],{"class":254,"line":1353},[252,150058,30941],{"class":258},[252,150060,150061],{"class":311}," __str__",[252,150063,30947],{"class":262},[252,150065,150066,150068,150071,150074,150076,150078,150080,150083,150085,150087,150089],{"class":254,"line":1359},[252,150067,14892],{"class":258},[252,150069,150070],{"class":258}," f",[252,150072,150073],{"class":367},"\"Student(name=",[252,150075,149532],{"class":311},[252,150077,80440],{"class":262},[252,150079,1209],{"class":311},[252,150081,150082],{"class":367},", age=",[252,150084,149532],{"class":311},[252,150086,80452],{"class":262},[252,150088,1209],{"class":311},[252,150090,150091],{"class":367},")\"\n",[252,150093,150094],{"class":254,"line":1450},[252,150095,2539],{"emptyLinePlaceholder":181},[252,150097,150098],{"class":254,"line":1456},[252,150099,2539],{"emptyLinePlaceholder":181},[252,150101,150102,150104,150106,150108,150110,150112,150114],{"class":254,"line":1468},[252,150103,149561],{"class":262},[252,150105,308],{"class":258},[252,150107,149965],{"class":262},[252,150109,149968],{"class":367},[252,150111,12575],{"class":262},[252,150113,913],{"class":311},[252,150115,269],{"class":262},[252,150117,150118,150120],{"class":254,"line":1751},[252,150119,30555],{"class":311},[252,150121,150122],{"class":262},"(student)\n",[14,150124,150126],{"id":150125},"_117-封装","11.7 封装",[19,150128,150129],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150131,150132],{},"Python 中以双下划线开头的属性通常视为私有属性。",[244,150134,150136],{"className":30518,"code":150135,"language":30520,"meta":169,"style":169},"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",[22,150137,150138,150147,150156,150168,150180,150184,150193,150202,150206,150216,150229,150240,150245,150256,150260,150269,150281,150292,150296,150309,150320,150324,150335,150339,150343,150361,150370,150379],{"__ignoreMap":169},[252,150139,150140,150142,150145],{"class":254,"line":255},[252,150141,14834],{"class":258},[252,150143,150144],{"class":2102}," Account",[252,150146,3878],{"class":262},[252,150148,150149,150151,150153],{"class":254,"line":170},[252,150150,30941],{"class":258},[252,150152,30944],{"class":311},[252,150154,150155],{"class":262},"(self, owner, balance):\n",[252,150157,150158,150160,150163,150165],{"class":254,"line":1318},[252,150159,30985],{"class":311},[252,150161,150162],{"class":262},".owner ",[252,150164,308],{"class":258},[252,150166,150167],{"class":262}," owner\n",[252,150169,150170,150172,150175,150177],{"class":254,"line":1333},[252,150171,30985],{"class":311},[252,150173,150174],{"class":262},".__balance ",[252,150176,308],{"class":258},[252,150178,150179],{"class":262}," balance\n",[252,150181,150182],{"class":254,"line":1339},[252,150183,2539],{"emptyLinePlaceholder":181},[252,150185,150186,150188,150191],{"class":254,"line":1353},[252,150187,30941],{"class":258},[252,150189,150190],{"class":2102}," get_balance",[252,150192,30947],{"class":262},[252,150194,150195,150197,150199],{"class":254,"line":1359},[252,150196,14892],{"class":258},[252,150198,39013],{"class":311},[252,150200,150201],{"class":262},".__balance\n",[252,150203,150204],{"class":254,"line":1450},[252,150205,2539],{"emptyLinePlaceholder":181},[252,150207,150208,150210,150213],{"class":254,"line":1456},[252,150209,30941],{"class":258},[252,150211,150212],{"class":2102}," deposit",[252,150214,150215],{"class":262},"(self, money):\n",[252,150217,150218,150220,150223,150225,150227],{"class":254,"line":1468},[252,150219,2636],{"class":258},[252,150221,150222],{"class":262}," money ",[252,150224,1727],{"class":258},[252,150226,4232],{"class":311},[252,150228,3878],{"class":262},[252,150230,150231,150233,150235,150238],{"class":254,"line":1751},[252,150232,34790],{"class":311},[252,150234,263],{"class":262},[252,150236,150237],{"class":367},"\"存款金额必须大于0\"",[252,150239,269],{"class":262},[252,150241,150242],{"class":254,"line":1756},[252,150243,150244],{"class":258},"            return\n",[252,150246,150247,150249,150251,150253],{"class":254,"line":1762},[252,150248,30985],{"class":311},[252,150250,150174],{"class":262},[252,150252,9617],{"class":258},[252,150254,150255],{"class":262}," money\n",[252,150257,150258],{"class":254,"line":1767},[252,150259,2539],{"emptyLinePlaceholder":181},[252,150261,150262,150264,150267],{"class":254,"line":1781},[252,150263,30941],{"class":258},[252,150265,150266],{"class":2102}," withdraw",[252,150268,150215],{"class":262},[252,150270,150271,150273,150275,150277,150279],{"class":254,"line":1786},[252,150272,2636],{"class":258},[252,150274,150222],{"class":262},[252,150276,1727],{"class":258},[252,150278,4232],{"class":311},[252,150280,3878],{"class":262},[252,150282,150283,150285,150287,150290],{"class":254,"line":1792},[252,150284,34790],{"class":311},[252,150286,263],{"class":262},[252,150288,150289],{"class":367},"\"取款金额必须大于0\"",[252,150291,269],{"class":262},[252,150293,150294],{"class":254,"line":1813},[252,150295,150244],{"class":258},[252,150297,150298,150300,150302,150304,150306],{"class":254,"line":1818},[252,150299,2636],{"class":258},[252,150301,150222],{"class":262},[252,150303,1223],{"class":258},[252,150305,39013],{"class":311},[252,150307,150308],{"class":262},".__balance:\n",[252,150310,150311,150313,150315,150318],{"class":254,"line":1832},[252,150312,34790],{"class":311},[252,150314,263],{"class":262},[252,150316,150317],{"class":367},"\"余额不足\"",[252,150319,269],{"class":262},[252,150321,150322],{"class":254,"line":1837},[252,150323,150244],{"class":258},[252,150325,150326,150328,150330,150333],{"class":254,"line":1866},[252,150327,30985],{"class":311},[252,150329,150174],{"class":262},[252,150331,150332],{"class":258},"-=",[252,150334,150255],{"class":262},[252,150336,150337],{"class":254,"line":1871},[252,150338,2539],{"emptyLinePlaceholder":181},[252,150340,150341],{"class":254,"line":1888},[252,150342,2539],{"emptyLinePlaceholder":181},[252,150344,150345,150348,150350,150353,150355,150357,150359],{"class":254,"line":1893},[252,150346,150347],{"class":262},"account ",[252,150349,308],{"class":258},[252,150351,150352],{"class":262}," Account(",[252,150354,149968],{"class":367},[252,150356,12575],{"class":262},[252,150358,6550],{"class":311},[252,150360,269],{"class":262},[252,150362,150363,150366,150368],{"class":254,"line":1898},[252,150364,150365],{"class":262},"account.deposit(",[252,150367,1861],{"class":311},[252,150369,269],{"class":262},[252,150371,150372,150375,150377],{"class":254,"line":1903},[252,150373,150374],{"class":262},"account.withdraw(",[252,150376,574],{"class":311},[252,150378,269],{"class":262},[252,150380,150381,150383],{"class":254,"line":1917},[252,150382,30555],{"class":311},[252,150384,150385],{"class":262},"(account.get_balance())\n",[19,150387,150388],{},"封装的意义是避免外部随意修改内部状态。",[14,150390,150392],{"id":150391},"_118-继承","11.8 继承",[19,150394,150395],{},"继承可以让子类复用父类的属性和方法。",[244,150397,150399],{"className":30518,"code":150398,"language":30520,"meta":169,"style":169},"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",[22,150400,150401,150410,150419,150430,150434,150438,150452,150461,150472,150476,150480,150490,150495],{"__ignoreMap":169},[252,150402,150403,150405,150408],{"class":254,"line":255},[252,150404,14834],{"class":258},[252,150406,150407],{"class":2102}," Animal",[252,150409,3878],{"class":262},[252,150411,150412,150414,150417],{"class":254,"line":170},[252,150413,30941],{"class":258},[252,150415,150416],{"class":2102}," eat",[252,150418,30947],{"class":262},[252,150420,150421,150423,150425,150428],{"class":254,"line":1318},[252,150422,32591],{"class":311},[252,150424,263],{"class":262},[252,150426,150427],{"class":367},"\"吃东西\"",[252,150429,269],{"class":262},[252,150431,150432],{"class":254,"line":1333},[252,150433,2539],{"emptyLinePlaceholder":181},[252,150435,150436],{"class":254,"line":1339},[252,150437,2539],{"emptyLinePlaceholder":181},[252,150439,150440,150442,150445,150447,150450],{"class":254,"line":1353},[252,150441,14834],{"class":258},[252,150443,150444],{"class":2102}," Dog",[252,150446,263],{"class":262},[252,150448,150449],{"class":2102},"Animal",[252,150451,30926],{"class":262},[252,150453,150454,150456,150459],{"class":254,"line":1359},[252,150455,30941],{"class":258},[252,150457,150458],{"class":2102}," bark",[252,150460,30947],{"class":262},[252,150462,150463,150465,150467,150470],{"class":254,"line":1450},[252,150464,32591],{"class":311},[252,150466,263],{"class":262},[252,150468,150469],{"class":367},"\"汪汪\"",[252,150471,269],{"class":262},[252,150473,150474],{"class":254,"line":1456},[252,150475,2539],{"emptyLinePlaceholder":181},[252,150477,150478],{"class":254,"line":1468},[252,150479,2539],{"emptyLinePlaceholder":181},[252,150481,150482,150485,150487],{"class":254,"line":1751},[252,150483,150484],{"class":262},"dog ",[252,150486,308],{"class":258},[252,150488,150489],{"class":262}," Dog()\n",[252,150491,150492],{"class":254,"line":1756},[252,150493,150494],{"class":262},"dog.eat()\n",[252,150496,150497],{"class":254,"line":1762},[252,150498,150499],{"class":262},"dog.bark()\n",[19,150501,150502],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150504,150506],{"id":150505},"_119-方法重写","11.9 方法重写",[244,150508,150510],{"className":30518,"code":150509,"language":30520,"meta":169,"style":169},"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",[22,150511,150512,150520,150529,150540,150544,150548,150560,150568,150578,150582,150586,150599,150607,150618,150622,150626,150634,150644,150648,150653],{"__ignoreMap":169},[252,150513,150514,150516,150518],{"class":254,"line":255},[252,150515,14834],{"class":258},[252,150517,150407],{"class":2102},[252,150519,3878],{"class":262},[252,150521,150522,150524,150527],{"class":254,"line":170},[252,150523,30941],{"class":258},[252,150525,150526],{"class":2102}," speak",[252,150528,30947],{"class":262},[252,150530,150531,150533,150535,150538],{"class":254,"line":1318},[252,150532,32591],{"class":311},[252,150534,263],{"class":262},[252,150536,150537],{"class":367},"\"动物叫\"",[252,150539,269],{"class":262},[252,150541,150542],{"class":254,"line":1333},[252,150543,2539],{"emptyLinePlaceholder":181},[252,150545,150546],{"class":254,"line":1339},[252,150547,2539],{"emptyLinePlaceholder":181},[252,150549,150550,150552,150554,150556,150558],{"class":254,"line":1353},[252,150551,14834],{"class":258},[252,150553,150444],{"class":2102},[252,150555,263],{"class":262},[252,150557,150449],{"class":2102},[252,150559,30926],{"class":262},[252,150561,150562,150564,150566],{"class":254,"line":1359},[252,150563,30941],{"class":258},[252,150565,150526],{"class":2102},[252,150567,30947],{"class":262},[252,150569,150570,150572,150574,150576],{"class":254,"line":1450},[252,150571,32591],{"class":311},[252,150573,263],{"class":262},[252,150575,150469],{"class":367},[252,150577,269],{"class":262},[252,150579,150580],{"class":254,"line":1456},[252,150581,2539],{"emptyLinePlaceholder":181},[252,150583,150584],{"class":254,"line":1468},[252,150585,2539],{"emptyLinePlaceholder":181},[252,150587,150588,150590,150593,150595,150597],{"class":254,"line":1751},[252,150589,14834],{"class":258},[252,150591,150592],{"class":2102}," Cat",[252,150594,263],{"class":262},[252,150596,150449],{"class":2102},[252,150598,30926],{"class":262},[252,150600,150601,150603,150605],{"class":254,"line":1756},[252,150602,30941],{"class":258},[252,150604,150526],{"class":2102},[252,150606,30947],{"class":262},[252,150608,150609,150611,150613,150616],{"class":254,"line":1762},[252,150610,32591],{"class":311},[252,150612,263],{"class":262},[252,150614,150615],{"class":367},"\"喵喵\"",[252,150617,269],{"class":262},[252,150619,150620],{"class":254,"line":1767},[252,150621,2539],{"emptyLinePlaceholder":181},[252,150623,150624],{"class":254,"line":1781},[252,150625,2539],{"emptyLinePlaceholder":181},[252,150627,150628,150630,150632],{"class":254,"line":1786},[252,150629,150484],{"class":262},[252,150631,308],{"class":258},[252,150633,150489],{"class":262},[252,150635,150636,150639,150641],{"class":254,"line":1792},[252,150637,150638],{"class":262},"cat ",[252,150640,308],{"class":258},[252,150642,150643],{"class":262}," Cat()\n",[252,150645,150646],{"class":254,"line":1813},[252,150647,2539],{"emptyLinePlaceholder":181},[252,150649,150650],{"class":254,"line":1818},[252,150651,150652],{"class":262},"dog.speak()\n",[252,150654,150655],{"class":254,"line":1832},[252,150656,150657],{"class":262},"cat.speak()\n",[14,150659,150661],{"id":150660},"_1110-super","11.10 super",[19,150663,150664,150665,150668],{},"子类可以通过 ",[22,150666,150667],{},"super()"," 调用父类方法。",[244,150670,150672],{"className":30518,"code":150671,"language":30520,"meta":169,"style":169},"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",[22,150673,150674,150682,150691,150701,150705,150709,150721,150730,150741,150751,150755,150759,150775],{"__ignoreMap":169},[252,150675,150676,150678,150680],{"class":254,"line":255},[252,150677,14834],{"class":258},[252,150679,15709],{"class":2102},[252,150681,3878],{"class":262},[252,150683,150684,150686,150688],{"class":254,"line":170},[252,150685,30941],{"class":258},[252,150687,30944],{"class":311},[252,150689,150690],{"class":262},"(self, name):\n",[252,150692,150693,150695,150697,150699],{"class":254,"line":1318},[252,150694,30985],{"class":311},[252,150696,149870],{"class":262},[252,150698,308],{"class":258},[252,150700,149875],{"class":262},[252,150702,150703],{"class":254,"line":1333},[252,150704,2539],{"emptyLinePlaceholder":181},[252,150706,150707],{"class":254,"line":1339},[252,150708,2539],{"emptyLinePlaceholder":181},[252,150710,150711,150713,150715,150717,150719],{"class":254,"line":1353},[252,150712,14834],{"class":258},[252,150714,8038],{"class":2102},[252,150716,263],{"class":262},[252,150718,19185],{"class":2102},[252,150720,30926],{"class":262},[252,150722,150723,150725,150727],{"class":254,"line":1359},[252,150724,30941],{"class":258},[252,150726,30944],{"class":311},[252,150728,150729],{"class":262},"(self, name, score):\n",[252,150731,150732,150734,150736,150738],{"class":254,"line":1450},[252,150733,30957],{"class":311},[252,150735,17401],{"class":262},[252,150737,30969],{"class":311},[252,150739,150740],{"class":262},"(name)\n",[252,150742,150743,150745,150747,150749],{"class":254,"line":1456},[252,150744,30985],{"class":311},[252,150746,149894],{"class":262},[252,150748,308],{"class":258},[252,150750,1718],{"class":262},[252,150752,150753],{"class":254,"line":1468},[252,150754,2539],{"emptyLinePlaceholder":181},[252,150756,150757],{"class":254,"line":1751},[252,150758,2539],{"emptyLinePlaceholder":181},[252,150760,150761,150763,150765,150767,150769,150771,150773],{"class":254,"line":1756},[252,150762,149561],{"class":262},[252,150764,308],{"class":258},[252,150766,149965],{"class":262},[252,150768,149968],{"class":367},[252,150770,12575],{"class":262},[252,150772,1252],{"class":311},[252,150774,269],{"class":262},[252,150776,150777,150779],{"class":254,"line":1762},[252,150778,30555],{"class":311},[252,150780,150781],{"class":262},"(student.name, student.score)\n",[14,150783,150785],{"id":150784},"_1111-多态","11.11 多态",[19,150787,150788],{},"多态指不同对象响应同一个方法，表现出不同结果。",[244,150790,150792],{"className":30518,"code":150791,"language":30520,"meta":169,"style":169},"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",[22,150793,150794,150802,150810,150820,150824,150828,150836,150844,150854,150858,150862,150872,150877,150881,150885,150890],{"__ignoreMap":169},[252,150795,150796,150798,150800],{"class":254,"line":255},[252,150797,14834],{"class":258},[252,150799,150444],{"class":2102},[252,150801,3878],{"class":262},[252,150803,150804,150806,150808],{"class":254,"line":170},[252,150805,30941],{"class":258},[252,150807,150526],{"class":2102},[252,150809,30947],{"class":262},[252,150811,150812,150814,150816,150818],{"class":254,"line":1318},[252,150813,32591],{"class":311},[252,150815,263],{"class":262},[252,150817,150469],{"class":367},[252,150819,269],{"class":262},[252,150821,150822],{"class":254,"line":1333},[252,150823,2539],{"emptyLinePlaceholder":181},[252,150825,150826],{"class":254,"line":1339},[252,150827,2539],{"emptyLinePlaceholder":181},[252,150829,150830,150832,150834],{"class":254,"line":1353},[252,150831,14834],{"class":258},[252,150833,150592],{"class":2102},[252,150835,3878],{"class":262},[252,150837,150838,150840,150842],{"class":254,"line":1359},[252,150839,30941],{"class":258},[252,150841,150526],{"class":2102},[252,150843,30947],{"class":262},[252,150845,150846,150848,150850,150852],{"class":254,"line":1450},[252,150847,32591],{"class":311},[252,150849,263],{"class":262},[252,150851,150615],{"class":367},[252,150853,269],{"class":262},[252,150855,150856],{"class":254,"line":1456},[252,150857,2539],{"emptyLinePlaceholder":181},[252,150859,150860],{"class":254,"line":1468},[252,150861,2539],{"emptyLinePlaceholder":181},[252,150863,150864,150866,150869],{"class":254,"line":1751},[252,150865,32087],{"class":258},[252,150867,150868],{"class":2102}," make_sound",[252,150870,150871],{"class":262},"(animal):\n",[252,150873,150874],{"class":254,"line":1756},[252,150875,150876],{"class":262},"    animal.speak()\n",[252,150878,150879],{"class":254,"line":1762},[252,150880,2539],{"emptyLinePlaceholder":181},[252,150882,150883],{"class":254,"line":1767},[252,150884,2539],{"emptyLinePlaceholder":181},[252,150886,150887],{"class":254,"line":1781},[252,150888,150889],{"class":262},"make_sound(Dog())\n",[252,150891,150892],{"class":254,"line":1786},[252,150893,150894],{"class":262},"make_sound(Cat())\n",[19,150896,150897],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150899,150901],{"id":150900},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,150903,150904],{},"实例属性属于对象：",[244,150906,150908],{"className":30518,"code":150907,"language":30520,"meta":169,"style":169},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[22,150909,150910,150918,150926],{"__ignoreMap":169},[252,150911,150912,150914,150916],{"class":254,"line":255},[252,150913,14834],{"class":258},[252,150915,8038],{"class":2102},[252,150917,3878],{"class":262},[252,150919,150920,150922,150924],{"class":254,"line":170},[252,150921,30941],{"class":258},[252,150923,30944],{"class":311},[252,150925,150690],{"class":262},[252,150927,150928,150930,150932,150934],{"class":254,"line":1318},[252,150929,30985],{"class":311},[252,150931,149870],{"class":262},[252,150933,308],{"class":258},[252,150935,149875],{"class":262},[19,150937,150938],{},"类属性属于类，所有对象共享：",[244,150940,150942],{"className":30518,"code":150941,"language":30520,"meta":169,"style":169},"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",[22,150943,150944,150952,150962,150966,150974,150984,150988,150992,151005,151019,151023,151030,151037],{"__ignoreMap":169},[252,150945,150946,150948,150950],{"class":254,"line":255},[252,150947,14834],{"class":258},[252,150949,8038],{"class":2102},[252,150951,3878],{"class":262},[252,150953,150954,150957,150959],{"class":254,"line":170},[252,150955,150956],{"class":262},"    school ",[252,150958,308],{"class":258},[252,150960,150961],{"class":367}," \"黑马学校\"\n",[252,150963,150964],{"class":254,"line":1318},[252,150965,2539],{"emptyLinePlaceholder":181},[252,150967,150968,150970,150972],{"class":254,"line":1333},[252,150969,30941],{"class":258},[252,150971,30944],{"class":311},[252,150973,150690],{"class":262},[252,150975,150976,150978,150980,150982],{"class":254,"line":1339},[252,150977,30985],{"class":311},[252,150979,149870],{"class":262},[252,150981,308],{"class":258},[252,150983,149875],{"class":262},[252,150985,150986],{"class":254,"line":1353},[252,150987,2539],{"emptyLinePlaceholder":181},[252,150989,150990],{"class":254,"line":1359},[252,150991,2539],{"emptyLinePlaceholder":181},[252,150993,150994,150997,150999,151001,151003],{"class":254,"line":1450},[252,150995,150996],{"class":262},"s1 ",[252,150998,308],{"class":258},[252,151000,149965],{"class":262},[252,151002,149968],{"class":367},[252,151004,269],{"class":262},[252,151006,151007,151010,151012,151014,151017],{"class":254,"line":1456},[252,151008,151009],{"class":262},"s2 ",[252,151011,308],{"class":258},[252,151013,149965],{"class":262},[252,151015,151016],{"class":367},"\"小红\"",[252,151018,269],{"class":262},[252,151020,151021],{"class":254,"line":1468},[252,151022,2539],{"emptyLinePlaceholder":181},[252,151024,151025,151027],{"class":254,"line":1751},[252,151026,30555],{"class":311},[252,151028,151029],{"class":262},"(s1.school)\n",[252,151031,151032,151034],{"class":254,"line":1756},[252,151033,30555],{"class":311},[252,151035,151036],{"class":262},"(s2.school)\n",[252,151038,151039,151041],{"class":254,"line":1762},[252,151040,30555],{"class":311},[252,151042,151043],{"class":262},"(Student.school)\n",[19,151045,151046],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151048,151050],{"id":151049},"_1113-类方法和静态方法","11.13 类方法和静态方法",[224,151052,151054],{"id":151053},"_11131-类方法","11.13.1 类方法",[19,151056,151057,151058,151061,151062,28525],{},"类方法使用 ",[22,151059,151060],{},"@classmethod","，第一个参数通常是 ",[22,151063,151064],{},"cls",[244,151066,151068],{"className":30518,"code":151067,"language":30520,"meta":169,"style":169},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[22,151069,151070,151078,151086,151090,151098,151108,151118,151122,151126],{"__ignoreMap":169},[252,151071,151072,151074,151076],{"class":254,"line":255},[252,151073,14834],{"class":258},[252,151075,8038],{"class":2102},[252,151077,3878],{"class":262},[252,151079,151080,151082,151084],{"class":254,"line":170},[252,151081,150956],{"class":262},[252,151083,308],{"class":258},[252,151085,150961],{"class":367},[252,151087,151088],{"class":254,"line":1318},[252,151089,2539],{"emptyLinePlaceholder":181},[252,151091,151092,151095],{"class":254,"line":1333},[252,151093,151094],{"class":2102},"    @",[252,151096,151097],{"class":311},"classmethod\n",[252,151099,151100,151102,151105],{"class":254,"line":1339},[252,151101,30941],{"class":258},[252,151103,151104],{"class":2102}," get_school",[252,151106,151107],{"class":262},"(cls):\n",[252,151109,151110,151112,151115],{"class":254,"line":1353},[252,151111,14892],{"class":258},[252,151113,151114],{"class":311}," cls",[252,151116,151117],{"class":262},".school\n",[252,151119,151120],{"class":254,"line":1359},[252,151121,2539],{"emptyLinePlaceholder":181},[252,151123,151124],{"class":254,"line":1450},[252,151125,2539],{"emptyLinePlaceholder":181},[252,151127,151128,151130],{"class":254,"line":1456},[252,151129,30555],{"class":311},[252,151131,151132],{"class":262},"(Student.get_school())\n",[224,151134,151136],{"id":151135},"_11132-静态方法","11.13.2 静态方法",[19,151138,151139,151140,151143],{},"静态方法使用 ",[22,151141,151142],{},"@staticmethod","，不需要访问实例和类。",[244,151145,151147],{"className":30518,"code":151146,"language":30520,"meta":169,"style":169},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[22,151148,151149,151158,151165,151174,151185,151189,151193],{"__ignoreMap":169},[252,151150,151151,151153,151156],{"class":254,"line":255},[252,151152,14834],{"class":258},[252,151154,151155],{"class":2102}," MathUtils",[252,151157,3878],{"class":262},[252,151159,151160,151162],{"class":254,"line":170},[252,151161,151094],{"class":2102},[252,151163,151164],{"class":311},"staticmethod\n",[252,151166,151167,151169,151171],{"class":254,"line":1318},[252,151168,30941],{"class":258},[252,151170,5349],{"class":2102},[252,151172,151173],{"class":262},"(a, b):\n",[252,151175,151176,151178,151180,151182],{"class":254,"line":1333},[252,151177,14892],{"class":258},[252,151179,11009],{"class":262},[252,151181,744],{"class":258},[252,151183,151184],{"class":262}," b\n",[252,151186,151187],{"class":254,"line":1339},[252,151188,2539],{"emptyLinePlaceholder":181},[252,151190,151191],{"class":254,"line":1353},[252,151192,2539],{"emptyLinePlaceholder":181},[252,151194,151195,151197,151200,151202,151204,151206],{"class":254,"line":1359},[252,151196,30555],{"class":311},[252,151198,151199],{"class":262},"(MathUtils.add(",[252,151201,480],{"class":311},[252,151203,12575],{"class":262},[252,151205,340],{"class":311},[252,151207,30637],{"class":262},[19,151209,151210],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151212,151214],{"id":151213},"_1114-dataclass","11.14 dataclass",[19,151216,151217,151220],{},[22,151218,151219],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[244,151222,151224],{"className":30518,"code":151223,"language":30520,"meta":169,"style":169},"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",[22,151225,151226,151238,151242,151246,151251,151259,151267,151275,151283,151287,151291,151311],{"__ignoreMap":169},[252,151227,151228,151230,151233,151235],{"class":254,"line":255},[252,151229,30877],{"class":258},[252,151231,151232],{"class":262}," dataclasses ",[252,151234,30532],{"class":258},[252,151236,151237],{"class":262}," dataclass\n",[252,151239,151240],{"class":254,"line":170},[252,151241,2539],{"emptyLinePlaceholder":181},[252,151243,151244],{"class":254,"line":1318},[252,151245,2539],{"emptyLinePlaceholder":181},[252,151247,151248],{"class":254,"line":1333},[252,151249,151250],{"class":2102},"@dataclass\n",[252,151252,151253,151255,151257],{"class":254,"line":1339},[252,151254,14834],{"class":258},[252,151256,8038],{"class":2102},[252,151258,3878],{"class":262},[252,151260,151261,151264],{"class":254,"line":1353},[252,151262,151263],{"class":262},"    name: ",[252,151265,151266],{"class":311},"str\n",[252,151268,151269,151272],{"class":254,"line":1359},[252,151270,151271],{"class":262},"    age: ",[252,151273,151274],{"class":311},"int\n",[252,151276,151277,151280],{"class":254,"line":1450},[252,151278,151279],{"class":262},"    score: ",[252,151281,151282],{"class":311},"float\n",[252,151284,151285],{"class":254,"line":1456},[252,151286,2539],{"emptyLinePlaceholder":181},[252,151288,151289],{"class":254,"line":1468},[252,151290,2539],{"emptyLinePlaceholder":181},[252,151292,151293,151295,151297,151299,151301,151303,151305,151307,151309],{"class":254,"line":1751},[252,151294,149561],{"class":262},[252,151296,308],{"class":258},[252,151298,149965],{"class":262},[252,151300,149968],{"class":367},[252,151302,12575],{"class":262},[252,151304,913],{"class":311},[252,151306,12575],{"class":262},[252,151308,1252],{"class":311},[252,151310,269],{"class":262},[252,151312,151313,151315],{"class":254,"line":1756},[252,151314,30555],{"class":311},[252,151316,150122],{"class":262},[19,151318,151319,151320,475,151322,151325],{},"它会自动生成 ",[22,151321,30969],{},[22,151323,151324],{},"__repr__"," 等方法。适合数据模型类。",[14,151327,151329],{"id":151328},"_1115-小案例学生类","11.15 小案例：学生类",[244,151331,151333],{"className":30518,"code":151332,"language":30520,"meta":169,"style":169},"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",[22,151334,151335,151343,151352,151364,151374,151384,151394,151398,151407,151420,151424,151433,151439,151451,151463,151475,151487,151491,151495,151501,151511,151520,151530,151538,151546,151555,151559,151563,151571,151607,151611,151615,151640,151647],{"__ignoreMap":169},[252,151336,151337,151339,151341],{"class":254,"line":255},[252,151338,14834],{"class":258},[252,151340,8038],{"class":2102},[252,151342,3878],{"class":262},[252,151344,151345,151347,151349],{"class":254,"line":170},[252,151346,30941],{"class":258},[252,151348,30944],{"class":311},[252,151350,151351],{"class":262},"(self, student_id, name, age, score):\n",[252,151353,151354,151356,151359,151361],{"class":254,"line":1318},[252,151355,30985],{"class":311},[252,151357,151358],{"class":262},".student_id ",[252,151360,308],{"class":258},[252,151362,151363],{"class":262}," student_id\n",[252,151365,151366,151368,151370,151372],{"class":254,"line":1333},[252,151367,30985],{"class":311},[252,151369,149870],{"class":262},[252,151371,308],{"class":258},[252,151373,149875],{"class":262},[252,151375,151376,151378,151380,151382],{"class":254,"line":1339},[252,151377,30985],{"class":311},[252,151379,149882],{"class":262},[252,151381,308],{"class":258},[252,151383,149887],{"class":262},[252,151385,151386,151388,151390,151392],{"class":254,"line":1353},[252,151387,30985],{"class":311},[252,151389,149894],{"class":262},[252,151391,308],{"class":258},[252,151393,1718],{"class":262},[252,151395,151396],{"class":254,"line":1359},[252,151397,2539],{"emptyLinePlaceholder":181},[252,151399,151400,151402,151405],{"class":254,"line":1450},[252,151401,30941],{"class":258},[252,151403,151404],{"class":2102}," is_passed",[252,151406,30947],{"class":262},[252,151408,151409,151411,151413,151415,151417],{"class":254,"line":1456},[252,151410,14892],{"class":258},[252,151412,39013],{"class":311},[252,151414,149894],{"class":262},[252,151416,1849],{"class":258},[252,151418,151419],{"class":311}," 60\n",[252,151421,151422],{"class":254,"line":1468},[252,151423,2539],{"emptyLinePlaceholder":181},[252,151425,151426,151428,151431],{"class":254,"line":1751},[252,151427,30941],{"class":258},[252,151429,151430],{"class":2102}," to_dict",[252,151432,30947],{"class":262},[252,151434,151435,151437],{"class":254,"line":1756},[252,151436,14892],{"class":258},[252,151438,15712],{"class":262},[252,151440,151441,151444,151446,151448],{"class":254,"line":1762},[252,151442,151443],{"class":367},"            \"student_id\"",[252,151445,51577],{"class":262},[252,151447,30963],{"class":311},[252,151449,151450],{"class":262},".student_id,\n",[252,151452,151453,151456,151458,151460],{"class":254,"line":1767},[252,151454,151455],{"class":367},"            \"name\"",[252,151457,51577],{"class":262},[252,151459,30963],{"class":311},[252,151461,151462],{"class":262},".name,\n",[252,151464,151465,151468,151470,151472],{"class":254,"line":1781},[252,151466,151467],{"class":367},"            \"age\"",[252,151469,51577],{"class":262},[252,151471,30963],{"class":311},[252,151473,151474],{"class":262},".age,\n",[252,151476,151477,151480,151482,151484],{"class":254,"line":1786},[252,151478,151479],{"class":367},"            \"score\"",[252,151481,51577],{"class":262},[252,151483,30963],{"class":311},[252,151485,151486],{"class":262},".score,\n",[252,151488,151489],{"class":254,"line":1792},[252,151490,2668],{"class":262},[252,151492,151493],{"class":254,"line":1813},[252,151494,2539],{"emptyLinePlaceholder":181},[252,151496,151497,151499],{"class":254,"line":1818},[252,151498,151094],{"class":2102},[252,151500,151097],{"class":311},[252,151502,151503,151505,151508],{"class":254,"line":1832},[252,151504,30941],{"class":258},[252,151506,151507],{"class":2102}," from_dict",[252,151509,151510],{"class":262},"(cls, data):\n",[252,151512,151513,151515,151517],{"class":254,"line":1837},[252,151514,14892],{"class":258},[252,151516,151114],{"class":311},[252,151518,151519],{"class":262},"(\n",[252,151521,151522,151525,151528],{"class":254,"line":1866},[252,151523,151524],{"class":262},"            data[",[252,151526,151527],{"class":367},"\"student_id\"",[252,151529,87974],{"class":262},[252,151531,151532,151534,151536],{"class":254,"line":1871},[252,151533,151524],{"class":262},[252,151535,62819],{"class":367},[252,151537,87974],{"class":262},[252,151539,151540,151542,151544],{"class":254,"line":1888},[252,151541,151524],{"class":262},[252,151543,69264],{"class":367},[252,151545,87974],{"class":262},[252,151547,151548,151550,151553],{"class":254,"line":1893},[252,151549,151524],{"class":262},[252,151551,151552],{"class":367},"\"score\"",[252,151554,87974],{"class":262},[252,151556,151557],{"class":254,"line":1898},[252,151558,38266],{"class":262},[252,151560,151561],{"class":254,"line":1903},[252,151562,2539],{"emptyLinePlaceholder":181},[252,151564,151565,151567,151569],{"class":254,"line":1917},[252,151566,30941],{"class":258},[252,151568,150061],{"class":311},[252,151570,30947],{"class":262},[252,151572,151573,151575,151577,151579,151581,151584,151586,151589,151591,151593,151595,151597,151599,151601,151603,151605],{"class":254,"line":1922},[252,151574,14892],{"class":258},[252,151576,150070],{"class":258},[252,151578,514],{"class":367},[252,151580,149532],{"class":311},[252,151582,151583],{"class":262},".student_id",[252,151585,1209],{"class":311},[252,151587,151588],{"class":311}," {self",[252,151590,80440],{"class":262},[252,151592,1209],{"class":311},[252,151594,151588],{"class":311},[252,151596,80452],{"class":262},[252,151598,1209],{"class":311},[252,151600,151588],{"class":311},[252,151602,149942],{"class":262},[252,151604,1209],{"class":311},[252,151606,25273],{"class":367},[252,151608,151609],{"class":254,"line":2716},[252,151610,2539],{"emptyLinePlaceholder":181},[252,151612,151613],{"class":254,"line":2730},[252,151614,2539],{"emptyLinePlaceholder":181},[252,151616,151617,151619,151621,151623,151626,151628,151630,151632,151634,151636,151638],{"class":254,"line":2738},[252,151618,149561],{"class":262},[252,151620,308],{"class":258},[252,151622,149965],{"class":262},[252,151624,151625],{"class":367},"\"001\"",[252,151627,12575],{"class":262},[252,151629,149968],{"class":367},[252,151631,12575],{"class":262},[252,151633,913],{"class":311},[252,151635,12575],{"class":262},[252,151637,1252],{"class":311},[252,151639,269],{"class":262},[252,151641,151642,151644],{"class":254,"line":2743},[252,151643,30555],{"class":311},[252,151645,151646],{"class":262},"(student.is_passed())\n",[252,151648,151649,151651],{"class":254,"line":2749},[252,151650,30555],{"class":311},[252,151652,151653],{"class":262},"(student.to_dict())\n",[19,151655,151656,132,151659,151662],{},[22,151657,151658],{},"to_dict()",[22,151660,151661],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151664,151666],{"id":151665},"_1116-易错点","11.16 易错点",[207,151668,151669,151675,151681,151686,151689,151692],{},[210,151670,151671,151672,28525],{},"类名推荐使用大驼峰，如 ",[22,151673,151674],{},"StudentManager",[210,151676,151677,151678,151680],{},"方法第一个参数必须写 ",[22,151679,30963],{},"，调用时不用传。",[210,151682,151683,151685],{},[22,151684,30969],{}," 不是普通方法，它在创建对象时自动执行。",[210,151687,151688],{},"私有属性不是绝对安全，只是约定和名称改写。",[210,151690,151691],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[210,151693,151694],{},"类中方法太多时，说明职责可能过重。",[14,151696,151698],{"id":151697},"_1117-本章练习","11.17 本章练习",[207,151700,151701,151707,151713,151718,151731],{},[210,151702,151703,151704,151706],{},"定义 ",[22,151705,149648],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[210,151708,151703,151709,151712],{},[22,151710,151711],{},"Account"," 类，实现存款、取款、查询余额。",[210,151714,151703,151715,151717],{},[22,151716,17366],{}," 类，计算圆的周长和面积。",[210,151719,151703,151720,475,151723,151726,151727,151730],{},[22,151721,151722],{},"Dog",[22,151724,151725],{},"Cat"," 类，并用同一个函数调用它们的 ",[22,151728,151729],{},"speak()"," 方法。",[210,151732,104502,151733,151735,151736,28525],{},[22,151734,151219],{}," 定义一个商品类 ",[22,151737,151738],{},"Product",[5266,151740,151741],{},"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":169,"searchDepth":170,"depth":170,"links":151743},[151744,151745,151746,151747,151748,151749,151751,151752,151753,151754,151755,151756,151757,151761,151762,151763,151764],{"id":149412,"depth":170,"text":149413},{"id":149595,"depth":170,"text":149596},{"id":149659,"depth":170,"text":149660},{"id":149736,"depth":170,"text":149737},{"id":149835,"depth":170,"text":149836},{"id":149999,"depth":170,"text":151750},"11.6 str",{"id":150125,"depth":170,"text":150126},{"id":150391,"depth":170,"text":150392},{"id":150505,"depth":170,"text":150506},{"id":150660,"depth":170,"text":150661},{"id":150784,"depth":170,"text":150785},{"id":150900,"depth":170,"text":150901},{"id":151049,"depth":170,"text":151050,"children":151758},[151759,151760],{"id":151053,"depth":1318,"text":151054},{"id":151135,"depth":1318,"text":151136},{"id":151213,"depth":170,"text":151214},{"id":151328,"depth":170,"text":151329},{"id":151665,"depth":170,"text":151666},{"id":151697,"depth":170,"text":151698},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149404,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151771,"title":151772,"body":151773,"description":178,"extension":179,"meta":155086,"navigation":181,"path":155087,"seo":155088,"stem":155089,"__hash__":155090},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151774,"toc":155062},[151775,151778,151782,151785,151788,151817,151820,151828,151832,151836,151839,151862,151865,151871,151875,153321,153324,153345,153349,153352,153364,153367,153551,153554,153680,153683,153687,153691,153827,153831,153917,153921,154003,154007,154044,154048,154237,154241,154244,154474,154478,154481,154662,154665,154669,154672,154678,154681,154707,154711,154714,154728,154731,154756,154759,154773,154776,154793,154796,154813,154816,154833,154837,154863,154867,154890,154894,154897,154899,154905,154907,154928,154931,154937,154943,154947,154950,155026,155029,155033,155059],[10,151776,151772],{"id":151777},"_12-综合案例与复习路线",[14,151779,151781],{"id":151780},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,151783,151784],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,151786,151787],{},"一个合格的入门综合项目最好覆盖：",[207,151789,151790,151793,151796,151799,151802,151805,151808,151811,151814],{},[210,151791,151792],{},"输入输出。",[210,151794,151795],{},"判断和循环。",[210,151797,151798],{},"函数拆分。",[210,151800,151801],{},"列表、字典等容器。",[210,151803,151804],{},"文件持久化。",[210,151806,151807],{},"异常处理。",[210,151809,151810],{},"模块拆分。",[210,151812,151813],{},"可选：面向对象。",[210,151815,151816],{},"可选：数据可视化。",[19,151818,151819],{},"本章整理两个方向：",[207,151821,151822,151825],{},[210,151823,151824],{},"学生管理系统。",[210,151826,151827],{},"销售数据统计和可视化。",[14,151829,151831],{"id":151830},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[224,151833,151835],{"id":151834},"_1221-需求","12.2.1 需求",[19,151837,151838],{},"实现一个命令行学生管理系统：",[207,151840,151841,151844,151847,151850,151853,151856,151859],{},[210,151842,151843],{},"添加学生。",[210,151845,151846],{},"删除学生。",[210,151848,151849],{},"修改学生。",[210,151851,151852],{},"查询学生。",[210,151854,151855],{},"显示所有学生。",[210,151857,151858],{},"保存到 JSON 文件。",[210,151860,151861],{},"程序启动时自动读取 JSON 文件。",[19,151863,151864],{},"学生字段：",[244,151866,151869],{"className":151867,"code":151868,"language":5327,"meta":169},[5325],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[22,151870,151868],{"__ignoreMap":169},[14,151872,151874],{"id":151873},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[244,151876,151878],{"className":30518,"code":151877,"language":30520,"meta":169,"style":169},"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",[22,151879,151880,151886,151896,151900,151914,151918,151922,151931,151943,151949,151953,151959,151990,152000,152007,152018,152024,152028,152032,152042,152073,152099,152103,152107,152116,152127,152138,152149,152160,152171,152182,152193,152197,152201,152211,152223,152239,152246,152253,152257,152261,152271,152279,152286,152299,152309,152320,152324,152328,152337,152345,152351,152363,152371,152382,152386,152390,152399,152415,152419,152426,152437,152442,152446,152462,152477,152492,152496,152501,152509,152517,152525,152533,152537,152542,152553,152557,152561,152570,152585,152595,152599,152611,152622,152626,152630,152635,152639,152650,152654,152658,152667,152682,152690,152694,152706,152716,152720,152724,152739,152752,152765,152769,152782,152794,152806,152810,152814,152825,152829,152833,152842,152857,152865,152869,152881,152891,152895,152899,152904,152908,152912,152922,152928,152950,152969,152988,153007,153012,153016,153020,153029,153037,153048,153052,153056,153082,153092,153097,153101,153105,153113,153123,153127,153135,153140,153156,153160,153174,153179,153193,153198,153211,153216,153229,153234,153247,153252,153265,153276,153280,153286,153297,153301,153305,153317],{"__ignoreMap":169},[252,151881,151882,151884],{"class":254,"line":255},[252,151883,30532],{"class":258},[252,151885,147171],{"class":262},[252,151887,151888,151890,151892,151894],{"class":254,"line":170},[252,151889,30877],{"class":258},[252,151891,108447],{"class":262},[252,151893,30532],{"class":258},[252,151895,108452],{"class":262},[252,151897,151898],{"class":254,"line":1318},[252,151899,2539],{"emptyLinePlaceholder":181},[252,151901,151902,151905,151907,151909,151912],{"class":254,"line":1333},[252,151903,151904],{"class":311},"DATA_FILE",[252,151906,13704],{"class":258},[252,151908,108681],{"class":262},[252,151910,151911],{"class":367},"\"students.json\"",[252,151913,269],{"class":262},[252,151915,151916],{"class":254,"line":1339},[252,151917,2539],{"emptyLinePlaceholder":181},[252,151919,151920],{"class":254,"line":1353},[252,151921,2539],{"emptyLinePlaceholder":181},[252,151923,151924,151926,151929],{"class":254,"line":1359},[252,151925,32087],{"class":258},[252,151927,151928],{"class":2102}," load_students",[252,151930,32093],{"class":262},[252,151932,151933,151935,151937,151940],{"class":254,"line":1450},[252,151934,3240],{"class":258},[252,151936,39070],{"class":258},[252,151938,151939],{"class":311}," DATA_FILE",[252,151941,151942],{"class":262},".exists():\n",[252,151944,151945,151947],{"class":254,"line":1456},[252,151946,14892],{"class":258},[252,151948,51978],{"class":262},[252,151950,151951],{"class":254,"line":1468},[252,151952,2539],{"emptyLinePlaceholder":181},[252,151954,151955,151957],{"class":254,"line":1751},[252,151956,125919],{"class":258},[252,151958,3878],{"class":262},[252,151960,151961,151964,151966,151968,151970,151972,151974,151976,151978,151980,151982,151984,151986,151988],{"class":254,"line":1756},[252,151962,151963],{"class":258},"        with",[252,151965,146871],{"class":311},[252,151967,263],{"class":262},[252,151969,151904],{"class":311},[252,151971,12575],{"class":262},[252,151973,146881],{"class":367},[252,151975,12575],{"class":262},[252,151977,146886],{"class":5356},[252,151979,308],{"class":258},[252,151981,146891],{"class":367},[252,151983,13854],{"class":262},[252,151985,31523],{"class":258},[252,151987,148233],{"class":5356},[252,151989,3878],{"class":262},[252,151991,151992,151994,151996,151998],{"class":254,"line":1762},[252,151993,15872],{"class":258},[252,151995,148244],{"class":262},[252,151997,45494],{"class":5356},[252,151999,269],{"class":262},[252,152001,152002,152004],{"class":254,"line":1767},[252,152003,125947],{"class":258},[252,152005,152006],{"class":262}," json.JSONDecodeError:\n",[252,152008,152009,152011,152013,152016],{"class":254,"line":1781},[252,152010,32591],{"class":311},[252,152012,263],{"class":262},[252,152014,152015],{"class":367},"\"数据文件格式错误，已使用空数据启动\"",[252,152017,269],{"class":262},[252,152019,152020,152022],{"class":254,"line":1786},[252,152021,14892],{"class":258},[252,152023,51978],{"class":262},[252,152025,152026],{"class":254,"line":1792},[252,152027,2539],{"emptyLinePlaceholder":181},[252,152029,152030],{"class":254,"line":1813},[252,152031,2539],{"emptyLinePlaceholder":181},[252,152033,152034,152036,152039],{"class":254,"line":1818},[252,152035,32087],{"class":258},[252,152037,152038],{"class":2102}," save_students",[252,152040,152041],{"class":262},"(students):\n",[252,152043,152044,152046,152048,152050,152052,152054,152057,152059,152061,152063,152065,152067,152069,152071],{"class":254,"line":1832},[252,152045,34318],{"class":258},[252,152047,146871],{"class":311},[252,152049,263],{"class":262},[252,152051,151904],{"class":311},[252,152053,12575],{"class":262},[252,152055,152056],{"class":367},"\"w\"",[252,152058,12575],{"class":262},[252,152060,146886],{"class":5356},[252,152062,308],{"class":258},[252,152064,146891],{"class":367},[252,152066,13854],{"class":262},[252,152068,31523],{"class":258},[252,152070,148233],{"class":5356},[252,152072,3878],{"class":262},[252,152074,152075,152078,152080,152082,152084,152086,152088,152090,152093,152095,152097],{"class":254,"line":1837},[252,152076,152077],{"class":262},"        json.dump(students, ",[252,152079,45494],{"class":5356},[252,152081,12575],{"class":262},[252,152083,147217],{"class":5356},[252,152085,308],{"class":258},[252,152087,34127],{"class":311},[252,152089,12575],{"class":262},[252,152091,152092],{"class":5356},"indent",[252,152094,308],{"class":258},[252,152096,340],{"class":311},[252,152098,269],{"class":262},[252,152100,152101],{"class":254,"line":1866},[252,152102,2539],{"emptyLinePlaceholder":181},[252,152104,152105],{"class":254,"line":1871},[252,152106,2539],{"emptyLinePlaceholder":181},[252,152108,152109,152111,152114],{"class":254,"line":1888},[252,152110,32087],{"class":258},[252,152112,152113],{"class":2102}," show_menu",[252,152115,32093],{"class":262},[252,152117,152118,152120,152122,152125],{"class":254,"line":1893},[252,152119,31439],{"class":311},[252,152121,263],{"class":262},[252,152123,152124],{"class":367},"\"====== 学生管理系统 ======\"",[252,152126,269],{"class":262},[252,152128,152129,152131,152133,152136],{"class":254,"line":1898},[252,152130,31439],{"class":311},[252,152132,263],{"class":262},[252,152134,152135],{"class":367},"\"1. 添加学生\"",[252,152137,269],{"class":262},[252,152139,152140,152142,152144,152147],{"class":254,"line":1903},[252,152141,31439],{"class":311},[252,152143,263],{"class":262},[252,152145,152146],{"class":367},"\"2. 删除学生\"",[252,152148,269],{"class":262},[252,152150,152151,152153,152155,152158],{"class":254,"line":1917},[252,152152,31439],{"class":311},[252,152154,263],{"class":262},[252,152156,152157],{"class":367},"\"3. 修改学生\"",[252,152159,269],{"class":262},[252,152161,152162,152164,152166,152169],{"class":254,"line":1922},[252,152163,31439],{"class":311},[252,152165,263],{"class":262},[252,152167,152168],{"class":367},"\"4. 查询学生\"",[252,152170,269],{"class":262},[252,152172,152173,152175,152177,152180],{"class":254,"line":2716},[252,152174,31439],{"class":311},[252,152176,263],{"class":262},[252,152178,152179],{"class":367},"\"5. 显示所有学生\"",[252,152181,269],{"class":262},[252,152183,152184,152186,152188,152191],{"class":254,"line":2730},[252,152185,31439],{"class":311},[252,152187,263],{"class":262},[252,152189,152190],{"class":367},"\"0. 退出系统\"",[252,152192,269],{"class":262},[252,152194,152195],{"class":254,"line":2738},[252,152196,2539],{"emptyLinePlaceholder":181},[252,152198,152199],{"class":254,"line":2743},[252,152200,2539],{"emptyLinePlaceholder":181},[252,152202,152203,152205,152208],{"class":254,"line":2749},[252,152204,32087],{"class":258},[252,152206,152207],{"class":2102}," find_student",[252,152209,152210],{"class":262},"(students, student_id):\n",[252,152212,152213,152215,152218,152220],{"class":254,"line":2755},[252,152214,3340],{"class":258},[252,152216,152217],{"class":262}," student ",[252,152219,26183],{"class":258},[252,152221,152222],{"class":262}," students:\n",[252,152224,152225,152227,152230,152232,152234,152236],{"class":254,"line":2760},[252,152226,2636],{"class":258},[252,152228,152229],{"class":262}," student[",[252,152231,151527],{"class":367},[252,152233,4582],{"class":262},[252,152235,3088],{"class":258},[252,152237,152238],{"class":262}," student_id:\n",[252,152240,152241,152243],{"class":254,"line":8088},[252,152242,15872],{"class":258},[252,152244,152245],{"class":262}," student\n",[252,152247,152248,152250],{"class":254,"line":8112},[252,152249,4229],{"class":258},[252,152251,152252],{"class":311}," None\n",[252,152254,152255],{"class":254,"line":8117},[252,152256,2539],{"emptyLinePlaceholder":181},[252,152258,152259],{"class":254,"line":8123},[252,152260,2539],{"emptyLinePlaceholder":181},[252,152262,152263,152265,152268],{"class":254,"line":8150},[252,152264,32087],{"class":258},[252,152266,152267],{"class":2102}," input_int",[252,152269,152270],{"class":262},"(prompt):\n",[252,152272,152273,152275,152277],{"class":254,"line":8155},[252,152274,2390],{"class":258},[252,152276,95430],{"class":311},[252,152278,3878],{"class":262},[252,152280,152281,152284],{"class":254,"line":8161},[252,152282,152283],{"class":258},"        try",[252,152285,3878],{"class":262},[252,152287,152288,152290,152292,152294,152296],{"class":254,"line":8173},[252,152289,15872],{"class":258},[252,152291,2521],{"class":311},[252,152293,263],{"class":262},[252,152295,53961],{"class":311},[252,152297,152298],{"class":262},"(prompt))\n",[252,152300,152301,152304,152307],{"class":254,"line":8185},[252,152302,152303],{"class":258},"        except",[252,152305,152306],{"class":311}," ValueError",[252,152308,3878],{"class":262},[252,152310,152311,152313,152315,152318],{"class":254,"line":8197},[252,152312,34790],{"class":311},[252,152314,263],{"class":262},[252,152316,152317],{"class":367},"\"请输入整数\"",[252,152319,269],{"class":262},[252,152321,152322],{"class":254,"line":9856},[252,152323,2539],{"emptyLinePlaceholder":181},[252,152325,152326],{"class":254,"line":9881},[252,152327,2539],{"emptyLinePlaceholder":181},[252,152329,152330,152332,152335],{"class":254,"line":9904},[252,152331,32087],{"class":258},[252,152333,152334],{"class":2102}," input_float",[252,152336,152270],{"class":262},[252,152338,152339,152341,152343],{"class":254,"line":9928},[252,152340,2390],{"class":258},[252,152342,95430],{"class":311},[252,152344,3878],{"class":262},[252,152346,152347,152349],{"class":254,"line":9933},[252,152348,152283],{"class":258},[252,152350,3878],{"class":262},[252,152352,152353,152355,152357,152359,152361],{"class":254,"line":9938},[252,152354,15872],{"class":258},[252,152356,109933],{"class":311},[252,152358,263],{"class":262},[252,152360,53961],{"class":311},[252,152362,152298],{"class":262},[252,152364,152365,152367,152369],{"class":254,"line":9943},[252,152366,152303],{"class":258},[252,152368,152306],{"class":311},[252,152370,3878],{"class":262},[252,152372,152373,152375,152377,152380],{"class":254,"line":9952},[252,152374,34790],{"class":311},[252,152376,263],{"class":262},[252,152378,152379],{"class":367},"\"请输入数字\"",[252,152381,269],{"class":262},[252,152383,152384],{"class":254,"line":9957},[252,152385,2539],{"emptyLinePlaceholder":181},[252,152387,152388],{"class":254,"line":9963},[252,152389,2539],{"emptyLinePlaceholder":181},[252,152391,152392,152394,152397],{"class":254,"line":9984},[252,152393,32087],{"class":258},[252,152395,152396],{"class":2102}," add_student",[252,152398,152041],{"class":262},[252,152400,152401,152404,152406,152408,152410,152413],{"class":254,"line":9990},[252,152402,152403],{"class":262},"    student_id ",[252,152405,308],{"class":258},[252,152407,60745],{"class":311},[252,152409,263],{"class":262},[252,152411,152412],{"class":367},"\"请输入学号:\"",[252,152414,269],{"class":262},[252,152416,152417],{"class":254,"line":10004},[252,152418,2539],{"emptyLinePlaceholder":181},[252,152420,152421,152423],{"class":254,"line":10010},[252,152422,3240],{"class":258},[252,152424,152425],{"class":262}," find_student(students, student_id):\n",[252,152427,152428,152430,152432,152435],{"class":254,"line":10037},[252,152429,32591],{"class":311},[252,152431,263],{"class":262},[252,152433,152434],{"class":367},"\"学号已存在\"",[252,152436,269],{"class":262},[252,152438,152439],{"class":254,"line":10046},[252,152440,152441],{"class":258},"        return\n",[252,152443,152444],{"class":254,"line":10052},[252,152445,2539],{"emptyLinePlaceholder":181},[252,152447,152448,152451,152453,152455,152457,152460],{"class":254,"line":10060},[252,152449,152450],{"class":262},"    name ",[252,152452,308],{"class":258},[252,152454,60745],{"class":311},[252,152456,263],{"class":262},[252,152458,152459],{"class":367},"\"请输入姓名:\"",[252,152461,269],{"class":262},[252,152463,152464,152467,152469,152472,152475],{"class":254,"line":10065},[252,152465,152466],{"class":262},"    age ",[252,152468,308],{"class":258},[252,152470,152471],{"class":262}," input_int(",[252,152473,152474],{"class":367},"\"请输入年龄:\"",[252,152476,269],{"class":262},[252,152478,152479,152482,152484,152487,152490],{"class":254,"line":16744},[252,152480,152481],{"class":262},"    score ",[252,152483,308],{"class":258},[252,152485,152486],{"class":262}," input_float(",[252,152488,152489],{"class":367},"\"请输入成绩:\"",[252,152491,269],{"class":262},[252,152493,152494],{"class":254,"line":16750},[252,152495,2539],{"emptyLinePlaceholder":181},[252,152497,152498],{"class":254,"line":16773},[252,152499,152500],{"class":262},"    students.append({\n",[252,152502,152503,152506],{"class":254,"line":16779},[252,152504,152505],{"class":367},"        \"student_id\"",[252,152507,152508],{"class":262},": student_id,\n",[252,152510,152511,152514],{"class":254,"line":16802},[252,152512,152513],{"class":367},"        \"name\"",[252,152515,152516],{"class":262},": name,\n",[252,152518,152519,152522],{"class":254,"line":16816},[252,152520,152521],{"class":367},"        \"age\"",[252,152523,152524],{"class":262},": age,\n",[252,152526,152527,152530],{"class":254,"line":16836},[252,152528,152529],{"class":367},"        \"score\"",[252,152531,152532],{"class":262},": score,\n",[252,152534,152535],{"class":254,"line":16842},[252,152536,33601],{"class":262},[252,152538,152539],{"class":254,"line":16853},[252,152540,152541],{"class":262},"    save_students(students)\n",[252,152543,152544,152546,152548,152551],{"class":254,"line":16876},[252,152545,31439],{"class":311},[252,152547,263],{"class":262},[252,152549,152550],{"class":367},"\"添加成功\"",[252,152552,269],{"class":262},[252,152554,152555],{"class":254,"line":16898},[252,152556,2539],{"emptyLinePlaceholder":181},[252,152558,152559],{"class":254,"line":16903},[252,152560,2539],{"emptyLinePlaceholder":181},[252,152562,152563,152565,152568],{"class":254,"line":16909},[252,152564,32087],{"class":258},[252,152566,152567],{"class":2102}," delete_student",[252,152569,152041],{"class":262},[252,152571,152572,152574,152576,152578,152580,152583],{"class":254,"line":16923},[252,152573,152403],{"class":262},[252,152575,308],{"class":258},[252,152577,60745],{"class":311},[252,152579,263],{"class":262},[252,152581,152582],{"class":367},"\"请输入要删除的学号:\"",[252,152584,269],{"class":262},[252,152586,152587,152590,152592],{"class":254,"line":16936},[252,152588,152589],{"class":262},"    student ",[252,152591,308],{"class":258},[252,152593,152594],{"class":262}," find_student(students, student_id)\n",[252,152596,152597],{"class":254,"line":16941},[252,152598,2539],{"emptyLinePlaceholder":181},[252,152600,152601,152603,152605,152607,152609],{"class":254,"line":16955},[252,152602,3240],{"class":258},[252,152604,152217],{"class":262},[252,152606,39067],{"class":258},[252,152608,39073],{"class":311},[252,152610,3878],{"class":262},[252,152612,152613,152615,152617,152620],{"class":254,"line":16960},[252,152614,32591],{"class":311},[252,152616,263],{"class":262},[252,152618,152619],{"class":367},"\"学生不存在\"",[252,152621,269],{"class":262},[252,152623,152624],{"class":254,"line":16966},[252,152625,152441],{"class":258},[252,152627,152628],{"class":254,"line":16971},[252,152629,2539],{"emptyLinePlaceholder":181},[252,152631,152632],{"class":254,"line":16985},[252,152633,152634],{"class":262},"    students.remove(student)\n",[252,152636,152637],{"class":254,"line":16990},[252,152638,152541],{"class":262},[252,152640,152641,152643,152645,152648],{"class":254,"line":16995},[252,152642,31439],{"class":311},[252,152644,263],{"class":262},[252,152646,152647],{"class":367},"\"删除成功\"",[252,152649,269],{"class":262},[252,152651,152652],{"class":254,"line":17009},[252,152653,2539],{"emptyLinePlaceholder":181},[252,152655,152656],{"class":254,"line":17021},[252,152657,2539],{"emptyLinePlaceholder":181},[252,152659,152660,152662,152665],{"class":254,"line":17026},[252,152661,32087],{"class":258},[252,152663,152664],{"class":2102}," update_student",[252,152666,152041],{"class":262},[252,152668,152669,152671,152673,152675,152677,152680],{"class":254,"line":17039},[252,152670,152403],{"class":262},[252,152672,308],{"class":258},[252,152674,60745],{"class":311},[252,152676,263],{"class":262},[252,152678,152679],{"class":367},"\"请输入要修改的学号:\"",[252,152681,269],{"class":262},[252,152683,152684,152686,152688],{"class":254,"line":17044},[252,152685,152589],{"class":262},[252,152687,308],{"class":258},[252,152689,152594],{"class":262},[252,152691,152692],{"class":254,"line":17049},[252,152693,2539],{"emptyLinePlaceholder":181},[252,152695,152696,152698,152700,152702,152704],{"class":254,"line":17054},[252,152697,3240],{"class":258},[252,152699,152217],{"class":262},[252,152701,39067],{"class":258},[252,152703,39073],{"class":311},[252,152705,3878],{"class":262},[252,152707,152708,152710,152712,152714],{"class":254,"line":17067},[252,152709,32591],{"class":311},[252,152711,263],{"class":262},[252,152713,152619],{"class":367},[252,152715,269],{"class":262},[252,152717,152718],{"class":254,"line":17072},[252,152719,152441],{"class":258},[252,152721,152722],{"class":254,"line":32773},[252,152723,2539],{"emptyLinePlaceholder":181},[252,152725,152726,152728,152730,152732,152734,152737],{"class":254,"line":32779},[252,152727,152450],{"class":262},[252,152729,308],{"class":258},[252,152731,60745],{"class":311},[252,152733,263],{"class":262},[252,152735,152736],{"class":367},"\"请输入新姓名:\"",[252,152738,269],{"class":262},[252,152740,152741,152743,152745,152747,152750],{"class":254,"line":32785},[252,152742,152466],{"class":262},[252,152744,308],{"class":258},[252,152746,152471],{"class":262},[252,152748,152749],{"class":367},"\"请输入新年龄:\"",[252,152751,269],{"class":262},[252,152753,152754,152756,152758,152760,152763],{"class":254,"line":32791},[252,152755,152481],{"class":262},[252,152757,308],{"class":258},[252,152759,152486],{"class":262},[252,152761,152762],{"class":367},"\"请输入新成绩:\"",[252,152764,269],{"class":262},[252,152766,152767],{"class":254,"line":32797},[252,152768,2539],{"emptyLinePlaceholder":181},[252,152770,152771,152774,152776,152778,152780],{"class":254,"line":32808},[252,152772,152773],{"class":262},"    student[",[252,152775,62819],{"class":367},[252,152777,4582],{"class":262},[252,152779,308],{"class":258},[252,152781,149875],{"class":262},[252,152783,152784,152786,152788,152790,152792],{"class":254,"line":32814},[252,152785,152773],{"class":262},[252,152787,69264],{"class":367},[252,152789,4582],{"class":262},[252,152791,308],{"class":258},[252,152793,149887],{"class":262},[252,152795,152796,152798,152800,152802,152804],{"class":254,"line":32834},[252,152797,152773],{"class":262},[252,152799,151552],{"class":367},[252,152801,4582],{"class":262},[252,152803,308],{"class":258},[252,152805,1718],{"class":262},[252,152807,152808],{"class":254,"line":32840},[252,152809,2539],{"emptyLinePlaceholder":181},[252,152811,152812],{"class":254,"line":32851},[252,152813,152541],{"class":262},[252,152815,152816,152818,152820,152823],{"class":254,"line":32857},[252,152817,31439],{"class":311},[252,152819,263],{"class":262},[252,152821,152822],{"class":367},"\"修改成功\"",[252,152824,269],{"class":262},[252,152826,152827],{"class":254,"line":32863},[252,152828,2539],{"emptyLinePlaceholder":181},[252,152830,152831],{"class":254,"line":32869},[252,152832,2539],{"emptyLinePlaceholder":181},[252,152834,152835,152837,152840],{"class":254,"line":32875},[252,152836,32087],{"class":258},[252,152838,152839],{"class":2102}," query_student",[252,152841,152041],{"class":262},[252,152843,152844,152846,152848,152850,152852,152855],{"class":254,"line":32881},[252,152845,152403],{"class":262},[252,152847,308],{"class":258},[252,152849,60745],{"class":311},[252,152851,263],{"class":262},[252,152853,152854],{"class":367},"\"请输入要查询的学号:\"",[252,152856,269],{"class":262},[252,152858,152859,152861,152863],{"class":254,"line":32887},[252,152860,152589],{"class":262},[252,152862,308],{"class":258},[252,152864,152594],{"class":262},[252,152866,152867],{"class":254,"line":32893},[252,152868,2539],{"emptyLinePlaceholder":181},[252,152870,152871,152873,152875,152877,152879],{"class":254,"line":32913},[252,152872,3240],{"class":258},[252,152874,152217],{"class":262},[252,152876,39067],{"class":258},[252,152878,39073],{"class":311},[252,152880,3878],{"class":262},[252,152882,152883,152885,152887,152889],{"class":254,"line":32919},[252,152884,32591],{"class":311},[252,152886,263],{"class":262},[252,152888,152619],{"class":367},[252,152890,269],{"class":262},[252,152892,152893],{"class":254,"line":32935},[252,152894,152441],{"class":258},[252,152896,152897],{"class":254,"line":32941},[252,152898,2539],{"emptyLinePlaceholder":181},[252,152900,152901],{"class":254,"line":32955},[252,152902,152903],{"class":262},"    print_student(student)\n",[252,152905,152906],{"class":254,"line":32961},[252,152907,2539],{"emptyLinePlaceholder":181},[252,152909,152910],{"class":254,"line":32976},[252,152911,2539],{"emptyLinePlaceholder":181},[252,152913,152914,152916,152919],{"class":254,"line":32982},[252,152915,32087],{"class":258},[252,152917,152918],{"class":2102}," print_student",[252,152920,152921],{"class":262},"(student):\n",[252,152923,152924,152926],{"class":254,"line":32991},[252,152925,31439],{"class":311},[252,152927,151519],{"class":262},[252,152929,152930,152933,152935,152937,152940,152943,152945,152948],{"class":254,"line":32997},[252,152931,152932],{"class":258},"        f",[252,152934,514],{"class":367},[252,152936,1159],{"class":311},[252,152938,152939],{"class":262},"student[",[252,152941,152942],{"class":367},"'student_id'",[252,152944,1203],{"class":262},[252,152946,152947],{"class":311},"}\\t",[252,152949,25273],{"class":367},[252,152951,152952,152954,152956,152958,152960,152963,152965,152967],{"class":254,"line":33006},[252,152953,152932],{"class":258},[252,152955,514],{"class":367},[252,152957,1159],{"class":311},[252,152959,152939],{"class":262},[252,152961,152962],{"class":367},"'name'",[252,152964,1203],{"class":262},[252,152966,152947],{"class":311},[252,152968,25273],{"class":367},[252,152970,152971,152973,152975,152977,152979,152982,152984,152986],{"class":254,"line":33012},[252,152972,152932],{"class":258},[252,152974,514],{"class":367},[252,152976,1159],{"class":311},[252,152978,152939],{"class":262},[252,152980,152981],{"class":367},"'age'",[252,152983,1203],{"class":262},[252,152985,152947],{"class":311},[252,152987,25273],{"class":367},[252,152989,152990,152992,152994,152996,152998,153001,153003,153005],{"class":254,"line":33018},[252,152991,152932],{"class":258},[252,152993,514],{"class":367},[252,152995,1159],{"class":311},[252,152997,152939],{"class":262},[252,152999,153000],{"class":367},"'score'",[252,153002,1203],{"class":262},[252,153004,1209],{"class":311},[252,153006,25273],{"class":367},[252,153008,153009],{"class":254,"line":33027},[252,153010,153011],{"class":262},"    )\n",[252,153013,153014],{"class":254,"line":33033},[252,153015,2539],{"emptyLinePlaceholder":181},[252,153017,153018],{"class":254,"line":33044},[252,153019,2539],{"emptyLinePlaceholder":181},[252,153021,153022,153024,153027],{"class":254,"line":33050},[252,153023,32087],{"class":258},[252,153025,153026],{"class":2102}," show_all_students",[252,153028,152041],{"class":262},[252,153030,153031,153033,153035],{"class":254,"line":33069},[252,153032,3240],{"class":258},[252,153034,39070],{"class":258},[252,153036,152222],{"class":262},[252,153038,153039,153041,153043,153046],{"class":254,"line":33075},[252,153040,32591],{"class":311},[252,153042,263],{"class":262},[252,153044,153045],{"class":367},"\"暂无学生\"",[252,153047,269],{"class":262},[252,153049,153050],{"class":254,"line":33086},[252,153051,152441],{"class":258},[252,153053,153054],{"class":254,"line":33092},[252,153055,2539],{"emptyLinePlaceholder":181},[252,153057,153058,153060,153062,153065,153067,153070,153072,153075,153077,153080],{"class":254,"line":33112},[252,153059,31439],{"class":311},[252,153061,263],{"class":262},[252,153063,153064],{"class":367},"\"学号",[252,153066,1369],{"class":311},[252,153068,153069],{"class":367},"姓名",[252,153071,1369],{"class":311},[252,153073,153074],{"class":367},"年龄",[252,153076,1369],{"class":311},[252,153078,153079],{"class":367},"成绩\"",[252,153081,269],{"class":262},[252,153083,153084,153086,153088,153090],{"class":254,"line":33128},[252,153085,3340],{"class":258},[252,153087,152217],{"class":262},[252,153089,26183],{"class":258},[252,153091,152222],{"class":262},[252,153093,153094],{"class":254,"line":33134},[252,153095,153096],{"class":262},"        print_student(student)\n",[252,153098,153099],{"class":254,"line":33148},[252,153100,2539],{"emptyLinePlaceholder":181},[252,153102,153103],{"class":254,"line":33154},[252,153104,2539],{"emptyLinePlaceholder":181},[252,153106,153107,153109,153111],{"class":254,"line":33160},[252,153108,32087],{"class":258},[252,153110,2112],{"class":2102},[252,153112,32093],{"class":262},[252,153114,153115,153118,153120],{"class":254,"line":33171},[252,153116,153117],{"class":262},"    students ",[252,153119,308],{"class":258},[252,153121,153122],{"class":262}," load_students()\n",[252,153124,153125],{"class":254,"line":33177},[252,153126,2539],{"emptyLinePlaceholder":181},[252,153128,153129,153131,153133],{"class":254,"line":33183},[252,153130,2390],{"class":258},[252,153132,95430],{"class":311},[252,153134,3878],{"class":262},[252,153136,153137],{"class":254,"line":33193},[252,153138,153139],{"class":262},"        show_menu()\n",[252,153141,153142,153145,153147,153149,153151,153154],{"class":254,"line":33199},[252,153143,153144],{"class":262},"        choice ",[252,153146,308],{"class":258},[252,153148,60745],{"class":311},[252,153150,263],{"class":262},[252,153152,153153],{"class":367},"\"请输入操作:\"",[252,153155,269],{"class":262},[252,153157,153158],{"class":254,"line":33210},[252,153159,2539],{"emptyLinePlaceholder":181},[252,153161,153162,153164,153167,153169,153172],{"class":254,"line":33216},[252,153163,2636],{"class":258},[252,153165,153166],{"class":262}," choice ",[252,153168,3088],{"class":258},[252,153170,153171],{"class":367}," \"1\"",[252,153173,3878],{"class":262},[252,153175,153176],{"class":254,"line":33226},[252,153177,153178],{"class":262},"            add_student(students)\n",[252,153180,153181,153184,153186,153188,153191],{"class":254,"line":33231},[252,153182,153183],{"class":258},"        elif",[252,153185,153166],{"class":262},[252,153187,3088],{"class":258},[252,153189,153190],{"class":367}," \"2\"",[252,153192,3878],{"class":262},[252,153194,153195],{"class":254,"line":33237},[252,153196,153197],{"class":262},"            delete_student(students)\n",[252,153199,153200,153202,153204,153206,153209],{"class":254,"line":33286},[252,153201,153183],{"class":258},[252,153203,153166],{"class":262},[252,153205,3088],{"class":258},[252,153207,153208],{"class":367}," \"3\"",[252,153210,3878],{"class":262},[252,153212,153213],{"class":254,"line":33333},[252,153214,153215],{"class":262},"            update_student(students)\n",[252,153217,153218,153220,153222,153224,153227],{"class":254,"line":33338},[252,153219,153183],{"class":258},[252,153221,153166],{"class":262},[252,153223,3088],{"class":258},[252,153225,153226],{"class":367}," \"4\"",[252,153228,3878],{"class":262},[252,153230,153231],{"class":254,"line":33344},[252,153232,153233],{"class":262},"            query_student(students)\n",[252,153235,153236,153238,153240,153242,153245],{"class":254,"line":33363},[252,153237,153183],{"class":258},[252,153239,153166],{"class":262},[252,153241,3088],{"class":258},[252,153243,153244],{"class":367}," \"5\"",[252,153246,3878],{"class":262},[252,153248,153249],{"class":254,"line":33369},[252,153250,153251],{"class":262},"            show_all_students(students)\n",[252,153253,153254,153256,153258,153260,153263],{"class":254,"line":33389},[252,153255,153183],{"class":258},[252,153257,153166],{"class":262},[252,153259,3088],{"class":258},[252,153261,153262],{"class":367}," \"0\"",[252,153264,3878],{"class":262},[252,153266,153267,153269,153271,153274],{"class":254,"line":33395},[252,153268,34790],{"class":311},[252,153270,263],{"class":262},[252,153272,153273],{"class":367},"\"退出系统\"",[252,153275,269],{"class":262},[252,153277,153278],{"class":254,"line":33401},[252,153279,115234],{"class":258},[252,153281,153282,153284],{"class":254,"line":33411},[252,153283,2673],{"class":258},[252,153285,3878],{"class":262},[252,153287,153288,153290,153292,153295],{"class":254,"line":33416},[252,153289,34790],{"class":311},[252,153291,263],{"class":262},[252,153293,153294],{"class":367},"\"输入错误\"",[252,153296,269],{"class":262},[252,153298,153299],{"class":254,"line":33422},[252,153300,2539],{"emptyLinePlaceholder":181},[252,153302,153303],{"class":254,"line":33438},[252,153304,2539],{"emptyLinePlaceholder":181},[252,153306,153307,153309,153311,153313,153315],{"class":254,"line":33483},[252,153308,1670],{"class":258},[252,153310,31360],{"class":311},[252,153312,101696],{"class":258},[252,153314,101699],{"class":367},[252,153316,3878],{"class":262},[252,153318,153319],{"class":254,"line":33489},[252,153320,101706],{"class":262},[19,153322,153323],{},"这个项目串联了：",[207,153325,153326,153329,153332,153335,153338,153340],{},[210,153327,153328],{},"菜单循环。",[210,153330,153331],{},"函数封装。",[210,153333,153334],{},"列表字典。",[210,153336,153337],{},"JSON 读写。",[210,153339,151807],{},[210,153341,153342,28525],{},[22,153343,153344],{},"if __name__ == \"__main__\"",[14,153346,153348],{"id":153347},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153350,153351],{},"可以进一步拆成两个类：",[207,153353,153354,153359],{},[210,153355,153356,153358],{},[22,153357,149648],{},"：表示单个学生。",[210,153360,153361,153363],{},[22,153362,151674],{},"：负责学生增删改查和文件保存。",[19,153365,153366],{},"示意代码：",[244,153368,153370],{"className":30518,"code":153369,"language":30520,"meta":169,"style":169},"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",[22,153371,153372,153382,153386,153390,153394,153402,153409,153415,153421,153427,153431,153439,153445,153455,153465,153475,153485,153489,153493,153499,153507,153515,153523,153531,153539,153547],{"__ignoreMap":169},[252,153373,153374,153376,153378,153380],{"class":254,"line":255},[252,153375,30877],{"class":258},[252,153377,151232],{"class":262},[252,153379,30532],{"class":258},[252,153381,151237],{"class":262},[252,153383,153384],{"class":254,"line":170},[252,153385,2539],{"emptyLinePlaceholder":181},[252,153387,153388],{"class":254,"line":1318},[252,153389,2539],{"emptyLinePlaceholder":181},[252,153391,153392],{"class":254,"line":1333},[252,153393,151250],{"class":2102},[252,153395,153396,153398,153400],{"class":254,"line":1339},[252,153397,14834],{"class":258},[252,153399,8038],{"class":2102},[252,153401,3878],{"class":262},[252,153403,153404,153407],{"class":254,"line":1353},[252,153405,153406],{"class":262},"    student_id: ",[252,153408,151266],{"class":311},[252,153410,153411,153413],{"class":254,"line":1359},[252,153412,151263],{"class":262},[252,153414,151266],{"class":311},[252,153416,153417,153419],{"class":254,"line":1450},[252,153418,151271],{"class":262},[252,153420,151274],{"class":311},[252,153422,153423,153425],{"class":254,"line":1456},[252,153424,151279],{"class":262},[252,153426,151282],{"class":311},[252,153428,153429],{"class":254,"line":1468},[252,153430,2539],{"emptyLinePlaceholder":181},[252,153432,153433,153435,153437],{"class":254,"line":1751},[252,153434,30941],{"class":258},[252,153436,151430],{"class":2102},[252,153438,30947],{"class":262},[252,153440,153441,153443],{"class":254,"line":1756},[252,153442,14892],{"class":258},[252,153444,15712],{"class":262},[252,153446,153447,153449,153451,153453],{"class":254,"line":1762},[252,153448,151443],{"class":367},[252,153450,51577],{"class":262},[252,153452,30963],{"class":311},[252,153454,151450],{"class":262},[252,153456,153457,153459,153461,153463],{"class":254,"line":1767},[252,153458,151455],{"class":367},[252,153460,51577],{"class":262},[252,153462,30963],{"class":311},[252,153464,151462],{"class":262},[252,153466,153467,153469,153471,153473],{"class":254,"line":1781},[252,153468,151467],{"class":367},[252,153470,51577],{"class":262},[252,153472,30963],{"class":311},[252,153474,151474],{"class":262},[252,153476,153477,153479,153481,153483],{"class":254,"line":1786},[252,153478,151479],{"class":367},[252,153480,51577],{"class":262},[252,153482,30963],{"class":311},[252,153484,151486],{"class":262},[252,153486,153487],{"class":254,"line":1792},[252,153488,2668],{"class":262},[252,153490,153491],{"class":254,"line":1813},[252,153492,2539],{"emptyLinePlaceholder":181},[252,153494,153495,153497],{"class":254,"line":1818},[252,153496,151094],{"class":2102},[252,153498,151097],{"class":311},[252,153500,153501,153503,153505],{"class":254,"line":1832},[252,153502,30941],{"class":258},[252,153504,151507],{"class":2102},[252,153506,151510],{"class":262},[252,153508,153509,153511,153513],{"class":254,"line":1837},[252,153510,14892],{"class":258},[252,153512,151114],{"class":311},[252,153514,151519],{"class":262},[252,153516,153517,153519,153521],{"class":254,"line":1866},[252,153518,151524],{"class":262},[252,153520,151527],{"class":367},[252,153522,87974],{"class":262},[252,153524,153525,153527,153529],{"class":254,"line":1871},[252,153526,151524],{"class":262},[252,153528,62819],{"class":367},[252,153530,87974],{"class":262},[252,153532,153533,153535,153537],{"class":254,"line":1888},[252,153534,151524],{"class":262},[252,153536,69264],{"class":367},[252,153538,87974],{"class":262},[252,153540,153541,153543,153545],{"class":254,"line":1893},[252,153542,151524],{"class":262},[252,153544,151552],{"class":367},[252,153546,87974],{"class":262},[252,153548,153549],{"class":254,"line":1898},[252,153550,38266],{"class":262},[19,153552,153553],{},"管理器示意：",[244,153555,153557],{"className":30518,"code":153556,"language":30520,"meta":169,"style":169},"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",[22,153558,153559,153568,153576,153587,153591,153601,153614,153625,153632,153638,153642,153651,153660,153666,153673],{"__ignoreMap":169},[252,153560,153561,153563,153566],{"class":254,"line":255},[252,153562,14834],{"class":258},[252,153564,153565],{"class":2102}," StudentManager",[252,153567,3878],{"class":262},[252,153569,153570,153572,153574],{"class":254,"line":170},[252,153571,30941],{"class":258},[252,153573,30944],{"class":311},[252,153575,30947],{"class":262},[252,153577,153578,153580,153583,153585],{"class":254,"line":1318},[252,153579,30985],{"class":311},[252,153581,153582],{"class":262},".students ",[252,153584,308],{"class":258},[252,153586,51978],{"class":262},[252,153588,153589],{"class":254,"line":1333},[252,153590,2539],{"emptyLinePlaceholder":181},[252,153592,153593,153595,153598],{"class":254,"line":1339},[252,153594,30941],{"class":258},[252,153596,153597],{"class":2102}," find_by_id",[252,153599,153600],{"class":262},"(self, student_id):\n",[252,153602,153603,153605,153607,153609,153611],{"class":254,"line":1353},[252,153604,3542],{"class":258},[252,153606,152217],{"class":262},[252,153608,26183],{"class":258},[252,153610,39013],{"class":311},[252,153612,153613],{"class":262},".students:\n",[252,153615,153616,153618,153621,153623],{"class":254,"line":1359},[252,153617,4781],{"class":258},[252,153619,153620],{"class":262}," student.student_id ",[252,153622,3088],{"class":258},[252,153624,152238],{"class":262},[252,153626,153627,153630],{"class":254,"line":1450},[252,153628,153629],{"class":258},"                return",[252,153631,152245],{"class":262},[252,153633,153634,153636],{"class":254,"line":1456},[252,153635,14892],{"class":258},[252,153637,152252],{"class":311},[252,153639,153640],{"class":254,"line":1468},[252,153641,2539],{"emptyLinePlaceholder":181},[252,153643,153644,153646,153648],{"class":254,"line":1751},[252,153645,30941],{"class":258},[252,153647,5349],{"class":2102},[252,153649,153650],{"class":262},"(self, student):\n",[252,153652,153653,153655,153657],{"class":254,"line":1756},[252,153654,2636],{"class":258},[252,153656,39013],{"class":311},[252,153658,153659],{"class":262},".find_by_id(student.student_id):\n",[252,153661,153662,153664],{"class":254,"line":1762},[252,153663,15872],{"class":258},[252,153665,125942],{"class":311},[252,153667,153668,153670],{"class":254,"line":1767},[252,153669,30985],{"class":311},[252,153671,153672],{"class":262},".students.append(student)\n",[252,153674,153675,153677],{"class":254,"line":1781},[252,153676,14892],{"class":258},[252,153678,153679],{"class":311}," True\n",[19,153681,153682],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153684,153686],{"id":153685},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[224,153688,153690],{"id":153689},"_1251-数据结构","12.5.1 数据结构",[244,153692,153694],{"className":30518,"code":153693,"language":30520,"meta":169,"style":169},"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",[22,153695,153696,153704,153735,153765,153794,153823],{"__ignoreMap":169},[252,153697,153698,153700,153702],{"class":254,"line":255},[252,153699,148545],{"class":262},[252,153701,308],{"class":258},[252,153703,55587],{"class":262},[252,153705,153706,153708,153710,153712,153714,153716,153719,153721,153724,153726,153728,153730,153733],{"class":254,"line":170},[252,153707,148465],{"class":262},[252,153709,148077],{"class":367},[252,153711,51577],{"class":262},[252,153713,148688],{"class":367},[252,153715,12575],{"class":262},[252,153717,153718],{"class":367},"\"category\"",[252,153720,51577],{"class":262},[252,153722,153723],{"class":367},"\"手机\"",[252,153725,12575],{"class":262},[252,153727,84222],{"class":367},[252,153729,51577],{"class":262},[252,153731,153732],{"class":311},"12000",[252,153734,5069],{"class":262},[252,153736,153737,153739,153741,153743,153745,153747,153749,153751,153754,153756,153758,153760,153763],{"class":254,"line":1318},[252,153738,148465],{"class":262},[252,153740,148077],{"class":367},[252,153742,51577],{"class":262},[252,153744,148688],{"class":367},[252,153746,12575],{"class":262},[252,153748,153718],{"class":367},[252,153750,51577],{"class":262},[252,153752,153753],{"class":367},"\"电脑\"",[252,153755,12575],{"class":262},[252,153757,84222],{"class":367},[252,153759,51577],{"class":262},[252,153761,153762],{"class":311},"18000",[252,153764,5069],{"class":262},[252,153766,153767,153769,153771,153773,153775,153777,153779,153781,153783,153785,153787,153789,153792],{"class":254,"line":1333},[252,153768,148465],{"class":262},[252,153770,148077],{"class":367},[252,153772,51577],{"class":262},[252,153774,148709],{"class":367},[252,153776,12575],{"class":262},[252,153778,153718],{"class":367},[252,153780,51577],{"class":262},[252,153782,153723],{"class":367},[252,153784,12575],{"class":262},[252,153786,84222],{"class":367},[252,153788,51577],{"class":262},[252,153790,153791],{"class":311},"15000",[252,153793,5069],{"class":262},[252,153795,153796,153798,153800,153802,153804,153806,153808,153810,153812,153814,153816,153818,153821],{"class":254,"line":1339},[252,153797,148465],{"class":262},[252,153799,148077],{"class":367},[252,153801,51577],{"class":262},[252,153803,148709],{"class":367},[252,153805,12575],{"class":262},[252,153807,153718],{"class":367},[252,153809,51577],{"class":262},[252,153811,153753],{"class":367},[252,153813,12575],{"class":262},[252,153815,84222],{"class":367},[252,153817,51577],{"class":262},[252,153819,153820],{"class":311},"16000",[252,153822,5069],{"class":262},[252,153824,153825],{"class":254,"line":1353},[252,153826,33386],{"class":262},[224,153828,153830],{"id":153829},"_1252-按日期统计","12.5.2 按日期统计",[244,153832,153834],{"className":30518,"code":153833,"language":30520,"meta":169,"style":169},"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",[22,153835,153836,153845,153849,153860,153874,153887,153906,153910],{"__ignoreMap":169},[252,153837,153838,153841,153843],{"class":254,"line":255},[252,153839,153840],{"class":262},"daily_total ",[252,153842,308],{"class":258},[252,153844,88006],{"class":262},[252,153846,153847],{"class":254,"line":170},[252,153848,2539],{"emptyLinePlaceholder":181},[252,153850,153851,153853,153855,153857],{"class":254,"line":1318},[252,153852,3164],{"class":258},[252,153854,148289],{"class":262},[252,153856,26183],{"class":258},[252,153858,153859],{"class":262}," sales:\n",[252,153861,153862,153865,153867,153870,153872],{"class":254,"line":1333},[252,153863,153864],{"class":262},"    date ",[252,153866,308],{"class":258},[252,153868,153869],{"class":262}," item[",[252,153871,148077],{"class":367},[252,153873,33386],{"class":262},[252,153875,153876,153879,153881,153883,153885],{"class":254,"line":1339},[252,153877,153878],{"class":262},"    amount ",[252,153880,308],{"class":258},[252,153882,153869],{"class":262},[252,153884,84222],{"class":367},[252,153886,33386],{"class":262},[252,153888,153889,153892,153894,153897,153899,153901,153903],{"class":254,"line":1353},[252,153890,153891],{"class":262},"    daily_total[date] ",[252,153893,308],{"class":258},[252,153895,153896],{"class":262}," daily_total.get(date, ",[252,153898,454],{"class":311},[252,153900,13854],{"class":262},[252,153902,744],{"class":258},[252,153904,153905],{"class":262}," amount\n",[252,153907,153908],{"class":254,"line":1359},[252,153909,2539],{"emptyLinePlaceholder":181},[252,153911,153912,153914],{"class":254,"line":1450},[252,153913,30555],{"class":311},[252,153915,153916],{"class":262},"(daily_total)\n",[224,153918,153920],{"id":153919},"_1253-按类别统计","12.5.3 按类别统计",[244,153922,153924],{"className":30518,"code":153923,"language":30520,"meta":169,"style":169},"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",[22,153925,153926,153935,153939,153949,153962,153974,153992,153996],{"__ignoreMap":169},[252,153927,153928,153931,153933],{"class":254,"line":255},[252,153929,153930],{"class":262},"category_total ",[252,153932,308],{"class":258},[252,153934,88006],{"class":262},[252,153936,153937],{"class":254,"line":170},[252,153938,2539],{"emptyLinePlaceholder":181},[252,153940,153941,153943,153945,153947],{"class":254,"line":1318},[252,153942,3164],{"class":258},[252,153944,148289],{"class":262},[252,153946,26183],{"class":258},[252,153948,153859],{"class":262},[252,153950,153951,153954,153956,153958,153960],{"class":254,"line":1333},[252,153952,153953],{"class":262},"    category ",[252,153955,308],{"class":258},[252,153957,153869],{"class":262},[252,153959,153718],{"class":367},[252,153961,33386],{"class":262},[252,153963,153964,153966,153968,153970,153972],{"class":254,"line":1339},[252,153965,153878],{"class":262},[252,153967,308],{"class":258},[252,153969,153869],{"class":262},[252,153971,84222],{"class":367},[252,153973,33386],{"class":262},[252,153975,153976,153979,153981,153984,153986,153988,153990],{"class":254,"line":1353},[252,153977,153978],{"class":262},"    category_total[category] ",[252,153980,308],{"class":258},[252,153982,153983],{"class":262}," category_total.get(category, ",[252,153985,454],{"class":311},[252,153987,13854],{"class":262},[252,153989,744],{"class":258},[252,153991,153905],{"class":262},[252,153993,153994],{"class":254,"line":1359},[252,153995,2539],{"emptyLinePlaceholder":181},[252,153997,153998,154000],{"class":254,"line":1450},[252,153999,30555],{"class":311},[252,154001,154002],{"class":262},"(category_total)\n",[224,154004,154006],{"id":154005},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[244,154008,154010],{"className":30518,"code":154009,"language":30520,"meta":169,"style":169},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[22,154011,154012,154037],{"__ignoreMap":169},[252,154013,154014,154017,154019,154021,154024,154027,154030,154033,154035],{"class":254,"line":255},[252,154015,154016],{"class":262},"top_date, top_amount ",[252,154018,308],{"class":258},[252,154020,6091],{"class":311},[252,154022,154023],{"class":262},"(daily_total.items(), ",[252,154025,154026],{"class":5356},"key",[252,154028,154029],{"class":258},"=lambda",[252,154031,154032],{"class":262}," item: item[",[252,154034,480],{"class":311},[252,154036,4796],{"class":262},[252,154038,154039,154041],{"class":254,"line":170},[252,154040,30555],{"class":311},[252,154042,154043],{"class":262},"(top_date, top_amount)\n",[14,154045,154047],{"id":154046},"_126-绘制柱状图","12.6 绘制柱状图",[244,154049,154051],{"className":30518,"code":154050,"language":30520,"meta":169,"style":169},"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",[22,154052,154053,154067,154078,154082,154090,154102,154114,154125,154129,154133,154143,154154,154168,154173,154190,154207,154223,154227],{"__ignoreMap":169},[252,154054,154055,154057,154059,154061,154063,154065],{"class":254,"line":255},[252,154056,30877],{"class":258},[252,154058,147459],{"class":262},[252,154060,30532],{"class":258},[252,154062,147464],{"class":262},[252,154064,31523],{"class":258},[252,154066,147469],{"class":262},[252,154068,154069,154071,154073,154075],{"class":254,"line":170},[252,154070,30877],{"class":258},[252,154072,147318],{"class":262},[252,154074,30532],{"class":258},[252,154076,154077],{"class":262}," Bar\n",[252,154079,154080],{"class":254,"line":1318},[252,154081,2539],{"emptyLinePlaceholder":181},[252,154083,154084,154086,154088],{"class":254,"line":1333},[252,154085,153930],{"class":262},[252,154087,308],{"class":258},[252,154089,15712],{"class":262},[252,154091,154092,154095,154097,154100],{"class":254,"line":1339},[252,154093,154094],{"class":367},"    \"手机\"",[252,154096,51577],{"class":262},[252,154098,154099],{"class":311},"27000",[252,154101,31606],{"class":262},[252,154103,154104,154107,154109,154112],{"class":254,"line":1353},[252,154105,154106],{"class":367},"    \"电脑\"",[252,154108,51577],{"class":262},[252,154110,154111],{"class":311},"34000",[252,154113,31606],{"class":262},[252,154115,154116,154119,154121,154123],{"class":254,"line":1359},[252,154117,154118],{"class":367},"    \"耳机\"",[252,154120,51577],{"class":262},[252,154122,124534],{"class":311},[252,154124,31606],{"class":262},[252,154126,154127],{"class":254,"line":1450},[252,154128,1704],{"class":262},[252,154130,154131],{"class":254,"line":1456},[252,154132,2539],{"emptyLinePlaceholder":181},[252,154134,154135,154138,154140],{"class":254,"line":1468},[252,154136,154137],{"class":262},"bar ",[252,154139,308],{"class":258},[252,154141,154142],{"class":262}," Bar()\n",[252,154144,154145,154148,154151],{"class":254,"line":1751},[252,154146,154147],{"class":262},"bar.add_xaxis(",[252,154149,154150],{"class":311},"list",[252,154152,154153],{"class":262},"(category_total.keys()))\n",[252,154155,154156,154159,154161,154163,154165],{"class":254,"line":1756},[252,154157,154158],{"class":262},"bar.add_yaxis(",[252,154160,147375],{"class":367},[252,154162,12575],{"class":262},[252,154164,154150],{"class":311},[252,154166,154167],{"class":262},"(category_total.values()))\n",[252,154169,154170],{"class":254,"line":1762},[252,154171,154172],{"class":262},"bar.set_global_opts(\n",[252,154174,154175,154177,154179,154181,154183,154185,154188],{"class":254,"line":1767},[252,154176,147553],{"class":5356},[252,154178,308],{"class":258},[252,154180,147558],{"class":262},[252,154182,51547],{"class":5356},[252,154184,308],{"class":258},[252,154186,154187],{"class":367},"\"品类销售额\"",[252,154189,38187],{"class":262},[252,154191,154192,154194,154196,154198,154200,154202,154205],{"class":254,"line":1781},[252,154193,147572],{"class":5356},[252,154195,308],{"class":258},[252,154197,147577],{"class":262},[252,154199,79949],{"class":5356},[252,154201,308],{"class":258},[252,154203,154204],{"class":367},"\"品类\"",[252,154206,38187],{"class":262},[252,154208,154209,154211,154213,154215,154217,154219,154221],{"class":254,"line":1786},[252,154210,147591],{"class":5356},[252,154212,308],{"class":258},[252,154214,147577],{"class":262},[252,154216,79949],{"class":5356},[252,154218,308],{"class":258},[252,154220,147375],{"class":367},[252,154222,38187],{"class":262},[252,154224,154225],{"class":254,"line":1792},[252,154226,269],{"class":262},[252,154228,154229,154232,154235],{"class":254,"line":1813},[252,154230,154231],{"class":262},"bar.render(",[252,154233,154234],{"class":367},"\"category_sales.html\"",[252,154236,269],{"class":262},[14,154238,154240],{"id":154239},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154242,154243],{},"时间线适合展示不同日期、月份、年份的数据变化。",[244,154245,154247],{"className":30518,"code":154246,"language":30520,"meta":169,"style":169},"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",[22,154248,154249,154263,154274,154278,154286,154310,154333,154358,154362,154366,154376,154380,154391,154400,154410,154424,154455,154460,154464],{"__ignoreMap":169},[252,154250,154251,154253,154255,154257,154259,154261],{"class":254,"line":255},[252,154252,30877],{"class":258},[252,154254,147459],{"class":262},[252,154256,30532],{"class":258},[252,154258,147464],{"class":262},[252,154260,31523],{"class":258},[252,154262,147469],{"class":262},[252,154264,154265,154267,154269,154271],{"class":254,"line":170},[252,154266,30877],{"class":258},[252,154268,147318],{"class":262},[252,154270,30532],{"class":258},[252,154272,154273],{"class":262}," Bar, Timeline\n",[252,154275,154276],{"class":254,"line":1318},[252,154277,2539],{"emptyLinePlaceholder":181},[252,154279,154280,154282,154284],{"class":254,"line":1333},[252,154281,101795],{"class":262},[252,154283,308],{"class":258},[252,154285,15712],{"class":262},[252,154287,154288,154291,154294,154296,154298,154300,154302,154304,154306,154308],{"class":254,"line":1339},[252,154289,154290],{"class":367},"    \"2024-10-01\"",[252,154292,154293],{"class":262},": {",[252,154295,153723],{"class":367},[252,154297,51577],{"class":262},[252,154299,153732],{"class":311},[252,154301,12575],{"class":262},[252,154303,153753],{"class":367},[252,154305,51577],{"class":262},[252,154307,153762],{"class":311},[252,154309,5069],{"class":262},[252,154311,154312,154315,154317,154319,154321,154323,154325,154327,154329,154331],{"class":254,"line":1353},[252,154313,154314],{"class":367},"    \"2024-10-02\"",[252,154316,154293],{"class":262},[252,154318,153723],{"class":367},[252,154320,51577],{"class":262},[252,154322,153791],{"class":311},[252,154324,12575],{"class":262},[252,154326,153753],{"class":367},[252,154328,51577],{"class":262},[252,154330,153820],{"class":311},[252,154332,5069],{"class":262},[252,154334,154335,154338,154340,154342,154344,154347,154349,154351,154353,154356],{"class":254,"line":1359},[252,154336,154337],{"class":367},"    \"2024-10-03\"",[252,154339,154293],{"class":262},[252,154341,153723],{"class":367},[252,154343,51577],{"class":262},[252,154345,154346],{"class":311},"17000",[252,154348,12575],{"class":262},[252,154350,153753],{"class":367},[252,154352,51577],{"class":262},[252,154354,154355],{"class":311},"19000",[252,154357,5069],{"class":262},[252,154359,154360],{"class":254,"line":1450},[252,154361,1704],{"class":262},[252,154363,154364],{"class":254,"line":1456},[252,154365,2539],{"emptyLinePlaceholder":181},[252,154367,154368,154371,154373],{"class":254,"line":1468},[252,154369,154370],{"class":262},"timeline ",[252,154372,308],{"class":258},[252,154374,154375],{"class":262}," Timeline()\n",[252,154377,154378],{"class":254,"line":1751},[252,154379,2539],{"emptyLinePlaceholder":181},[252,154381,154382,154384,154387,154389],{"class":254,"line":1756},[252,154383,3164],{"class":258},[252,154385,154386],{"class":262}," date, category_data ",[252,154388,26183],{"class":258},[252,154390,149228],{"class":262},[252,154392,154393,154396,154398],{"class":254,"line":1762},[252,154394,154395],{"class":262},"    bar ",[252,154397,308],{"class":258},[252,154399,154142],{"class":262},[252,154401,154402,154405,154407],{"class":254,"line":1767},[252,154403,154404],{"class":262},"    bar.add_xaxis(",[252,154406,154150],{"class":311},[252,154408,154409],{"class":262},"(category_data.keys()))\n",[252,154411,154412,154415,154417,154419,154421],{"class":254,"line":1781},[252,154413,154414],{"class":262},"    bar.add_yaxis(",[252,154416,147375],{"class":367},[252,154418,12575],{"class":262},[252,154420,154150],{"class":311},[252,154422,154423],{"class":262},"(category_data.values()))\n",[252,154425,154426,154429,154432,154434,154436,154438,154440,154442,154444,154446,154448,154450,154453],{"class":254,"line":1786},[252,154427,154428],{"class":262},"    bar.set_global_opts(",[252,154430,154431],{"class":5356},"title_opts",[252,154433,308],{"class":258},[252,154435,147558],{"class":262},[252,154437,51547],{"class":5356},[252,154439,308],{"class":258},[252,154441,315],{"class":258},[252,154443,514],{"class":367},[252,154445,1159],{"class":311},[252,154447,74066],{"class":262},[252,154449,1209],{"class":311},[252,154451,154452],{"class":367},"销售额\"",[252,154454,30637],{"class":262},[252,154456,154457],{"class":254,"line":1792},[252,154458,154459],{"class":262},"    timeline.add(bar, date)\n",[252,154461,154462],{"class":254,"line":1813},[252,154463,2539],{"emptyLinePlaceholder":181},[252,154465,154466,154469,154472],{"class":254,"line":1818},[252,154467,154468],{"class":262},"timeline.render(",[252,154470,154471],{"class":367},"\"timeline_sales.html\"",[252,154473,269],{"class":262},[14,154475,154477],{"id":154476},"_128-绘制地图","12.8 绘制地图",[19,154479,154480],{},"地图适合展示地区数据。",[244,154482,154484],{"className":30518,"code":154483,"language":30520,"meta":169,"style":169},"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",[22,154485,154486,154500,154511,154515,154523,154536,154548,154561,154574,154578,154582,154592,154607,154612,154629,154648,154652],{"__ignoreMap":169},[252,154487,154488,154490,154492,154494,154496,154498],{"class":254,"line":255},[252,154489,30877],{"class":258},[252,154491,147459],{"class":262},[252,154493,30532],{"class":258},[252,154495,147464],{"class":262},[252,154497,31523],{"class":258},[252,154499,147469],{"class":262},[252,154501,154502,154504,154506,154508],{"class":254,"line":170},[252,154503,30877],{"class":258},[252,154505,147318],{"class":262},[252,154507,30532],{"class":258},[252,154509,154510],{"class":262}," Map\n",[252,154512,154513],{"class":254,"line":1318},[252,154514,2539],{"emptyLinePlaceholder":181},[252,154516,154517,154519,154521],{"class":254,"line":1333},[252,154518,101795],{"class":262},[252,154520,308],{"class":258},[252,154522,55587],{"class":262},[252,154524,154525,154528,154530,154532,154534],{"class":254,"line":1339},[252,154526,154527],{"class":262},"    (",[252,154529,69409],{"class":367},[252,154531,12575],{"class":262},[252,154533,1080],{"class":311},[252,154535,38187],{"class":262},[252,154537,154538,154540,154542,154544,154546],{"class":254,"line":1353},[252,154539,154527],{"class":262},[252,154541,69429],{"class":367},[252,154543,12575],{"class":262},[252,154545,147392],{"class":311},[252,154547,38187],{"class":262},[252,154549,154550,154552,154555,154557,154559],{"class":254,"line":1359},[252,154551,154527],{"class":262},[252,154553,154554],{"class":367},"\"广东\"",[252,154556,12575],{"class":262},[252,154558,1861],{"class":311},[252,154560,38187],{"class":262},[252,154562,154563,154565,154568,154570,154572],{"class":254,"line":1450},[252,154564,154527],{"class":262},[252,154566,154567],{"class":367},"\"浙江\"",[252,154569,12575],{"class":262},[252,154571,147397],{"class":311},[252,154573,38187],{"class":262},[252,154575,154576],{"class":254,"line":1456},[252,154577,33386],{"class":262},[252,154579,154580],{"class":254,"line":1468},[252,154581,2539],{"emptyLinePlaceholder":181},[252,154583,154584,154587,154589],{"class":254,"line":1751},[252,154585,154586],{"class":262},"map_chart ",[252,154588,308],{"class":258},[252,154590,154591],{"class":262}," Map()\n",[252,154593,154594,154597,154599,154602,154605],{"class":254,"line":1756},[252,154595,154596],{"class":262},"map_chart.add(",[252,154598,147375],{"class":367},[252,154600,154601],{"class":262},", data, ",[252,154603,154604],{"class":367},"\"china\"",[252,154606,269],{"class":262},[252,154608,154609],{"class":254,"line":1762},[252,154610,154611],{"class":262},"map_chart.set_global_opts(\n",[252,154613,154614,154616,154618,154620,154622,154624,154627],{"class":254,"line":1767},[252,154615,147553],{"class":5356},[252,154617,308],{"class":258},[252,154619,147558],{"class":262},[252,154621,51547],{"class":5356},[252,154623,308],{"class":258},[252,154625,154626],{"class":367},"\"地区销售额\"",[252,154628,38187],{"class":262},[252,154630,154631,154634,154636,154639,154642,154644,154646],{"class":254,"line":1781},[252,154632,154633],{"class":5356},"    visualmap_opts",[252,154635,308],{"class":258},[252,154637,154638],{"class":262},"opts.VisualMapOpts(",[252,154640,154641],{"class":5356},"max_",[252,154643,308],{"class":258},[252,154645,1861],{"class":311},[252,154647,38187],{"class":262},[252,154649,154650],{"class":254,"line":1786},[252,154651,269],{"class":262},[252,154653,154654,154657,154660],{"class":254,"line":1792},[252,154655,154656],{"class":262},"map_chart.render(",[252,154658,154659],{"class":367},"\"map_sales.html\"",[252,154661,269],{"class":262},[19,154663,154664],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154666,154668],{"id":154667},"_129-项目拆分建议","12.9 项目拆分建议",[19,154670,154671],{},"当代码超过一个文件时，可以这样组织：",[244,154673,154676],{"className":154674,"code":154675,"language":5327,"meta":169},[5325],"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",[22,154677,154675],{"__ignoreMap":169},[19,154679,154680],{},"职责：",[207,154682,154683,154689,154695,154701],{},[210,154684,154685,154688],{},[22,154686,154687],{},"main.py","：程序入口。",[210,154690,154691,154694],{},[22,154692,154693],{},"file_utils.py","：读写 JSON。",[210,154696,154697,154700],{},[22,154698,154699],{},"sales_service.py","：统计销售数据。",[210,154702,154703,154706],{},[22,154704,154705],{},"chart_builder.py","：生成图表。",[14,154708,154710],{"id":154709},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,154712,154713],{},"语法基础：",[207,154715,154716,154719,154722,154725],{},[210,154717,154718],{},"会写变量、注释、输入输出。",[210,154720,154721],{},"会使用 int、float、str、bool。",[210,154723,154724],{},"会做类型转换。",[210,154726,154727],{},"会使用 f-string 格式化输出。",[19,154729,154730],{},"流程控制：",[207,154732,154733,154739,154745,154753],{},[210,154734,154735,154736,28525],{},"会写 ",[22,154737,154738],{},"if elif else",[210,154740,154735,154741,132,154743,28525],{},[22,154742,108799],{},[22,154744,3164],{},[210,154746,154747,154748,132,154750,28525],{},"理解 ",[22,154749,2192],{},[22,154751,154752],{},"continue",[210,154754,154755],{},"能写嵌套循环。",[19,154757,154758],{},"函数：",[207,154760,154761,154764,154767,154770],{},[210,154762,154763],{},"会定义和调用函数。",[210,154765,154766],{},"理解参数和返回值。",[210,154768,154769],{},"知道局部变量和全局变量。",[210,154771,154772],{},"会使用默认参数、关键字参数、不定长参数。",[19,154774,154775],{},"容器：",[207,154777,154778,154781,154784,154787,154790],{},[210,154779,154780],{},"会使用列表增删改查。",[210,154782,154783],{},"会遍历列表、字典。",[210,154785,154786],{},"会使用切片。",[210,154788,154789],{},"会用集合去重。",[210,154791,154792],{},"会处理列表嵌套字典。",[19,154794,154795],{},"文件和模块：",[207,154797,154798,154801,154804,154807,154810],{},[210,154799,154800],{},"会读写文本文件。",[210,154802,154803],{},"会读写 JSON。",[210,154805,154806],{},"会捕获常见异常。",[210,154808,154809],{},"会导入模块和第三方包。",[210,154811,154812],{},"会创建简单包结构。",[19,154814,154815],{},"项目能力：",[207,154817,154818,154821,154824,154827,154830],{},[210,154819,154820],{},"能把代码拆成函数。",[210,154822,154823],{},"能把数据保存到文件。",[210,154825,154826],{},"能处理用户输入错误。",[210,154828,154829],{},"能写一个完整菜单程序。",[210,154831,154832],{},"能用 pyecharts 生成图表。",[14,154834,154836],{"id":154835},"_1211-推荐练习顺序","12.11 推荐练习顺序",[207,154838,154839,154842,154845,154848,154851,154854,154857,154860],{},[210,154840,154841],{},"猜数字游戏。",[210,154843,154844],{},"ATM 菜单程序。",[210,154846,154847],{},"学生成绩统计。",[210,154849,154850],{},"学生管理系统函数版。",[210,154852,154853],{},"学生管理系统文件持久化版。",[210,154855,154856],{},"学生管理系统面向对象版。",[210,154858,154859],{},"销售数据统计。",[210,154861,154862],{},"销售数据可视化。",[14,154864,154866],{"id":154865},"_1212-常见学习误区","12.12 常见学习误区",[207,154868,154869,154872,154875,154878,154881,154884,154887],{},[210,154870,154871],{},"只看视频不敲代码。",[210,154873,154874],{},"一报错就复制错误去搜，不先读报错位置。",[210,154876,154877],{},"变量名随便写，后续自己看不懂。",[210,154879,154880],{},"所有代码都写在一个文件一个函数里。",[210,154882,154883],{},"不保存练习代码，复习时没有材料。",[210,154885,154886],{},"还没掌握列表字典就急着学框架。",[210,154888,154889],{},"不会读官方文档，只依赖教程。",[14,154891,154893],{"id":154892},"_1213-如何读报错","12.13 如何读报错",[19,154895,154896],{},"报错通常从下往上看最后几行。",[19,154898,15275],{},[244,154900,154903],{"className":154901,"code":154902,"language":5327,"meta":169},[5325],"ValueError: invalid literal for int() with base 10: 'abc'\n",[22,154904,154902],{"__ignoreMap":169},[19,154906,24739],{},[207,154908,154909,154915,154925],{},[210,154910,154911,154912,28525],{},"异常类型是 ",[22,154913,154914],{},"ValueError",[210,154916,107481,154917,154920,154921,154924],{},[22,154918,154919],{},"int()"," 无法把 ",[22,154922,154923],{},"'abc'"," 转成整数。",[210,154926,154927],{},"应该检查输入内容或增加异常处理。",[19,154929,154930],{},"再看文件名和行号：",[244,154932,154935],{"className":154933,"code":154934,"language":5327,"meta":169},[5325],"File \"main.py\", line 10, in \u003Cmodule>\n",[22,154936,154934],{"__ignoreMap":169},[19,154938,154939,154940,154942],{},"表示错误发生在 ",[22,154941,154687],{}," 第 10 行。",[14,154944,154946],{"id":154945},"_1214-后续学习方向","12.14 后续学习方向",[19,154948,154949],{},"Python 基础完成后，可以按兴趣选择方向：",[207,154951,154952,154964,154973,154985,154996,155005,155015],{},[210,154953,154954,154955,475,154958,475,154961,28525],{},"自动化办公：",[22,154956,154957],{},"openpyxl",[22,154959,154960],{},"python-docx",[22,154962,154963],{},"pdfplumber",[210,154965,154966,154967,475,154969,475,154971,28525],{},"数据分析：",[22,154968,100764],{},[22,154970,146265],{},[22,154972,146273],{},[210,154974,154975,154976,475,154979,475,154982,28525],{},"Web 后端：",[22,154977,154978],{},"Flask",[22,154980,154981],{},"FastAPI",[22,154983,154984],{},"Django",[210,154986,154987,154988,475,154990,475,154993,28525],{},"爬虫：",[22,154989,146250],{},[22,154991,154992],{},"BeautifulSoup",[22,154994,154995],{},"Scrapy",[210,154997,154998,154999,475,155001,155004],{},"测试开发：",[22,155000,146297],{},[22,155002,155003],{},"selenium","、接口测试。",[210,155006,155007,155008,475,155010,475,155012,28525],{},"人工智能：",[22,155009,100764],{},[22,155011,146265],{},[22,155013,155014],{},"pytorch",[210,155016,155017,155018,475,155020,475,155023,28525],{},"运维脚本：",[22,155019,145866],{},[22,155021,155022],{},"subprocess",[22,155024,155025],{},"paramiko",[19,155027,155028],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155030,155032],{"id":155031},"_1215-结课练习","12.15 结课练习",[207,155034,155035,155038,155041,155044,155047,155050,155053,155056],{},[210,155036,155037],{},"完成函数版学生管理系统。",[210,155039,155040],{},"给学生管理系统增加 JSON 持久化。",[210,155042,155043],{},"给学生管理系统增加异常处理。",[210,155045,155046],{},"把学生管理系统改成面向对象版。",[210,155048,155049],{},"使用 pyecharts 绘制学生成绩柱状图。",[210,155051,155052],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[210,155054,155055],{},"按品类统计销售额并绘制柱状图。",[210,155057,155058],{},"写一份自己的 Python 学习路线图。",[5266,155060,155061],{},"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":169,"searchDepth":170,"depth":170,"links":155063},[155064,155065,155068,155069,155070,155076,155077,155078,155079,155080,155081,155082,155083,155084,155085],{"id":151780,"depth":170,"text":151781},{"id":151830,"depth":170,"text":151831,"children":155066},[155067],{"id":151834,"depth":1318,"text":151835},{"id":151873,"depth":170,"text":151874},{"id":153347,"depth":170,"text":153348},{"id":153685,"depth":170,"text":153686,"children":155071},[155072,155073,155074,155075],{"id":153689,"depth":1318,"text":153690},{"id":153829,"depth":1318,"text":153830},{"id":153919,"depth":1318,"text":153920},{"id":154005,"depth":1318,"text":154006},{"id":154046,"depth":170,"text":154047},{"id":154239,"depth":170,"text":154240},{"id":154476,"depth":170,"text":154477},{"id":154667,"depth":170,"text":154668},{"id":154709,"depth":170,"text":154710},{"id":154835,"depth":170,"text":154836},{"id":154865,"depth":170,"text":154866},{"id":154892,"depth":170,"text":154893},{"id":154945,"depth":170,"text":154946},{"id":155031,"depth":170,"text":155032},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151772,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155092,"title":155093,"body":155094,"description":178,"extension":179,"meta":157563,"navigation":181,"path":157564,"seo":157565,"stem":157566,"__hash__":157567},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155095,"toc":157538},[155096,155099,155103,155106,155109,155129,155132,155155,155158,155161,155183,155186,155208,155212,155215,155255,155258,155379,155383,155386,155426,155429,155453,155456,155460,155463,155477,155510,155513,155548,155551,155574,155577,155610,155613,155615,155621,155696,155699,155705,155722,155762,155766,155769,155815,155817,155855,155858,155893,155896,155931,155934,155966,155969,155988,155992,155996,156109,156111,156186,156190,156236,156239,156265,156274,156278,156281,156344,156352,156380,156384,156424,156489,156493,156496,156535,156538,156583,156586,156647,156651,156678,156681,156709,156712,156716,156720,156785,156788,156826,156829,156861,156865,156964,156968,156971,157044,157047,157095,157099,157105,157145,157148,157195,157198,157247,157251,157253,157267,157269,157450,157454,157481,157501,157508,157512,157529,157535],[10,155097,155093],{"id":155098},"_2-基础语法变量与字符串",[14,155100,155102],{"id":155101},"_21-注释","2.1 注释",[19,155104,155105],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155107,155108],{},"单行注释：",[244,155110,155112],{"className":30518,"code":155111,"language":30520,"meta":169,"style":169},"# 这是单行注释\nprint(\"hello\")\n",[22,155113,155114,155119],{"__ignoreMap":169},[252,155115,155116],{"class":254,"line":255},[252,155117,155118],{"class":321},"# 这是单行注释\n",[252,155120,155121,155123,155125,155127],{"class":254,"line":170},[252,155122,30555],{"class":311},[252,155124,263],{"class":262},[252,155126,5984],{"class":367},[252,155128,269],{"class":262},[19,155130,155131],{},"多行说明常用三引号：",[244,155133,155135],{"className":30518,"code":155134,"language":30520,"meta":169,"style":169},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[22,155136,155137,155141,155146,155151],{"__ignoreMap":169},[252,155138,155139],{"class":254,"line":255},[252,155140,95836],{"class":367},[252,155142,155143],{"class":254,"line":170},[252,155144,155145],{"class":367},"这是多行说明。\n",[252,155147,155148],{"class":254,"line":1318},[252,155149,155150],{"class":367},"常用于文件顶部说明、函数说明等。\n",[252,155152,155153],{"class":254,"line":1333},[252,155154,95836],{"class":367},[19,155156,155157],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155159,155160],{},"不好：",[244,155162,155164],{"className":30518,"code":155163,"language":30520,"meta":169,"style":169},"# age 加 1\nage = age + 1\n",[22,155165,155166,155171],{"__ignoreMap":169},[252,155167,155168],{"class":254,"line":255},[252,155169,155170],{"class":321},"# age 加 1\n",[252,155172,155173,155175,155177,155179,155181],{"class":254,"line":170},[252,155174,146626],{"class":262},[252,155176,308],{"class":258},[252,155178,15847],{"class":262},[252,155180,744],{"class":258},[252,155182,55839],{"class":311},[19,155184,155185],{},"较好：",[244,155187,155189],{"className":30518,"code":155188,"language":30520,"meta":169,"style":169},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[22,155190,155191,155196],{"__ignoreMap":169},[252,155192,155193],{"class":254,"line":255},[252,155194,155195],{"class":321},"# 用户过完生日后，年龄增加一岁\n",[252,155197,155198,155200,155202,155204,155206],{"class":254,"line":170},[252,155199,146626],{"class":262},[252,155201,308],{"class":258},[252,155203,15847],{"class":262},[252,155205,744],{"class":258},[252,155207,55839],{"class":311},[14,155209,155211],{"id":155210},"_22-字面量","2.2 字面量",[19,155213,155214],{},"字面量就是代码中直接写出来的数据。",[244,155216,155218],{"className":30518,"code":155217,"language":30520,"meta":169,"style":169},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[22,155219,155220,155227,155234,155241,155248],{"__ignoreMap":169},[252,155221,155222,155224],{"class":254,"line":255},[252,155223,574],{"class":311},[252,155225,155226],{"class":321},"          # 整数\n",[252,155228,155229,155231],{"class":254,"line":170},[252,155230,312],{"class":311},[252,155232,155233],{"class":321},"         # 小数\n",[252,155235,155236,155238],{"class":254,"line":1318},[252,155237,5984],{"class":367},[252,155239,155240],{"class":321},"      # 字符串\n",[252,155242,155243,155245],{"class":254,"line":1333},[252,155244,31616],{"class":311},[252,155246,155247],{"class":321},"         # 布尔值\n",[252,155249,155250,155252],{"class":254,"line":1339},[252,155251,95824],{"class":311},[252,155253,155254],{"class":321},"         # 空值\n",[19,155256,155257],{},"常见字面量类型：",[400,155259,155260,155270],{},[403,155261,155262],{},[406,155263,155264,155266,155268],{},[409,155265,23876],{},[409,155267,27632],{},[409,155269,26009],{},[447,155271,155272,155283,155294,155305,155317,155329,155341,155354,155366],{},[406,155273,155274,155276,155280],{},[452,155275,266],{},[452,155277,155278],{},[22,155279,574],{},[452,155281,155282],{},"整数",[406,155284,155285,155287,155291],{},[452,155286,302],{},[452,155288,155289],{},[22,155290,312],{},[452,155292,155293],{},"浮点数",[406,155295,155296,155298,155302],{},[452,155297,1438],{},[452,155299,155300],{},[22,155301,5984],{},[452,155303,155304],{},"字符串",[406,155306,155307,155309,155315],{},[452,155308,1493],{},[452,155310,155311,475,155313],{},[22,155312,31616],{},[22,155314,34127],{},[452,155316,66155],{},[406,155318,155319,155322,155326],{},[452,155320,155321],{},"NoneType",[452,155323,155324],{},[22,155325,95824],{},[452,155327,155328],{},"空值",[406,155330,155331,155333,155338],{},[452,155332,154150],{},[452,155334,155335],{},[22,155336,155337],{},"[1, 2, 3]",[452,155339,155340],{},"列表",[406,155342,155343,155346,155351],{},[452,155344,155345],{},"tuple",[452,155347,155348],{},[22,155349,155350],{},"(1, 2, 3)",[452,155352,155353],{},"元组",[406,155355,155356,155358,155363],{},[452,155357,114682],{},[452,155359,155360],{},[22,155361,155362],{},"{\"name\": \"张三\"}",[452,155364,155365],{},"字典",[406,155367,155368,155371,155376],{},[452,155369,155370],{},"set",[452,155372,155373],{},[22,155374,155375],{},"{1, 2, 3}",[452,155377,155378],{},"集合",[14,155380,155382],{"id":155381},"_23-变量","2.3 变量",[19,155384,155385],{},"变量是保存数据的名字。",[244,155387,155389],{"className":30518,"code":155388,"language":30520,"meta":169,"style":169},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[22,155390,155391,155399,155407,155417],{"__ignoreMap":169},[252,155392,155393,155395,155397],{"class":254,"line":255},[252,155394,146616],{"class":262},[252,155396,308],{"class":258},[252,155398,149433],{"class":367},[252,155400,155401,155403,155405],{"class":254,"line":170},[252,155402,146626],{"class":262},[252,155404,308],{"class":258},[252,155406,146631],{"class":311},[252,155408,155409,155412,155414],{"class":254,"line":1318},[252,155410,155411],{"class":262},"height ",[252,155413,308],{"class":258},[252,155415,155416],{"class":311}," 1.75\n",[252,155418,155419,155422,155424],{"class":254,"line":1333},[252,155420,155421],{"class":262},"is_student ",[252,155423,308],{"class":258},[252,155425,153679],{"class":311},[19,155427,155428],{},"Python 的变量不需要提前声明类型：",[244,155430,155432],{"className":30518,"code":155431,"language":30520,"meta":169,"style":169},"score = 100\nscore = \"满分\"\n",[22,155433,155434,155444],{"__ignoreMap":169},[252,155435,155436,155439,155441],{"class":254,"line":255},[252,155437,155438],{"class":262},"score ",[252,155440,308],{"class":258},[252,155442,155443],{"class":311}," 100\n",[252,155445,155446,155448,155450],{"class":254,"line":170},[252,155447,155438],{"class":262},[252,155449,308],{"class":258},[252,155451,155452],{"class":367}," \"满分\"\n",[19,155454,155455],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155457,155459],{"id":155458},"_24-变量命名规则","2.4 变量命名规则",[19,155461,155462],{},"硬性规则：",[207,155464,155465,155468,155471,155474],{},[210,155466,155467],{},"只能由字母、数字、下划线组成。",[210,155469,155470],{},"不能以数字开头。",[210,155472,155473],{},"不能使用 Python 关键字。",[210,155475,155476],{},"区分大小写。",[244,155478,155480],{"className":30518,"code":155479,"language":30520,"meta":169,"style":169},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[22,155481,155482,155491,155500],{"__ignoreMap":169},[252,155483,155484,155487,155489],{"class":254,"line":255},[252,155485,155486],{"class":262},"user_name ",[252,155488,308],{"class":258},[252,155490,146621],{"class":367},[252,155492,155493,155496,155498],{"class":254,"line":170},[252,155494,155495],{"class":262},"age2 ",[252,155497,308],{"class":258},[252,155499,146631],{"class":311},[252,155501,155502,155505,155507],{"class":254,"line":1318},[252,155503,155504],{"class":262},"_token ",[252,155506,308],{"class":258},[252,155508,155509],{"class":367}," \"abc\"\n",[19,155511,155512],{},"错误写法：",[244,155514,155516],{"className":30518,"code":155515,"language":30520,"meta":169,"style":169},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[22,155517,155518,155527,155539],{"__ignoreMap":169},[252,155519,155520,155523,155525],{"class":254,"line":255},[252,155521,155522],{"class":77542},"2age",[252,155524,13704],{"class":258},[252,155526,146631],{"class":311},[252,155528,155529,155531,155533,155535,155537],{"class":254,"line":170},[252,155530,131664],{"class":262},[252,155532,795],{"class":258},[252,155534,146616],{"class":262},[252,155536,308],{"class":258},[252,155538,146621],{"class":367},[252,155540,155541,155543,155545],{"class":254,"line":1318},[252,155542,14834],{"class":258},[252,155544,13704],{"class":258},[252,155546,155547],{"class":367}," \"一班\"\n",[19,155549,155550],{},"查看关键字：",[244,155552,155554],{"className":30518,"code":155553,"language":30520,"meta":169,"style":169},"import keyword\n\nprint(keyword.kwlist)\n",[22,155555,155556,155563,155567],{"__ignoreMap":169},[252,155557,155558,155560],{"class":254,"line":255},[252,155559,30532],{"class":258},[252,155561,155562],{"class":262}," keyword\n",[252,155564,155565],{"class":254,"line":170},[252,155566,2539],{"emptyLinePlaceholder":181},[252,155568,155569,155571],{"class":254,"line":1318},[252,155570,30555],{"class":311},[252,155572,155573],{"class":262},"(keyword.kwlist)\n",[19,155575,155576],{},"推荐命名风格：",[244,155578,155580],{"className":30518,"code":155579,"language":30520,"meta":169,"style":169},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[22,155581,155582,155591,155601],{"__ignoreMap":169},[252,155583,155584,155587,155589],{"class":254,"line":255},[252,155585,155586],{"class":262},"student_name ",[252,155588,308],{"class":258},[252,155590,149433],{"class":367},[252,155592,155593,155596,155598],{"class":254,"line":170},[252,155594,155595],{"class":262},"total_price ",[252,155597,308],{"class":258},[252,155599,155600],{"class":311}," 99.8\n",[252,155602,155603,155606,155608],{"class":254,"line":1318},[252,155604,155605],{"class":262},"is_finished ",[252,155607,308],{"class":258},[252,155609,125942],{"class":311},[19,155611,155612],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155614,50872],{"id":50871},[19,155616,104502,155617,155620],{},[22,155618,155619],{},"type()"," 查看数据类型：",[244,155622,155624],{"className":30518,"code":155623,"language":30520,"meta":169,"style":169},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[22,155625,155626,155640,155654,155668,155682],{"__ignoreMap":169},[252,155627,155628,155630,155632,155634,155636,155638],{"class":254,"line":255},[252,155629,30555],{"class":311},[252,155631,263],{"class":262},[252,155633,103243],{"class":311},[252,155635,263],{"class":262},[252,155637,574],{"class":311},[252,155639,30637],{"class":262},[252,155641,155642,155644,155646,155648,155650,155652],{"class":254,"line":170},[252,155643,30555],{"class":311},[252,155645,263],{"class":262},[252,155647,103243],{"class":311},[252,155649,263],{"class":262},[252,155651,312],{"class":311},[252,155653,30637],{"class":262},[252,155655,155656,155658,155660,155662,155664,155666],{"class":254,"line":1318},[252,155657,30555],{"class":311},[252,155659,263],{"class":262},[252,155661,103243],{"class":311},[252,155663,263],{"class":262},[252,155665,5984],{"class":367},[252,155667,30637],{"class":262},[252,155669,155670,155672,155674,155676,155678,155680],{"class":254,"line":1333},[252,155671,30555],{"class":311},[252,155673,263],{"class":262},[252,155675,103243],{"class":311},[252,155677,263],{"class":262},[252,155679,31616],{"class":311},[252,155681,30637],{"class":262},[252,155683,155684,155686,155688,155690,155692,155694],{"class":254,"line":1339},[252,155685,30555],{"class":311},[252,155687,263],{"class":262},[252,155689,103243],{"class":311},[252,155691,263],{"class":262},[252,155693,95824],{"class":311},[252,155695,30637],{"class":262},[19,155697,155698],{},"输出类似：",[244,155700,155703],{"className":155701,"code":155702,"language":5327,"meta":169},[5325],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[22,155704,155702],{"__ignoreMap":169},[19,155706,9165,155707,107419,155709,155711,155712,155714,155715,21639,155717,155714,155719,155721],{},[22,155708,1493],{},[22,155710,266],{}," 的子类，",[22,155713,31616],{}," 可以当作 ",[22,155716,480],{},[22,155718,34127],{},[22,155720,454],{},"，但业务代码中不要滥用。",[244,155723,155725],{"className":30518,"code":155724,"language":30520,"meta":169,"style":169},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[22,155726,155727,155745],{"__ignoreMap":169},[252,155728,155729,155731,155733,155735,155737,155739,155742],{"class":254,"line":255},[252,155730,30555],{"class":311},[252,155732,263],{"class":262},[252,155734,31616],{"class":311},[252,155736,45706],{"class":258},[252,155738,25258],{"class":311},[252,155740,155741],{"class":262},")   ",[252,155743,155744],{"class":321},"# 2\n",[252,155746,155747,155749,155751,155753,155755,155757,155759],{"class":254,"line":170},[252,155748,30555],{"class":311},[252,155750,263],{"class":262},[252,155752,34127],{"class":311},[252,155754,45706],{"class":258},[252,155756,25258],{"class":311},[252,155758,45948],{"class":262},[252,155760,155761],{"class":321},"# 1\n",[14,155763,155765],{"id":155764},"_26-类型转换","2.6 类型转换",[19,155767,155768],{},"常用转换函数：",[244,155770,155772],{"className":30518,"code":155771,"language":30520,"meta":169,"style":169},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[22,155773,155774,155784,155795,155805],{"__ignoreMap":169},[252,155775,155776,155778,155780,155782],{"class":254,"line":255},[252,155777,266],{"class":311},[252,155779,263],{"class":262},[252,155781,54456],{"class":367},[252,155783,269],{"class":262},[252,155785,155786,155788,155790,155793],{"class":254,"line":170},[252,155787,302],{"class":311},[252,155789,263],{"class":262},[252,155791,155792],{"class":367},"\"3.14\"",[252,155794,269],{"class":262},[252,155796,155797,155799,155801,155803],{"class":254,"line":1318},[252,155798,1438],{"class":311},[252,155800,263],{"class":262},[252,155802,574],{"class":311},[252,155804,269],{"class":262},[252,155806,155807,155809,155811,155813],{"class":254,"line":1333},[252,155808,1493],{"class":311},[252,155810,263],{"class":262},[252,155812,480],{"class":311},[252,155814,269],{"class":262},[19,155816,15275],{},[244,155818,155820],{"className":30518,"code":155819,"language":30520,"meta":169,"style":169},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[22,155821,155822,155831,155842],{"__ignoreMap":169},[252,155823,155824,155826,155828],{"class":254,"line":255},[252,155825,146626],{"class":262},[252,155827,308],{"class":258},[252,155829,155830],{"class":367}," \"18\"\n",[252,155832,155833,155835,155837,155839],{"class":254,"line":170},[252,155834,146626],{"class":262},[252,155836,308],{"class":258},[252,155838,2521],{"class":311},[252,155840,155841],{"class":262},"(age)\n",[252,155843,155844,155846,155849,155851,155853],{"class":254,"line":1318},[252,155845,30555],{"class":311},[252,155847,155848],{"class":262},"(age ",[252,155850,744],{"class":258},[252,155852,25258],{"class":311},[252,155854,269],{"class":262},[19,155856,155857],{},"输入得到的内容永远是字符串：",[244,155859,155861],{"className":30518,"code":155860,"language":30520,"meta":169,"style":169},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[22,155862,155863,155879],{"__ignoreMap":169},[252,155864,155865,155868,155870,155872,155874,155877],{"class":254,"line":255},[252,155866,155867],{"class":262},"num ",[252,155869,308],{"class":258},[252,155871,60745],{"class":311},[252,155873,263],{"class":262},[252,155875,155876],{"class":367},"\"请输入数字:\"",[252,155878,269],{"class":262},[252,155880,155881,155883,155885,155887,155890],{"class":254,"line":170},[252,155882,30555],{"class":311},[252,155884,263],{"class":262},[252,155886,103243],{"class":311},[252,155888,155889],{"class":262},"(num))  ",[252,155891,155892],{"class":321},"# str\n",[19,155894,155895],{},"如果要做数学运算，必须转换：",[244,155897,155899],{"className":30518,"code":155898,"language":30520,"meta":169,"style":169},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[22,155900,155901,155919],{"__ignoreMap":169},[252,155902,155903,155905,155907,155909,155911,155913,155915,155917],{"class":254,"line":255},[252,155904,155867],{"class":262},[252,155906,308],{"class":258},[252,155908,2521],{"class":311},[252,155910,263],{"class":262},[252,155912,53961],{"class":311},[252,155914,263],{"class":262},[252,155916,155876],{"class":367},[252,155918,30637],{"class":262},[252,155920,155921,155923,155925,155927,155929],{"class":254,"line":170},[252,155922,30555],{"class":311},[252,155924,45759],{"class":262},[252,155926,744],{"class":258},[252,155928,2177],{"class":311},[252,155930,269],{"class":262},[19,155932,155933],{},"常见错误：",[244,155935,155937],{"className":30518,"code":155936,"language":30520,"meta":169,"style":169},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[22,155938,155939,155952],{"__ignoreMap":169},[252,155940,155941,155943,155945,155947,155949],{"class":254,"line":255},[252,155942,266],{"class":311},[252,155944,263],{"class":262},[252,155946,155792],{"class":367},[252,155948,155741],{"class":262},[252,155950,155951],{"class":321},"# 错误\n",[252,155953,155954,155956,155958,155961,155964],{"class":254,"line":170},[252,155955,266],{"class":311},[252,155957,263],{"class":262},[252,155959,155960],{"class":367},"\"abc\"",[252,155962,155963],{"class":262},")    ",[252,155965,155951],{"class":321},[19,155967,155968],{},"正确写法：",[244,155970,155972],{"className":30518,"code":155971,"language":30520,"meta":169,"style":169},"num = float(\"3.14\")\n",[22,155973,155974],{"__ignoreMap":169},[252,155975,155976,155978,155980,155982,155984,155986],{"class":254,"line":255},[252,155977,155867],{"class":262},[252,155979,308],{"class":258},[252,155981,109933],{"class":311},[252,155983,263],{"class":262},[252,155985,155792],{"class":367},[252,155987,269],{"class":262},[14,155989,155991],{"id":155990},"_27-运算符","2.7 运算符",[224,155993,155995],{"id":155994},"_271-算术运算符","2.7.1 算术运算符",[400,155997,155998,156009],{},[403,155999,156000],{},[406,156001,156002,156005,156007],{},[409,156003,156004],{},"运算符",[409,156006,26009],{},[409,156008,27632],{},[447,156010,156011,156025,156039,156053,156067,156081,156095],{},[406,156012,156013,156017,156020],{},[452,156014,156015],{},[22,156016,744],{},[452,156018,156019],{},"加法",[452,156021,156022],{},[22,156023,156024],{},"1 + 2",[406,156026,156027,156031,156034],{},[452,156028,156029],{},[22,156030,795],{},[452,156032,156033],{},"减法",[452,156035,156036],{},[22,156037,156038],{},"5 - 3",[406,156040,156041,156045,156048],{},[452,156042,156043],{},[22,156044,718],{},[452,156046,156047],{},"乘法",[452,156049,156050],{},[22,156051,156052],{},"2 * 3",[406,156054,156055,156059,156062],{},[452,156056,156057],{},[22,156058,847],{},[452,156060,156061],{},"除法，结果是浮点数",[452,156063,156064],{},[22,156065,156066],{},"5 \u002F 2",[406,156068,156069,156073,156076],{},[452,156070,156071],{},[22,156072,33469],{},[452,156074,156075],{},"整除",[452,156077,156078],{},[22,156079,156080],{},"5 \u002F\u002F 2",[406,156082,156083,156087,156090],{},[452,156084,156085],{},[22,156086,591],{},[452,156088,156089],{},"取余",[452,156091,156092],{},[22,156093,156094],{},"5 % 2",[406,156096,156097,156101,156104],{},[452,156098,156099],{},[22,156100,10801],{},[452,156102,156103],{},"幂运算",[452,156105,156106],{},[22,156107,156108],{},"2 ** 3",[19,156110,15275],{},[244,156112,156114],{"className":30518,"code":156113,"language":30520,"meta":169,"style":169},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[22,156115,156116,156134,156151,156168],{"__ignoreMap":169},[252,156117,156118,156120,156122,156124,156127,156129,156131],{"class":254,"line":255},[252,156119,30555],{"class":311},[252,156121,263],{"class":262},[252,156123,582],{"class":311},[252,156125,156126],{"class":258}," \u002F",[252,156128,14895],{"class":311},[252,156130,155741],{"class":262},[252,156132,156133],{"class":321},"# 2.5\n",[252,156135,156136,156138,156140,156142,156145,156147,156149],{"class":254,"line":170},[252,156137,30555],{"class":311},[252,156139,263],{"class":262},[252,156141,582],{"class":311},[252,156143,156144],{"class":258}," \u002F\u002F",[252,156146,14895],{"class":311},[252,156148,45948],{"class":262},[252,156150,155744],{"class":321},[252,156152,156153,156155,156157,156159,156162,156164,156166],{"class":254,"line":1318},[252,156154,30555],{"class":311},[252,156156,263],{"class":262},[252,156158,582],{"class":311},[252,156160,156161],{"class":258}," %",[252,156163,14895],{"class":311},[252,156165,155741],{"class":262},[252,156167,155761],{"class":321},[252,156169,156170,156172,156174,156176,156179,156181,156183],{"class":254,"line":1333},[252,156171,30555],{"class":311},[252,156173,263],{"class":262},[252,156175,340],{"class":311},[252,156177,156178],{"class":258}," **",[252,156180,78209],{"class":311},[252,156182,45948],{"class":262},[252,156184,156185],{"class":321},"# 8\n",[224,156187,156189],{"id":156188},"_272-赋值运算符","2.7.2 赋值运算符",[244,156191,156193],{"className":30518,"code":156192,"language":30520,"meta":169,"style":169},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[22,156194,156195,156203,156211,156219,156227],{"__ignoreMap":169},[252,156196,156197,156199,156201],{"class":254,"line":255},[252,156198,155867],{"class":262},[252,156200,308],{"class":258},[252,156202,58568],{"class":311},[252,156204,156205,156207,156209],{"class":254,"line":170},[252,156206,155867],{"class":262},[252,156208,9617],{"class":258},[252,156210,54567],{"class":311},[252,156212,156213,156215,156217],{"class":254,"line":1318},[252,156214,155867],{"class":262},[252,156216,150332],{"class":258},[252,156218,47863],{"class":311},[252,156220,156221,156223,156225],{"class":254,"line":1333},[252,156222,155867],{"class":262},[252,156224,137228],{"class":258},[252,156226,120172],{"class":311},[252,156228,156229,156231,156234],{"class":254,"line":1339},[252,156230,155867],{"class":262},[252,156232,156233],{"class":258},"\u002F=",[252,156235,47863],{"class":311},[19,156237,156238],{},"等价关系：",[244,156240,156242],{"className":30518,"code":156241,"language":30520,"meta":169,"style":169},"num += 1\nnum = num + 1\n",[22,156243,156244,156252],{"__ignoreMap":169},[252,156245,156246,156248,156250],{"class":254,"line":255},[252,156247,155867],{"class":262},[252,156249,9617],{"class":258},[252,156251,55839],{"class":311},[252,156253,156254,156256,156258,156261,156263],{"class":254,"line":170},[252,156255,155867],{"class":262},[252,156257,308],{"class":258},[252,156259,156260],{"class":262}," num ",[252,156262,744],{"class":258},[252,156264,55839],{"class":311},[19,156266,156267,156268,132,156271,28525],{},"Python 没有 ",[22,156269,156270],{},"num++",[22,156272,156273],{},"num--",[224,156275,156277],{"id":156276},"_273-比较运算符","2.7.3 比较运算符",[19,156279,156280],{},"比较运算结果是布尔值。",[244,156282,156284],{"className":30518,"code":156283,"language":30520,"meta":169,"style":169},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[22,156285,156286,156300,156315,156329],{"__ignoreMap":169},[252,156287,156288,156290,156292,156294,156296,156298],{"class":254,"line":255},[252,156289,30555],{"class":311},[252,156291,263],{"class":262},[252,156293,709],{"class":311},[252,156295,26362],{"class":258},[252,156297,2287],{"class":311},[252,156299,269],{"class":262},[252,156301,156302,156304,156306,156308,156311,156313],{"class":254,"line":170},[252,156303,30555],{"class":311},[252,156305,263],{"class":262},[252,156307,709],{"class":311},[252,156309,156310],{"class":258}," >=",[252,156312,2177],{"class":311},[252,156314,269],{"class":262},[252,156316,156317,156319,156321,156323,156325,156327],{"class":254,"line":1318},[252,156318,30555],{"class":311},[252,156320,263],{"class":262},[252,156322,709],{"class":311},[252,156324,101696],{"class":258},[252,156326,2222],{"class":311},[252,156328,269],{"class":262},[252,156330,156331,156333,156335,156337,156340,156342],{"class":254,"line":1333},[252,156332,30555],{"class":311},[252,156334,263],{"class":262},[252,156336,709],{"class":311},[252,156338,156339],{"class":258}," !=",[252,156341,2222],{"class":311},[252,156343,269],{"class":262},[19,156345,156346,156347,156349,156350,28525],{},"注意：判断相等用 ",[22,156348,3088],{},"，赋值用 ",[22,156351,308],{},[244,156353,156355],{"className":30518,"code":156354,"language":30520,"meta":169,"style":169},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[22,156356,156357,156369],{"__ignoreMap":169},[252,156358,156359,156361,156363,156366],{"class":254,"line":255},[252,156360,146626],{"class":262},[252,156362,308],{"class":258},[252,156364,156365],{"class":311}," 18",[252,156367,156368],{"class":321},"       # 赋值\n",[252,156370,156371,156373,156375,156377],{"class":254,"line":170},[252,156372,146626],{"class":262},[252,156374,3088],{"class":258},[252,156376,156365],{"class":311},[252,156378,156379],{"class":321},"      # 判断是否相等\n",[224,156381,156383],{"id":156382},"_274-逻辑运算符","2.7.4 逻辑运算符",[400,156385,156386,156394],{},[403,156387,156388],{},[406,156389,156390,156392],{},[409,156391,156004],{},[409,156393,26009],{},[447,156395,156396,156405,156414],{},[406,156397,156398,156402],{},[452,156399,156400],{},[22,156401,30602],{},[452,156403,156404],{},"并且",[406,156406,156407,156411],{},[452,156408,156409],{},[22,156410,115226],{},[452,156412,156413],{},"或者",[406,156415,156416,156421],{},[452,156417,156418],{},[22,156419,156420],{},"not",[452,156422,156423],{},"取反",[244,156425,156427],{"className":30518,"code":156426,"language":30520,"meta":169,"style":169},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[22,156428,156429,156437,156446,156450,156465,156479],{"__ignoreMap":169},[252,156430,156431,156433,156435],{"class":254,"line":255},[252,156432,146626],{"class":262},[252,156434,308],{"class":258},[252,156436,88203],{"class":311},[252,156438,156439,156442,156444],{"class":254,"line":170},[252,156440,156441],{"class":262},"has_ticket ",[252,156443,308],{"class":258},[252,156445,153679],{"class":311},[252,156447,156448],{"class":254,"line":1318},[252,156449,2539],{"emptyLinePlaceholder":181},[252,156451,156452,156454,156456,156458,156460,156462],{"class":254,"line":1333},[252,156453,30555],{"class":311},[252,156455,155848],{"class":262},[252,156457,1849],{"class":258},[252,156459,156365],{"class":311},[252,156461,120565],{"class":258},[252,156463,156464],{"class":262}," has_ticket)\n",[252,156466,156467,156469,156471,156473,156475,156477],{"class":254,"line":1339},[252,156468,30555],{"class":311},[252,156470,155848],{"class":262},[252,156472,1173],{"class":258},[252,156474,156365],{"class":311},[252,156476,114337],{"class":258},[252,156478,156464],{"class":262},[252,156480,156481,156483,156485,156487],{"class":254,"line":1353},[252,156482,30555],{"class":311},[252,156484,263],{"class":262},[252,156486,156420],{"class":258},[252,156488,156464],{"class":262},[14,156490,156492],{"id":156491},"_28-字符串定义","2.8 字符串定义",[19,156494,156495],{},"三种常见写法：",[244,156497,156499],{"className":30518,"code":156498,"language":30520,"meta":169,"style":169},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[22,156500,156501,156511,156520,156530],{"__ignoreMap":169},[252,156502,156503,156506,156508],{"class":254,"line":255},[252,156504,156505],{"class":262},"name1 ",[252,156507,308],{"class":258},[252,156509,156510],{"class":367}," '小明'\n",[252,156512,156513,156516,156518],{"class":254,"line":170},[252,156514,156515],{"class":262},"name2 ",[252,156517,308],{"class":258},[252,156519,149433],{"class":367},[252,156521,156522,156525,156527],{"class":254,"line":1318},[252,156523,156524],{"class":262},"text ",[252,156526,308],{"class":258},[252,156528,156529],{"class":367}," \"\"\"这是多行字符串\n",[252,156531,156532],{"class":254,"line":1333},[252,156533,156534],{"class":367},"可以换行\"\"\"\n",[19,156536,156537],{},"字符串中包含引号：",[244,156539,156541],{"className":30518,"code":156540,"language":30520,"meta":169,"style":169},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[22,156542,156543,156553,156563],{"__ignoreMap":169},[252,156544,156545,156548,156550],{"class":254,"line":255},[252,156546,156547],{"class":262},"msg ",[252,156549,308],{"class":258},[252,156551,156552],{"class":367}," \"他说:'你好'\"\n",[252,156554,156555,156558,156560],{"class":254,"line":170},[252,156556,156557],{"class":262},"msg2 ",[252,156559,308],{"class":258},[252,156561,156562],{"class":367}," '他说:\"你好\"'\n",[252,156564,156565,156568,156570,156573,156576,156579,156581],{"class":254,"line":1318},[252,156566,156567],{"class":262},"msg3 ",[252,156569,308],{"class":258},[252,156571,156572],{"class":367}," \"他说:",[252,156574,156575],{"class":311},"\\\"",[252,156577,156578],{"class":367},"你好",[252,156580,156575],{"class":311},[252,156582,25273],{"class":367},[19,156584,156585],{},"常见转义字符：",[400,156587,156588,156597],{},[403,156589,156590],{},[406,156591,156592,156595],{},[409,156593,156594],{},"写法",[409,156596,100838],{},[447,156598,156599,156609,156618,156628,156637],{},[406,156600,156601,156606],{},[452,156602,156603],{},[22,156604,156605],{},"\\n",[452,156607,156608],{},"换行",[406,156610,156611,156615],{},[452,156612,156613],{},[22,156614,1369],{},[452,156616,156617],{},"制表符",[406,156619,156620,156625],{},[452,156621,156622],{},[22,156623,156624],{},"\\\\",[452,156626,156627],{},"反斜杠",[406,156629,156630,156634],{},[452,156631,156632],{},[22,156633,156575],{},[452,156635,156636],{},"双引号",[406,156638,156639,156644],{},[452,156640,156641],{},[22,156642,156643],{},"\\'",[452,156645,156646],{},"单引号",[14,156648,156650],{"id":156649},"_29-字符串拼接","2.9 字符串拼接",[244,156652,156654],{"className":30518,"code":156653,"language":30520,"meta":169,"style":169},"name = \"小明\"\nprint(\"你好，\" + name)\n",[22,156655,156656,156664],{"__ignoreMap":169},[252,156657,156658,156660,156662],{"class":254,"line":255},[252,156659,146616],{"class":262},[252,156661,308],{"class":258},[252,156663,149433],{"class":367},[252,156665,156666,156668,156670,156673,156675],{"class":254,"line":170},[252,156667,30555],{"class":311},[252,156669,263],{"class":262},[252,156671,156672],{"class":367},"\"你好，\"",[252,156674,45706],{"class":258},[252,156676,156677],{"class":262}," name)\n",[19,156679,156680],{},"字符串只能和字符串拼接：",[244,156682,156684],{"className":30518,"code":156683,"language":30520,"meta":169,"style":169},"age = 18\nprint(\"年龄:\" + str(age))\n",[22,156685,156686,156694],{"__ignoreMap":169},[252,156687,156688,156690,156692],{"class":254,"line":255},[252,156689,146626],{"class":262},[252,156691,308],{"class":258},[252,156693,146631],{"class":311},[252,156695,156696,156698,156700,156702,156704,156706],{"class":254,"line":170},[252,156697,30555],{"class":311},[252,156699,263],{"class":262},[252,156701,146597],{"class":367},[252,156703,45706],{"class":258},[252,156705,74059],{"class":311},[252,156707,156708],{"class":262},"(age))\n",[19,156710,156711],{},"更推荐使用格式化字符串。",[14,156713,156715],{"id":156714},"_210-字符串格式化","2.10 字符串格式化",[224,156717,156719],{"id":156718},"_2101-百分号格式化","2.10.1 百分号格式化",[244,156721,156723],{"className":30518,"code":156722,"language":30520,"meta":169,"style":169},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[22,156724,156725,156733,156741,156750,156754],{"__ignoreMap":169},[252,156726,156727,156729,156731],{"class":254,"line":255},[252,156728,146616],{"class":262},[252,156730,308],{"class":258},[252,156732,149433],{"class":367},[252,156734,156735,156737,156739],{"class":254,"line":170},[252,156736,146626],{"class":262},[252,156738,308],{"class":258},[252,156740,146631],{"class":311},[252,156742,156743,156745,156747],{"class":254,"line":1318},[252,156744,155438],{"class":262},[252,156746,308],{"class":258},[252,156748,156749],{"class":311}," 95.5\n",[252,156751,156752],{"class":254,"line":1333},[252,156753,2539],{"emptyLinePlaceholder":181},[252,156755,156756,156758,156760,156763,156766,156769,156772,156775,156778,156780,156782],{"class":254,"line":1339},[252,156757,30555],{"class":311},[252,156759,263],{"class":262},[252,156761,156762],{"class":367},"\"姓名:",[252,156764,156765],{"class":311},"%s",[252,156767,156768],{"class":367}," 年龄:",[252,156770,156771],{"class":311},"%d",[252,156773,156774],{"class":367}," 分数:",[252,156776,156777],{"class":311},"%.1f",[252,156779,514],{"class":367},[252,156781,156161],{"class":258},[252,156783,156784],{"class":262}," (name, age, score))\n",[19,156786,156787],{},"常用占位符：",[400,156789,156790,156799],{},[403,156791,156792],{},[406,156793,156794,156797],{},[409,156795,156796],{},"占位符",[409,156798,26009],{},[447,156800,156801,156809,156817],{},[406,156802,156803,156807],{},[452,156804,156805],{},[22,156806,156765],{},[452,156808,155304],{},[406,156810,156811,156815],{},[452,156812,156813],{},[22,156814,156771],{},[452,156816,155282],{},[406,156818,156819,156824],{},[452,156820,156821],{},[22,156822,156823],{},"%f",[452,156825,155293],{},[19,156827,156828],{},"精度控制：",[244,156830,156832],{"className":30518,"code":156831,"language":30520,"meta":169,"style":169},"price = 12.3456\nprint(\"%.2f\" % price)\n",[22,156833,156834,156843],{"__ignoreMap":169},[252,156835,156836,156838,156840],{"class":254,"line":255},[252,156837,146761],{"class":262},[252,156839,308],{"class":258},[252,156841,156842],{"class":311}," 12.3456\n",[252,156844,156845,156847,156849,156851,156854,156856,156858],{"class":254,"line":170},[252,156846,30555],{"class":311},[252,156848,263],{"class":262},[252,156850,514],{"class":367},[252,156852,156853],{"class":311},"%.2f",[252,156855,514],{"class":367},[252,156857,156161],{"class":258},[252,156859,156860],{"class":262}," price)\n",[224,156862,156864],{"id":156863},"_2102-format方法","2.10.2 format方法",[244,156866,156868],{"className":30518,"code":156867,"language":30520,"meta":169,"style":169},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[22,156869,156870,156878,156886,156890,156909,156929],{"__ignoreMap":169},[252,156871,156872,156874,156876],{"class":254,"line":255},[252,156873,146616],{"class":262},[252,156875,308],{"class":258},[252,156877,149433],{"class":367},[252,156879,156880,156882,156884],{"class":254,"line":170},[252,156881,146626],{"class":262},[252,156883,308],{"class":258},[252,156885,146631],{"class":311},[252,156887,156888],{"class":254,"line":1318},[252,156889,2539],{"emptyLinePlaceholder":181},[252,156891,156892,156894,156896,156898,156900,156902,156904,156906],{"class":254,"line":1333},[252,156893,30555],{"class":311},[252,156895,263],{"class":262},[252,156897,156762],{"class":367},[252,156899,32599],{"class":311},[252,156901,156768],{"class":367},[252,156903,32599],{"class":311},[252,156905,514],{"class":367},[252,156907,156908],{"class":262},".format(name, age))\n",[252,156910,156911,156913,156915,156917,156920,156922,156925,156927],{"class":254,"line":1339},[252,156912,30555],{"class":311},[252,156914,263],{"class":262},[252,156916,156762],{"class":367},[252,156918,156919],{"class":311},"{0}",[252,156921,156768],{"class":367},[252,156923,156924],{"class":311},"{1}",[252,156926,514],{"class":367},[252,156928,156908],{"class":262},[252,156930,156931,156933,156935,156937,156940,156942,156945,156947,156950,156952,156954,156957,156959,156961],{"class":254,"line":1353},[252,156932,30555],{"class":311},[252,156934,263],{"class":262},[252,156936,156762],{"class":367},[252,156938,156939],{"class":311},"{name}",[252,156941,156768],{"class":367},[252,156943,156944],{"class":311},"{age}",[252,156946,514],{"class":367},[252,156948,156949],{"class":262},".format(",[252,156951,79949],{"class":5356},[252,156953,308],{"class":258},[252,156955,156956],{"class":262},"name, ",[252,156958,70361],{"class":5356},[252,156960,308],{"class":258},[252,156962,156963],{"class":262},"age))\n",[224,156965,156967],{"id":156966},"_2103-f-string","2.10.3 f-string",[19,156969,156970],{},"推荐写法：",[244,156972,156974],{"className":30518,"code":156973,"language":30520,"meta":169,"style":169},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[22,156975,156976,156984,156992,157000,157004],{"__ignoreMap":169},[252,156977,156978,156980,156982],{"class":254,"line":255},[252,156979,146616],{"class":262},[252,156981,308],{"class":258},[252,156983,149433],{"class":367},[252,156985,156986,156988,156990],{"class":254,"line":170},[252,156987,146626],{"class":262},[252,156989,308],{"class":258},[252,156991,146631],{"class":311},[252,156993,156994,156996,156998],{"class":254,"line":1318},[252,156995,155438],{"class":262},[252,156997,308],{"class":258},[252,156999,156749],{"class":311},[252,157001,157002],{"class":254,"line":1333},[252,157003,2539],{"emptyLinePlaceholder":181},[252,157005,157006,157008,157010,157012,157014,157016,157018,157020,157022,157024,157026,157028,157030,157032,157035,157038,157040,157042],{"class":254,"line":1339},[252,157007,30555],{"class":311},[252,157009,263],{"class":262},[252,157011,315],{"class":258},[252,157013,156762],{"class":367},[252,157015,1159],{"class":311},[252,157017,79949],{"class":262},[252,157019,1209],{"class":311},[252,157021,156768],{"class":367},[252,157023,1159],{"class":311},[252,157025,70361],{"class":262},[252,157027,1209],{"class":311},[252,157029,156774],{"class":367},[252,157031,1159],{"class":311},[252,157033,157034],{"class":262},"score",[252,157036,157037],{"class":258},":.1f",[252,157039,1209],{"class":311},[252,157041,514],{"class":367},[252,157043,269],{"class":262},[19,157045,157046],{},"表达式也可以放进去：",[244,157048,157050],{"className":30518,"code":157049,"language":30520,"meta":169,"style":169},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[22,157051,157052,157060,157068],{"__ignoreMap":169},[252,157053,157054,157056,157058],{"class":254,"line":255},[252,157055,146761],{"class":262},[252,157057,308],{"class":258},[252,157059,146766],{"class":311},[252,157061,157062,157064,157066],{"class":254,"line":170},[252,157063,146771],{"class":262},[252,157065,308],{"class":258},[252,157067,54567],{"class":311},[252,157069,157070,157072,157074,157076,157079,157081,157083,157085,157088,157090,157093],{"class":254,"line":1318},[252,157071,30555],{"class":311},[252,157073,263],{"class":262},[252,157075,315],{"class":258},[252,157077,157078],{"class":367},"\"总价:",[252,157080,1159],{"class":311},[252,157082,146761],{"class":262},[252,157084,718],{"class":258},[252,157086,157087],{"class":262}," count",[252,157089,1209],{"class":311},[252,157091,157092],{"class":367},"元\"",[252,157094,269],{"class":262},[14,157096,157098],{"id":157097},"_211-input输入","2.11 input输入",[19,157100,157101,157104],{},[22,157102,157103],{},"input()"," 会暂停程序，等待用户输入。",[244,157106,157108],{"className":30518,"code":157107,"language":30520,"meta":169,"style":169},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[22,157109,157110,157124],{"__ignoreMap":169},[252,157111,157112,157114,157116,157118,157120,157122],{"class":254,"line":255},[252,157113,146616],{"class":262},[252,157115,308],{"class":258},[252,157117,60745],{"class":311},[252,157119,263],{"class":262},[252,157121,152459],{"class":367},[252,157123,269],{"class":262},[252,157125,157126,157128,157130,157132,157135,157137,157139,157141,157143],{"class":254,"line":170},[252,157127,30555],{"class":311},[252,157129,263],{"class":262},[252,157131,315],{"class":258},[252,157133,157134],{"class":367},"\"你好，",[252,157136,1159],{"class":311},[252,157138,79949],{"class":262},[252,157140,1209],{"class":311},[252,157142,514],{"class":367},[252,157144,269],{"class":262},[19,157146,157147],{},"输入整数：",[244,157149,157151],{"className":30518,"code":157150,"language":30520,"meta":169,"style":169},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[22,157152,157153,157171],{"__ignoreMap":169},[252,157154,157155,157157,157159,157161,157163,157165,157167,157169],{"class":254,"line":255},[252,157156,146626],{"class":262},[252,157158,308],{"class":258},[252,157160,2521],{"class":311},[252,157162,263],{"class":262},[252,157164,53961],{"class":311},[252,157166,263],{"class":262},[252,157168,152474],{"class":367},[252,157170,30637],{"class":262},[252,157172,157173,157175,157177,157179,157182,157184,157186,157188,157191,157193],{"class":254,"line":170},[252,157174,30555],{"class":311},[252,157176,263],{"class":262},[252,157178,315],{"class":258},[252,157180,157181],{"class":367},"\"明年你",[252,157183,1159],{"class":311},[252,157185,146626],{"class":262},[252,157187,744],{"class":258},[252,157189,157190],{"class":311}," 1}",[252,157192,149484],{"class":367},[252,157194,269],{"class":262},[19,157196,157197],{},"输入小数：",[244,157199,157201],{"className":30518,"code":157200,"language":30520,"meta":169,"style":169},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[22,157202,157203,157222],{"__ignoreMap":169},[252,157204,157205,157207,157209,157211,157213,157215,157217,157220],{"class":254,"line":255},[252,157206,155411],{"class":262},[252,157208,308],{"class":258},[252,157210,109933],{"class":311},[252,157212,263],{"class":262},[252,157214,53961],{"class":311},[252,157216,263],{"class":262},[252,157218,157219],{"class":367},"\"请输入身高:\"",[252,157221,30637],{"class":262},[252,157223,157224,157226,157228,157230,157233,157235,157237,157240,157242,157245],{"class":254,"line":170},[252,157225,30555],{"class":311},[252,157227,263],{"class":262},[252,157229,315],{"class":258},[252,157231,157232],{"class":367},"\"身高:",[252,157234,1159],{"class":311},[252,157236,25121],{"class":262},[252,157238,157239],{"class":258},":.2f",[252,157241,1209],{"class":311},[252,157243,157244],{"class":367},"米\"",[252,157246,269],{"class":262},[14,157248,157250],{"id":157249},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157252,123428],{},[207,157254,157255,157258,157261,157264],{},[210,157256,157257],{},"输入商品单价。",[210,157259,157260],{},"输入购买数量。",[210,157262,157263],{},"输入折扣，例如 0.8 表示八折。",[210,157265,157266],{},"输出最终金额，保留两位小数。",[19,157268,10175],{},[244,157270,157272],{"className":30518,"code":157271,"language":30520,"meta":169,"style":169},"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",[22,157273,157274,157293,157312,157332,157336,157356,157360,157383,157404,157426],{"__ignoreMap":169},[252,157275,157276,157278,157280,157282,157284,157286,157288,157291],{"class":254,"line":255},[252,157277,146761],{"class":262},[252,157279,308],{"class":258},[252,157281,109933],{"class":311},[252,157283,263],{"class":262},[252,157285,53961],{"class":311},[252,157287,263],{"class":262},[252,157289,157290],{"class":367},"\"请输入商品单价:\"",[252,157292,30637],{"class":262},[252,157294,157295,157297,157299,157301,157303,157305,157307,157310],{"class":254,"line":170},[252,157296,146771],{"class":262},[252,157298,308],{"class":258},[252,157300,2521],{"class":311},[252,157302,263],{"class":262},[252,157304,53961],{"class":311},[252,157306,263],{"class":262},[252,157308,157309],{"class":367},"\"请输入购买数量:\"",[252,157311,30637],{"class":262},[252,157313,157314,157317,157319,157321,157323,157325,157327,157330],{"class":254,"line":1318},[252,157315,157316],{"class":262},"discount ",[252,157318,308],{"class":258},[252,157320,109933],{"class":311},[252,157322,263],{"class":262},[252,157324,53961],{"class":311},[252,157326,263],{"class":262},[252,157328,157329],{"class":367},"\"请输入折扣:\"",[252,157331,30637],{"class":262},[252,157333,157334],{"class":254,"line":1333},[252,157335,2539],{"emptyLinePlaceholder":181},[252,157337,157338,157341,157343,157346,157348,157351,157353],{"class":254,"line":1339},[252,157339,157340],{"class":262},"total ",[252,157342,308],{"class":258},[252,157344,157345],{"class":262}," price ",[252,157347,718],{"class":258},[252,157349,157350],{"class":262}," count ",[252,157352,718],{"class":258},[252,157354,157355],{"class":262}," discount\n",[252,157357,157358],{"class":254,"line":1353},[252,157359,2539],{"emptyLinePlaceholder":181},[252,157361,157362,157364,157366,157368,157371,157373,157375,157377,157379,157381],{"class":254,"line":1359},[252,157363,30555],{"class":311},[252,157365,263],{"class":262},[252,157367,315],{"class":258},[252,157369,157370],{"class":367},"\"商品单价:",[252,157372,1159],{"class":311},[252,157374,79954],{"class":262},[252,157376,157239],{"class":258},[252,157378,1209],{"class":311},[252,157380,514],{"class":367},[252,157382,269],{"class":262},[252,157384,157385,157387,157389,157391,157394,157396,157398,157400,157402],{"class":254,"line":1450},[252,157386,30555],{"class":311},[252,157388,263],{"class":262},[252,157390,315],{"class":258},[252,157392,157393],{"class":367},"\"购买数量:",[252,157395,1159],{"class":311},[252,157397,84572],{"class":262},[252,157399,1209],{"class":311},[252,157401,514],{"class":367},[252,157403,269],{"class":262},[252,157405,157406,157408,157410,157412,157415,157417,157420,157422,157424],{"class":254,"line":1456},[252,157407,30555],{"class":311},[252,157409,263],{"class":262},[252,157411,315],{"class":258},[252,157413,157414],{"class":367},"\"折扣:",[252,157416,1159],{"class":311},[252,157418,157419],{"class":262},"discount",[252,157421,1209],{"class":311},[252,157423,514],{"class":367},[252,157425,269],{"class":262},[252,157427,157428,157430,157432,157434,157437,157439,157442,157444,157446,157448],{"class":254,"line":1468},[252,157429,30555],{"class":311},[252,157431,263],{"class":262},[252,157433,315],{"class":258},[252,157435,157436],{"class":367},"\"应付金额:",[252,157438,1159],{"class":311},[252,157440,157441],{"class":262},"total",[252,157443,157239],{"class":258},[252,157445,1209],{"class":311},[252,157447,157092],{"class":367},[252,157449,269],{"class":262},[14,157451,157453],{"id":157452},"_213-易错点","2.13 易错点",[207,157455,157456,157461,157467,157475,157478],{},[210,157457,157458,157460],{},[22,157459,157103],{}," 的结果是字符串，做运算前要转换。",[210,157462,157463,157464,28525],{},"字符串拼接时，数字要先 ",[22,157465,157466],{},"str()",[210,157468,157469,157471,157472,157474],{},[22,157470,308],{}," 是赋值，",[22,157473,3088],{}," 是比较。",[210,157476,157477],{},"Python 没有自增自减运算符。",[210,157479,157480],{},"浮点数计算可能有精度误差：",[244,157482,157484],{"className":30518,"code":157483,"language":30520,"meta":169,"style":169},"print(0.1 + 0.2)\n",[22,157485,157486],{"__ignoreMap":169},[252,157487,157488,157490,157492,157494,157496,157499],{"class":254,"line":255},[252,157489,30555],{"class":311},[252,157491,263],{"class":262},[252,157493,86348],{"class":311},[252,157495,45706],{"class":258},[252,157497,157498],{"class":311}," 0.2",[252,157500,269],{"class":262},[19,157502,157503,157504,157507],{},"金额计算如果要求严格，可以后续学习 ",[22,157505,157506],{},"decimal"," 模块。",[14,157509,157511],{"id":157510},"_214-本章练习","2.14 本章练习",[207,157513,157514,157517,157520,157523,157526],{},[210,157515,157516],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[210,157518,157519],{},"输入圆的半径，计算面积，保留两位小数。",[210,157521,157522],{},"输入工资和奖金，计算总收入。",[210,157524,157525],{},"输入摄氏温度，转换为华氏温度。",[210,157527,157528],{},"写一个 BMI 计算程序：",[244,157530,157533],{"className":157531,"code":157532,"language":5327,"meta":169},[5325],"BMI = 体重kg \u002F 身高m ** 2\n",[22,157534,157532],{"__ignoreMap":169},[5266,157536,157537],{},"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":169,"searchDepth":170,"depth":170,"links":157539},[157540,157541,157542,157543,157544,157545,157546,157552,157553,157554,157559,157560,157561,157562],{"id":155101,"depth":170,"text":155102},{"id":155210,"depth":170,"text":155211},{"id":155381,"depth":170,"text":155382},{"id":155458,"depth":170,"text":155459},{"id":50871,"depth":170,"text":50872},{"id":155764,"depth":170,"text":155765},{"id":155990,"depth":170,"text":155991,"children":157547},[157548,157549,157550,157551],{"id":155994,"depth":1318,"text":155995},{"id":156188,"depth":1318,"text":156189},{"id":156276,"depth":1318,"text":156277},{"id":156382,"depth":1318,"text":156383},{"id":156491,"depth":170,"text":156492},{"id":156649,"depth":170,"text":156650},{"id":156714,"depth":170,"text":156715,"children":157555},[157556,157557,157558],{"id":156718,"depth":1318,"text":156719},{"id":156863,"depth":1318,"text":156864},{"id":156966,"depth":1318,"text":156967},{"id":157097,"depth":170,"text":157098},{"id":157249,"depth":170,"text":157250},{"id":157452,"depth":170,"text":157453},{"id":157510,"depth":170,"text":157511},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155093,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157569,"title":157570,"body":157571,"description":178,"extension":179,"meta":159207,"navigation":181,"path":159208,"seo":159209,"stem":159210,"__hash__":159211},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157572,"toc":159188},[157573,157576,157580,157583,157598,157601,157629,157633,157683,157685,157701,157704,157730,157733,157737,157804,157807,157823,157827,157830,157948,157951,157958,158007,158013,158017,158020,158133,158136,158140,158144,158147,158197,158201,158204,158254,158258,158261,158299,158303,158306,158352,158355,158390,158394,158399,158402,158448,158450,158517,158521,158527,158638,158647,158651,158653,158664,158666,158832,158836,158838,158852,158854,159068,159072,159091,159108,159111,159157,159161,159185],[10,157574,157570],{"id":157575},"_3-判断语句",[14,157577,157579],{"id":157578},"_31-布尔值","3.1 布尔值",[19,157581,157582],{},"判断语句依赖布尔值：",[244,157584,157586],{"className":30518,"code":157585,"language":30520,"meta":169,"style":169},"True\nFalse\n",[22,157587,157588,157593],{"__ignoreMap":169},[252,157589,157590],{"class":254,"line":255},[252,157591,157592],{"class":311},"True\n",[252,157594,157595],{"class":254,"line":170},[252,157596,157597],{"class":311},"False\n",[19,157599,157600],{},"比较表达式会产生布尔值：",[244,157602,157604],{"className":30518,"code":157603,"language":30520,"meta":169,"style":169},"age = 18\nprint(age >= 18)  # True\n",[22,157605,157606,157614],{"__ignoreMap":169},[252,157607,157608,157610,157612],{"class":254,"line":255},[252,157609,146626],{"class":262},[252,157611,308],{"class":258},[252,157613,146631],{"class":311},[252,157615,157616,157618,157620,157622,157624,157626],{"class":254,"line":170},[252,157617,30555],{"class":311},[252,157619,155848],{"class":262},[252,157621,1849],{"class":258},[252,157623,156365],{"class":311},[252,157625,45948],{"class":262},[252,157627,157628],{"class":321},"# True\n",[14,157630,157632],{"id":157631},"_32-if基础语法","3.2 if基础语法",[244,157634,157636],{"className":30518,"code":157635,"language":30520,"meta":169,"style":169},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[22,157637,157638,157656,157660,157672],{"__ignoreMap":169},[252,157639,157640,157642,157644,157646,157648,157650,157652,157654],{"class":254,"line":255},[252,157641,146626],{"class":262},[252,157643,308],{"class":258},[252,157645,2521],{"class":311},[252,157647,263],{"class":262},[252,157649,53961],{"class":311},[252,157651,263],{"class":262},[252,157653,152474],{"class":367},[252,157655,30637],{"class":262},[252,157657,157658],{"class":254,"line":170},[252,157659,2539],{"emptyLinePlaceholder":181},[252,157661,157662,157664,157666,157668,157670],{"class":254,"line":1318},[252,157663,1670],{"class":258},[252,157665,15847],{"class":262},[252,157667,1849],{"class":258},[252,157669,156365],{"class":311},[252,157671,3878],{"class":262},[252,157673,157674,157676,157678,157681],{"class":254,"line":1333},[252,157675,31439],{"class":311},[252,157677,263],{"class":262},[252,157679,157680],{"class":367},"\"可以进入网吧\"",[252,157682,269],{"class":262},[19,157684,9165],{},[207,157686,157687,157692,157695,157698],{},[210,157688,157689,157691],{},[22,157690,1670],{}," 后面是条件表达式。",[210,157693,157694],{},"条件后面必须写冒号。",[210,157696,157697],{},"条件成立时执行缩进代码块。",[210,157699,157700],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,157702,157703],{},"错误示例：",[244,157705,157707],{"className":30518,"code":157706,"language":30520,"meta":169,"style":169},"if age >= 18\n    print(\"可以进入\")\n",[22,157708,157709,157719],{"__ignoreMap":169},[252,157710,157711,157713,157715,157717],{"class":254,"line":255},[252,157712,1670],{"class":258},[252,157714,15847],{"class":262},[252,157716,1849],{"class":258},[252,157718,146631],{"class":311},[252,157720,157721,157723,157725,157728],{"class":254,"line":170},[252,157722,31439],{"class":311},[252,157724,263],{"class":262},[252,157726,157727],{"class":367},"\"可以进入\"",[252,157729,269],{"class":262},[19,157731,157732],{},"缺少冒号。",[14,157734,157736],{"id":157735},"_33-if-else","3.3 if else",[244,157738,157740],{"className":30518,"code":157739,"language":30520,"meta":169,"style":169},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[22,157741,157742,157760,157764,157776,157787,157793],{"__ignoreMap":169},[252,157743,157744,157746,157748,157750,157752,157754,157756,157758],{"class":254,"line":255},[252,157745,146626],{"class":262},[252,157747,308],{"class":258},[252,157749,2521],{"class":311},[252,157751,263],{"class":262},[252,157753,53961],{"class":311},[252,157755,263],{"class":262},[252,157757,152474],{"class":367},[252,157759,30637],{"class":262},[252,157761,157762],{"class":254,"line":170},[252,157763,2539],{"emptyLinePlaceholder":181},[252,157765,157766,157768,157770,157772,157774],{"class":254,"line":1318},[252,157767,1670],{"class":258},[252,157769,15847],{"class":262},[252,157771,1849],{"class":258},[252,157773,156365],{"class":311},[252,157775,3878],{"class":262},[252,157777,157778,157780,157782,157785],{"class":254,"line":1333},[252,157779,31439],{"class":311},[252,157781,263],{"class":262},[252,157783,157784],{"class":367},"\"成年人\"",[252,157786,269],{"class":262},[252,157788,157789,157791],{"class":254,"line":1339},[252,157790,1840],{"class":258},[252,157792,3878],{"class":262},[252,157794,157795,157797,157799,157802],{"class":254,"line":1353},[252,157796,31439],{"class":311},[252,157798,263],{"class":262},[252,157800,157801],{"class":367},"\"未成年人\"",[252,157803,269],{"class":262},[19,157805,157806],{},"执行逻辑：",[207,157808,157809,157815,157820],{},[210,157810,157811,157812,157814],{},"条件成立，执行 ",[22,157813,1670],{}," 代码块。",[210,157816,157817,157818,157814],{},"条件不成立，执行 ",[22,157819,1840],{},[210,157821,157822],{},"两个代码块只会执行其中一个。",[14,157824,157826],{"id":157825},"_34-if-elif-else","3.4 if elif else",[19,157828,157829],{},"多条件判断：",[244,157831,157833],{"className":30518,"code":157832,"language":30520,"meta":169,"style":169},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[22,157834,157835,157853,157857,157871,157882,157896,157907,157920,157931,157937],{"__ignoreMap":169},[252,157836,157837,157839,157841,157843,157845,157847,157849,157851],{"class":254,"line":255},[252,157838,155438],{"class":262},[252,157840,308],{"class":258},[252,157842,2521],{"class":311},[252,157844,263],{"class":262},[252,157846,53961],{"class":311},[252,157848,263],{"class":262},[252,157850,152489],{"class":367},[252,157852,30637],{"class":262},[252,157854,157855],{"class":254,"line":170},[252,157856,2539],{"emptyLinePlaceholder":181},[252,157858,157859,157861,157864,157866,157869],{"class":254,"line":1318},[252,157860,1670],{"class":258},[252,157862,157863],{"class":262}," score ",[252,157865,1849],{"class":258},[252,157867,157868],{"class":311}," 90",[252,157870,3878],{"class":262},[252,157872,157873,157875,157877,157880],{"class":254,"line":1333},[252,157874,31439],{"class":311},[252,157876,263],{"class":262},[252,157878,157879],{"class":367},"\"优秀\"",[252,157881,269],{"class":262},[252,157883,157884,157887,157889,157891,157894],{"class":254,"line":1339},[252,157885,157886],{"class":258},"elif",[252,157888,157863],{"class":262},[252,157890,1849],{"class":258},[252,157892,157893],{"class":311}," 80",[252,157895,3878],{"class":262},[252,157897,157898,157900,157902,157905],{"class":254,"line":1353},[252,157899,31439],{"class":311},[252,157901,263],{"class":262},[252,157903,157904],{"class":367},"\"良好\"",[252,157906,269],{"class":262},[252,157908,157909,157911,157913,157915,157918],{"class":254,"line":1359},[252,157910,157886],{"class":258},[252,157912,157863],{"class":262},[252,157914,1849],{"class":258},[252,157916,157917],{"class":311}," 60",[252,157919,3878],{"class":262},[252,157921,157922,157924,157926,157929],{"class":254,"line":1450},[252,157923,31439],{"class":311},[252,157925,263],{"class":262},[252,157927,157928],{"class":367},"\"及格\"",[252,157930,269],{"class":262},[252,157932,157933,157935],{"class":254,"line":1456},[252,157934,1840],{"class":258},[252,157936,3878],{"class":262},[252,157938,157939,157941,157943,157946],{"class":254,"line":1468},[252,157940,31439],{"class":311},[252,157942,263],{"class":262},[252,157944,157945],{"class":367},"\"不及格\"",[252,157947,269],{"class":262},[19,157949,157950],{},"注意判断顺序很重要。",[19,157952,157953,157954,157957],{},"如果把 ",[22,157955,157956],{},"score >= 60"," 放在最前面：",[244,157959,157961],{"className":30518,"code":157960,"language":30520,"meta":169,"style":169},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[22,157962,157963,157975,157985,157997],{"__ignoreMap":169},[252,157964,157965,157967,157969,157971,157973],{"class":254,"line":255},[252,157966,1670],{"class":258},[252,157968,157863],{"class":262},[252,157970,1849],{"class":258},[252,157972,157917],{"class":311},[252,157974,3878],{"class":262},[252,157976,157977,157979,157981,157983],{"class":254,"line":170},[252,157978,31439],{"class":311},[252,157980,263],{"class":262},[252,157982,157928],{"class":367},[252,157984,269],{"class":262},[252,157986,157987,157989,157991,157993,157995],{"class":254,"line":1318},[252,157988,157886],{"class":258},[252,157990,157863],{"class":262},[252,157992,1849],{"class":258},[252,157994,157868],{"class":311},[252,157996,3878],{"class":262},[252,157998,157999,158001,158003,158005],{"class":254,"line":1333},[252,158000,31439],{"class":311},[252,158002,263],{"class":262},[252,158004,157879],{"class":367},[252,158006,269],{"class":262},[19,158008,158009,158010,158012],{},"成绩 95 会先满足 ",[22,158011,157956],{},"，后面的优秀分支就不会执行。",[14,158014,158016],{"id":158015},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158018,158019],{},"嵌套判断就是在一个判断内部再写判断。",[244,158021,158023],{"className":30518,"code":158022,"language":30520,"meta":169,"style":169},"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",[22,158024,158025,158043,158058,158062,158074,158088,158098,158105,158116,158122],{"__ignoreMap":169},[252,158026,158027,158029,158031,158033,158035,158037,158039,158041],{"class":254,"line":255},[252,158028,146626],{"class":262},[252,158030,308],{"class":258},[252,158032,2521],{"class":311},[252,158034,263],{"class":262},[252,158036,53961],{"class":311},[252,158038,263],{"class":262},[252,158040,152474],{"class":367},[252,158042,30637],{"class":262},[252,158044,158045,158047,158049,158051,158053,158056],{"class":254,"line":170},[252,158046,156441],{"class":262},[252,158048,308],{"class":258},[252,158050,60745],{"class":311},[252,158052,263],{"class":262},[252,158054,158055],{"class":367},"\"是否有票(y\u002Fn):\"",[252,158057,269],{"class":262},[252,158059,158060],{"class":254,"line":1318},[252,158061,2539],{"emptyLinePlaceholder":181},[252,158063,158064,158066,158068,158070,158072],{"class":254,"line":1333},[252,158065,1670],{"class":258},[252,158067,15847],{"class":262},[252,158069,1849],{"class":258},[252,158071,156365],{"class":311},[252,158073,3878],{"class":262},[252,158075,158076,158078,158081,158083,158086],{"class":254,"line":1339},[252,158077,3240],{"class":258},[252,158079,158080],{"class":262}," has_ticket ",[252,158082,3088],{"class":258},[252,158084,158085],{"class":367}," \"y\"",[252,158087,3878],{"class":262},[252,158089,158090,158092,158094,158096],{"class":254,"line":1353},[252,158091,32591],{"class":311},[252,158093,263],{"class":262},[252,158095,157727],{"class":367},[252,158097,269],{"class":262},[252,158099,158100,158103],{"class":254,"line":1359},[252,158101,158102],{"class":258},"    else",[252,158104,3878],{"class":262},[252,158106,158107,158109,158111,158114],{"class":254,"line":1450},[252,158108,32591],{"class":311},[252,158110,263],{"class":262},[252,158112,158113],{"class":367},"\"请先买票\"",[252,158115,269],{"class":262},[252,158117,158118,158120],{"class":254,"line":1456},[252,158119,1840],{"class":258},[252,158121,3878],{"class":262},[252,158123,158124,158126,158128,158131],{"class":254,"line":1468},[252,158125,31439],{"class":311},[252,158127,263],{"class":262},[252,158129,158130],{"class":367},"\"未成年人禁止进入\"",[252,158132,269],{"class":262},[19,158134,158135],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158137,158139],{"id":158138},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[224,158141,158143],{"id":158142},"_361-and","3.6.1 and",[19,158145,158146],{},"两个条件都成立才成立。",[244,158148,158150],{"className":30518,"code":158149,"language":30520,"meta":169,"style":169},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[22,158151,158152,158160,158168,158172,158187],{"__ignoreMap":169},[252,158153,158154,158156,158158],{"class":254,"line":255},[252,158155,146626],{"class":262},[252,158157,308],{"class":258},[252,158159,88203],{"class":311},[252,158161,158162,158164,158166],{"class":254,"line":170},[252,158163,156441],{"class":262},[252,158165,308],{"class":258},[252,158167,153679],{"class":311},[252,158169,158170],{"class":254,"line":1318},[252,158171,2539],{"emptyLinePlaceholder":181},[252,158173,158174,158176,158178,158180,158182,158184],{"class":254,"line":1333},[252,158175,1670],{"class":258},[252,158177,15847],{"class":262},[252,158179,1849],{"class":258},[252,158181,156365],{"class":311},[252,158183,120565],{"class":258},[252,158185,158186],{"class":262}," has_ticket:\n",[252,158188,158189,158191,158193,158195],{"class":254,"line":1339},[252,158190,31439],{"class":311},[252,158192,263],{"class":262},[252,158194,157727],{"class":367},[252,158196,269],{"class":262},[224,158198,158200],{"id":158199},"_362-or","3.6.2 or",[19,158202,158203],{},"只要一个条件成立就成立。",[244,158205,158207],{"className":30518,"code":158206,"language":30520,"meta":169,"style":169},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[22,158208,158209,158218,158227,158231,158243],{"__ignoreMap":169},[252,158210,158211,158214,158216],{"class":254,"line":255},[252,158212,158213],{"class":262},"is_vip ",[252,158215,308],{"class":258},[252,158217,125942],{"class":311},[252,158219,158220,158223,158225],{"class":254,"line":170},[252,158221,158222],{"class":262},"coupon ",[252,158224,308],{"class":258},[252,158226,153679],{"class":311},[252,158228,158229],{"class":254,"line":1318},[252,158230,2539],{"emptyLinePlaceholder":181},[252,158232,158233,158235,158238,158240],{"class":254,"line":1333},[252,158234,1670],{"class":258},[252,158236,158237],{"class":262}," is_vip ",[252,158239,115226],{"class":258},[252,158241,158242],{"class":262}," coupon:\n",[252,158244,158245,158247,158249,158252],{"class":254,"line":1339},[252,158246,31439],{"class":311},[252,158248,263],{"class":262},[252,158250,158251],{"class":367},"\"可以享受优惠\"",[252,158253,269],{"class":262},[224,158255,158257],{"id":158256},"_363-not","3.6.3 not",[19,158259,158260],{},"取反。",[244,158262,158264],{"className":30518,"code":158263,"language":30520,"meta":169,"style":169},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[22,158265,158266,158275,158279,158288],{"__ignoreMap":169},[252,158267,158268,158271,158273],{"class":254,"line":255},[252,158269,158270],{"class":262},"is_closed ",[252,158272,308],{"class":258},[252,158274,125942],{"class":311},[252,158276,158277],{"class":254,"line":170},[252,158278,2539],{"emptyLinePlaceholder":181},[252,158280,158281,158283,158285],{"class":254,"line":1318},[252,158282,1670],{"class":258},[252,158284,39070],{"class":258},[252,158286,158287],{"class":262}," is_closed:\n",[252,158289,158290,158292,158294,158297],{"class":254,"line":1333},[252,158291,31439],{"class":311},[252,158293,263],{"class":262},[252,158295,158296],{"class":367},"\"店铺营业中\"",[252,158298,269],{"class":262},[14,158300,158302],{"id":158301},"_37-链式比较","3.7 链式比较",[19,158304,158305],{},"Python 支持链式比较：",[244,158307,158309],{"className":30518,"code":158308,"language":30520,"meta":169,"style":169},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[22,158310,158311,158320,158324,158341],{"__ignoreMap":169},[252,158312,158313,158315,158317],{"class":254,"line":255},[252,158314,155438],{"class":262},[252,158316,308],{"class":258},[252,158318,158319],{"class":311}," 85\n",[252,158321,158322],{"class":254,"line":170},[252,158323,2539],{"emptyLinePlaceholder":181},[252,158325,158326,158328,158330,158333,158335,158337,158339],{"class":254,"line":1318},[252,158327,1670],{"class":258},[252,158329,4232],{"class":311},[252,158331,158332],{"class":258}," \u003C=",[252,158334,157863],{"class":262},[252,158336,1727],{"class":258},[252,158338,5894],{"class":311},[252,158340,3878],{"class":262},[252,158342,158343,158345,158347,158350],{"class":254,"line":1333},[252,158344,31439],{"class":311},[252,158346,263],{"class":262},[252,158348,158349],{"class":367},"\"成绩合法\"",[252,158351,269],{"class":262},[19,158353,158354],{},"等价于：",[244,158356,158358],{"className":30518,"code":158357,"language":30520,"meta":169,"style":169},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[22,158359,158360,158380],{"__ignoreMap":169},[252,158361,158362,158364,158366,158368,158370,158372,158374,158376,158378],{"class":254,"line":255},[252,158363,1670],{"class":258},[252,158365,157863],{"class":262},[252,158367,1849],{"class":258},[252,158369,4232],{"class":311},[252,158371,120565],{"class":258},[252,158373,157863],{"class":262},[252,158375,1727],{"class":258},[252,158377,5894],{"class":311},[252,158379,3878],{"class":262},[252,158381,158382,158384,158386,158388],{"class":254,"line":170},[252,158383,31439],{"class":311},[252,158385,263],{"class":262},[252,158387,158349],{"class":367},[252,158389,269],{"class":262},[14,158391,158393],{"id":158392},"_38-真值和假值","3.8 真值和假值",[19,158395,116603,158396,158398],{},[22,158397,1670],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158400,158401],{},"假值：",[244,158403,158405],{"className":30518,"code":158404,"language":30520,"meta":169,"style":169},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[22,158406,158407,158411,158416,158420,158424,158429,158433,158437,158442],{"__ignoreMap":169},[252,158408,158409],{"class":254,"line":255},[252,158410,157597],{"class":311},[252,158412,158413],{"class":254,"line":170},[252,158414,158415],{"class":311},"None\n",[252,158417,158418],{"class":254,"line":1318},[252,158419,3224],{"class":311},[252,158421,158422],{"class":254,"line":1333},[252,158423,32482],{"class":311},[252,158425,158426],{"class":254,"line":1339},[252,158427,158428],{"class":367},"\"\"\n",[252,158430,158431],{"class":254,"line":1353},[252,158432,32497],{"class":262},[252,158434,158435],{"class":254,"line":1359},[252,158436,2115],{"class":262},[252,158438,158439],{"class":254,"line":1450},[252,158440,158441],{"class":262},"{}\n",[252,158443,158444,158446],{"class":254,"line":1456},[252,158445,155370],{"class":311},[252,158447,2115],{"class":262},[19,158449,15275],{},[244,158451,158453],{"className":30518,"code":158452,"language":30520,"meta":169,"style":169},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[22,158454,158455,158469,158473,158480,158500,158506],{"__ignoreMap":169},[252,158456,158457,158459,158461,158463,158465,158467],{"class":254,"line":255},[252,158458,146616],{"class":262},[252,158460,308],{"class":258},[252,158462,60745],{"class":311},[252,158464,263],{"class":262},[252,158466,152459],{"class":367},[252,158468,269],{"class":262},[252,158470,158471],{"class":254,"line":170},[252,158472,2539],{"emptyLinePlaceholder":181},[252,158474,158475,158477],{"class":254,"line":1318},[252,158476,1670],{"class":258},[252,158478,158479],{"class":262}," name:\n",[252,158481,158482,158484,158486,158488,158490,158492,158494,158496,158498],{"class":254,"line":1333},[252,158483,31439],{"class":311},[252,158485,263],{"class":262},[252,158487,315],{"class":258},[252,158489,157134],{"class":367},[252,158491,1159],{"class":311},[252,158493,79949],{"class":262},[252,158495,1209],{"class":311},[252,158497,514],{"class":367},[252,158499,269],{"class":262},[252,158501,158502,158504],{"class":254,"line":1339},[252,158503,1840],{"class":258},[252,158505,3878],{"class":262},[252,158507,158508,158510,158512,158515],{"class":254,"line":1353},[252,158509,31439],{"class":311},[252,158511,263],{"class":262},[252,158513,158514],{"class":367},"\"姓名不能为空\"",[252,158516,269],{"class":262},[14,158518,158520],{"id":158519},"_39-match语句","3.9 match语句",[19,158522,158523,158524,158526],{},"Python 3.10 开始支持 ",[22,158525,71405],{},"。它适合处理固定选项。",[244,158528,158530],{"className":30518,"code":158529,"language":30520,"meta":169,"style":169},"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",[22,158531,158532,158548,158552,158559,158569,158580,158589,158600,158609,158620,158627],{"__ignoreMap":169},[252,158533,158534,158537,158539,158541,158543,158546],{"class":254,"line":255},[252,158535,158536],{"class":262},"command ",[252,158538,308],{"class":258},[252,158540,60745],{"class":311},[252,158542,263],{"class":262},[252,158544,158545],{"class":367},"\"请输入命令:\"",[252,158547,269],{"class":262},[252,158549,158550],{"class":254,"line":170},[252,158551,2539],{"emptyLinePlaceholder":181},[252,158553,158554,158556],{"class":254,"line":1318},[252,158555,71405],{"class":258},[252,158557,158558],{"class":262}," command:\n",[252,158560,158561,158564,158567],{"class":254,"line":1333},[252,158562,158563],{"class":258},"    case",[252,158565,158566],{"class":367}," \"start\"",[252,158568,3878],{"class":262},[252,158570,158571,158573,158575,158578],{"class":254,"line":1339},[252,158572,32591],{"class":311},[252,158574,263],{"class":262},[252,158576,158577],{"class":367},"\"启动\"",[252,158579,269],{"class":262},[252,158581,158582,158584,158587],{"class":254,"line":1353},[252,158583,158563],{"class":258},[252,158585,158586],{"class":367}," \"stop\"",[252,158588,3878],{"class":262},[252,158590,158591,158593,158595,158598],{"class":254,"line":1359},[252,158592,32591],{"class":311},[252,158594,263],{"class":262},[252,158596,158597],{"class":367},"\"停止\"",[252,158599,269],{"class":262},[252,158601,158602,158604,158607],{"class":254,"line":1450},[252,158603,158563],{"class":258},[252,158605,158606],{"class":367}," \"restart\"",[252,158608,3878],{"class":262},[252,158610,158611,158613,158615,158618],{"class":254,"line":1456},[252,158612,32591],{"class":311},[252,158614,263],{"class":262},[252,158616,158617],{"class":367},"\"重启\"",[252,158619,269],{"class":262},[252,158621,158622,158624],{"class":254,"line":1468},[252,158623,158563],{"class":258},[252,158625,158626],{"class":262}," _:\n",[252,158628,158629,158631,158633,158636],{"class":254,"line":1751},[252,158630,32591],{"class":311},[252,158632,263],{"class":262},[252,158634,158635],{"class":367},"\"未知命令\"",[252,158637,269],{"class":262},[19,158639,158640,158641,158643,158644,158646],{},"入门阶段掌握 ",[22,158642,154738],{}," 更重要，",[22,158645,71405],{}," 可以作为补充。",[14,158648,158650],{"id":158649},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158652,123428],{},[207,158654,158655,158658,158661],{},[210,158656,158657],{},"输入成绩。",[210,158659,158660],{},"判断成绩是否合法。",[210,158662,158663],{},"输出等级。",[19,158665,10175],{},[244,158667,158669],{"className":30518,"code":158668,"language":30520,"meta":169,"style":169},"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",[22,158670,158671,158689,158693,158711,158722,158734,158745,158757,158768,158781,158792,158804,158815,158821],{"__ignoreMap":169},[252,158672,158673,158675,158677,158679,158681,158683,158685,158687],{"class":254,"line":255},[252,158674,155438],{"class":262},[252,158676,308],{"class":258},[252,158678,109933],{"class":311},[252,158680,263],{"class":262},[252,158682,53961],{"class":311},[252,158684,263],{"class":262},[252,158686,152489],{"class":367},[252,158688,30637],{"class":262},[252,158690,158691],{"class":254,"line":170},[252,158692,2539],{"emptyLinePlaceholder":181},[252,158694,158695,158697,158699,158701,158703,158705,158707,158709],{"class":254,"line":1318},[252,158696,1670],{"class":258},[252,158698,39070],{"class":258},[252,158700,4232],{"class":311},[252,158702,158332],{"class":258},[252,158704,157863],{"class":262},[252,158706,1727],{"class":258},[252,158708,5894],{"class":311},[252,158710,3878],{"class":262},[252,158712,158713,158715,158717,158720],{"class":254,"line":1333},[252,158714,31439],{"class":311},[252,158716,263],{"class":262},[252,158718,158719],{"class":367},"\"成绩不合法\"",[252,158721,269],{"class":262},[252,158723,158724,158726,158728,158730,158732],{"class":254,"line":1339},[252,158725,157886],{"class":258},[252,158727,157863],{"class":262},[252,158729,1849],{"class":258},[252,158731,157868],{"class":311},[252,158733,3878],{"class":262},[252,158735,158736,158738,158740,158743],{"class":254,"line":1353},[252,158737,31439],{"class":311},[252,158739,263],{"class":262},[252,158741,158742],{"class":367},"\"等级:A\"",[252,158744,269],{"class":262},[252,158746,158747,158749,158751,158753,158755],{"class":254,"line":1359},[252,158748,157886],{"class":258},[252,158750,157863],{"class":262},[252,158752,1849],{"class":258},[252,158754,157893],{"class":311},[252,158756,3878],{"class":262},[252,158758,158759,158761,158763,158766],{"class":254,"line":1450},[252,158760,31439],{"class":311},[252,158762,263],{"class":262},[252,158764,158765],{"class":367},"\"等级:B\"",[252,158767,269],{"class":262},[252,158769,158770,158772,158774,158776,158779],{"class":254,"line":1456},[252,158771,157886],{"class":258},[252,158773,157863],{"class":262},[252,158775,1849],{"class":258},[252,158777,158778],{"class":311}," 70",[252,158780,3878],{"class":262},[252,158782,158783,158785,158787,158790],{"class":254,"line":1468},[252,158784,31439],{"class":311},[252,158786,263],{"class":262},[252,158788,158789],{"class":367},"\"等级:C\"",[252,158791,269],{"class":262},[252,158793,158794,158796,158798,158800,158802],{"class":254,"line":1751},[252,158795,157886],{"class":258},[252,158797,157863],{"class":262},[252,158799,1849],{"class":258},[252,158801,157917],{"class":311},[252,158803,3878],{"class":262},[252,158805,158806,158808,158810,158813],{"class":254,"line":1756},[252,158807,31439],{"class":311},[252,158809,263],{"class":262},[252,158811,158812],{"class":367},"\"等级:D\"",[252,158814,269],{"class":262},[252,158816,158817,158819],{"class":254,"line":1762},[252,158818,1840],{"class":258},[252,158820,3878],{"class":262},[252,158822,158823,158825,158827,158830],{"class":254,"line":1767},[252,158824,31439],{"class":311},[252,158826,263],{"class":262},[252,158828,158829],{"class":367},"\"等级:E\"",[252,158831,269],{"class":262},[14,158833,158835],{"id":158834},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,158837,123428],{},[207,158839,158840,158843,158846,158849],{},[210,158841,158842],{},"输入消费金额。",[210,158844,158845],{},"输入会员等级，普通、银卡、金卡。",[210,158847,158848],{},"普通不打折，银卡 9 折，金卡 8 折。",[210,158850,158851],{},"满 500 再减 50。",[19,158853,10175],{},[244,158855,158857],{"className":30518,"code":158856,"language":30520,"meta":169,"style":169},"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",[22,158858,158859,158879,158895,158899,158907,158911,158925,158935,158948,158957,158970,158978,158984,158995,158999,159013,159017,159031,159041,159045],{"__ignoreMap":169},[252,158860,158861,158864,158866,158868,158870,158872,158874,158877],{"class":254,"line":255},[252,158862,158863],{"class":262},"amount ",[252,158865,308],{"class":258},[252,158867,109933],{"class":311},[252,158869,263],{"class":262},[252,158871,53961],{"class":311},[252,158873,263],{"class":262},[252,158875,158876],{"class":367},"\"请输入消费金额:\"",[252,158878,30637],{"class":262},[252,158880,158881,158884,158886,158888,158890,158893],{"class":254,"line":170},[252,158882,158883],{"class":262},"level ",[252,158885,308],{"class":258},[252,158887,60745],{"class":311},[252,158889,263],{"class":262},[252,158891,158892],{"class":367},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[252,158894,269],{"class":262},[252,158896,158897],{"class":254,"line":1318},[252,158898,2539],{"emptyLinePlaceholder":181},[252,158900,158901,158903,158905],{"class":254,"line":1333},[252,158902,157316],{"class":262},[252,158904,308],{"class":258},[252,158906,55839],{"class":311},[252,158908,158909],{"class":254,"line":1339},[252,158910,2539],{"emptyLinePlaceholder":181},[252,158912,158913,158915,158918,158920,158923],{"class":254,"line":1353},[252,158914,1670],{"class":258},[252,158916,158917],{"class":262}," level ",[252,158919,3088],{"class":258},[252,158921,158922],{"class":367}," \"银卡\"",[252,158924,3878],{"class":262},[252,158926,158927,158930,158932],{"class":254,"line":1359},[252,158928,158929],{"class":262},"    discount ",[252,158931,308],{"class":258},[252,158933,158934],{"class":311}," 0.9\n",[252,158936,158937,158939,158941,158943,158946],{"class":254,"line":1450},[252,158938,157886],{"class":258},[252,158940,158917],{"class":262},[252,158942,3088],{"class":258},[252,158944,158945],{"class":367}," \"金卡\"",[252,158947,3878],{"class":262},[252,158949,158950,158952,158954],{"class":254,"line":1456},[252,158951,158929],{"class":262},[252,158953,308],{"class":258},[252,158955,158956],{"class":311}," 0.8\n",[252,158958,158959,158961,158963,158965,158968],{"class":254,"line":1468},[252,158960,157886],{"class":258},[252,158962,158917],{"class":262},[252,158964,3088],{"class":258},[252,158966,158967],{"class":367}," \"普通\"",[252,158969,3878],{"class":262},[252,158971,158972,158974,158976],{"class":254,"line":1751},[252,158973,158929],{"class":262},[252,158975,308],{"class":258},[252,158977,55839],{"class":311},[252,158979,158980,158982],{"class":254,"line":1756},[252,158981,1840],{"class":258},[252,158983,3878],{"class":262},[252,158985,158986,158988,158990,158993],{"class":254,"line":1762},[252,158987,31439],{"class":311},[252,158989,263],{"class":262},[252,158991,158992],{"class":367},"\"会员等级输入错误，按普通会员计算\"",[252,158994,269],{"class":262},[252,158996,158997],{"class":254,"line":1767},[252,158998,2539],{"emptyLinePlaceholder":181},[252,159000,159001,159004,159006,159009,159011],{"class":254,"line":1781},[252,159002,159003],{"class":262},"pay ",[252,159005,308],{"class":258},[252,159007,159008],{"class":262}," amount ",[252,159010,718],{"class":258},[252,159012,157355],{"class":262},[252,159014,159015],{"class":254,"line":1786},[252,159016,2539],{"emptyLinePlaceholder":181},[252,159018,159019,159021,159024,159026,159029],{"class":254,"line":1792},[252,159020,1670],{"class":258},[252,159022,159023],{"class":262}," pay ",[252,159025,1849],{"class":258},[252,159027,159028],{"class":311}," 500",[252,159030,3878],{"class":262},[252,159032,159033,159036,159038],{"class":254,"line":1813},[252,159034,159035],{"class":262},"    pay ",[252,159037,150332],{"class":258},[252,159039,159040],{"class":311}," 50\n",[252,159042,159043],{"class":254,"line":1818},[252,159044,2539],{"emptyLinePlaceholder":181},[252,159046,159047,159049,159051,159053,159055,159057,159060,159062,159064,159066],{"class":254,"line":1832},[252,159048,30555],{"class":311},[252,159050,263],{"class":262},[252,159052,315],{"class":258},[252,159054,157436],{"class":367},[252,159056,1159],{"class":311},[252,159058,159059],{"class":262},"pay",[252,159061,157239],{"class":258},[252,159063,1209],{"class":311},[252,159065,157092],{"class":367},[252,159067,269],{"class":262},[14,159069,159071],{"id":159070},"_312-易错点","3.12 易错点",[207,159073,159074,159077,159080,159083,159088],{},[210,159075,159076],{},"冒号不能漏。",[210,159078,159079],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[210,159081,159082],{},"多分支判断要注意顺序。",[210,159084,159085,159086,28525],{},"判断相等用 ",[22,159087,3088],{},[210,159089,159090],{},"字符串比较区分大小写：",[244,159092,159094],{"className":30518,"code":159093,"language":30520,"meta":169,"style":169},"\"Y\" == \"y\"  # False\n",[22,159095,159096],{"__ignoreMap":169},[252,159097,159098,159101,159103,159105],{"class":254,"line":255},[252,159099,159100],{"class":367},"\"Y\"",[252,159102,101696],{"class":258},[252,159104,158085],{"class":367},[252,159106,159107],{"class":321},"  # False\n",[19,159109,159110],{},"可转换后再判断：",[244,159112,159114],{"className":30518,"code":159113,"language":30520,"meta":169,"style":169},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[22,159115,159116,159133,159146],{"__ignoreMap":169},[252,159117,159118,159121,159123,159125,159127,159130],{"class":254,"line":255},[252,159119,159120],{"class":262},"answer ",[252,159122,308],{"class":258},[252,159124,60745],{"class":311},[252,159126,263],{"class":262},[252,159128,159129],{"class":367},"\"是否继续(y\u002Fn):\"",[252,159131,159132],{"class":262},").lower()\n",[252,159134,159135,159137,159140,159142,159144],{"class":254,"line":170},[252,159136,1670],{"class":258},[252,159138,159139],{"class":262}," answer ",[252,159141,3088],{"class":258},[252,159143,158085],{"class":367},[252,159145,3878],{"class":262},[252,159147,159148,159150,159152,159155],{"class":254,"line":1318},[252,159149,31439],{"class":311},[252,159151,263],{"class":262},[252,159153,159154],{"class":367},"\"继续\"",[252,159156,269],{"class":262},[14,159158,159160],{"id":159159},"_313-本章练习","3.13 本章练习",[207,159162,159163,159166,159169,159172,159182],{},[210,159164,159165],{},"输入年龄，判断是否成年。",[210,159167,159168],{},"输入年份，判断是否为闰年。",[210,159170,159171],{},"输入三个数字，输出最大值。",[210,159173,159174,159175,159178,159179,159181],{},"写登录判断：用户名是 ",[22,159176,159177],{},"admin"," 且密码是 ",[22,159180,15224],{}," 才登录成功。",[210,159183,159184],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5266,159186,159187],{},"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":169,"searchDepth":170,"depth":170,"links":159189},[159190,159191,159192,159193,159194,159195,159200,159201,159202,159203,159204,159205,159206],{"id":157578,"depth":170,"text":157579},{"id":157631,"depth":170,"text":157632},{"id":157735,"depth":170,"text":157736},{"id":157825,"depth":170,"text":157826},{"id":158015,"depth":170,"text":158016},{"id":158138,"depth":170,"text":158139,"children":159196},[159197,159198,159199],{"id":158142,"depth":1318,"text":158143},{"id":158199,"depth":1318,"text":158200},{"id":158256,"depth":1318,"text":158257},{"id":158301,"depth":170,"text":158302},{"id":158392,"depth":170,"text":158393},{"id":158519,"depth":170,"text":158520},{"id":158649,"depth":170,"text":158650},{"id":158834,"depth":170,"text":158835},{"id":159070,"depth":170,"text":159071},{"id":159159,"depth":170,"text":159160},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157570,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159213,"title":159214,"body":159215,"description":178,"extension":179,"meta":160984,"navigation":181,"path":160985,"seo":160986,"stem":160987,"__hash__":160988},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159216,"toc":160964},[159217,159220,159224,159230,159233,159250,159254,159256,159273,159275,159320,159322,159339,159343,159346,159412,159415,159433,159437,159598,159607,159611,159615,159620,159667,159669,159675,159679,159684,159731,159733,159739,159743,159748,159784,159787,159834,159838,159844,159902,159907,159938,159943,159947,160002,160005,160077,160080,160139,160143,160146,160221,160224,160228,160334,160337,160363,160367,160379,160448,160451,160543,160547,160549,160560,160562,160692,160696,160898,160906,160910,160940,160944,160961],[10,159218,159214],{"id":159219},"_4-循环语句",[14,159221,159223],{"id":159222},"_41-为什么需要循环","4.1 为什么需要循环",[19,159225,159226,159227,159229],{},"如果要输出 1 到 100，不应该写 100 行 ",[22,159228,146552],{},"，而应该用循环。",[19,159231,159232],{},"循环适合处理重复任务：",[207,159234,159235,159238,159241,159244,159247],{},[210,159236,159237],{},"重复输出。",[210,159239,159240],{},"重复输入。",[210,159242,159243],{},"遍历数据。",[210,159245,159246],{},"持续执行菜单。",[210,159248,159249],{},"批量处理文件或数据。",[14,159251,159253],{"id":159252},"_42-while循环","4.2 while循环",[19,159255,5321],{},[244,159257,159259],{"className":30518,"code":159258,"language":30520,"meta":169,"style":169},"while 条件:\n    循环体\n",[22,159260,159261,159268],{"__ignoreMap":169},[252,159262,159263,159265],{"class":254,"line":255},[252,159264,108799],{"class":258},[252,159266,159267],{"class":262}," 条件:\n",[252,159269,159270],{"class":254,"line":170},[252,159271,159272],{"class":262},"    循环体\n",[19,159274,15275],{},[244,159276,159278],{"className":30518,"code":159277,"language":30520,"meta":169,"style":169},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[22,159279,159280,159288,159292,159304,159311],{"__ignoreMap":169},[252,159281,159282,159284,159286],{"class":254,"line":255},[252,159283,100286],{"class":262},[252,159285,308],{"class":258},[252,159287,55839],{"class":311},[252,159289,159290],{"class":254,"line":170},[252,159291,2539],{"emptyLinePlaceholder":181},[252,159293,159294,159296,159298,159300,159302],{"class":254,"line":1318},[252,159295,108799],{"class":258},[252,159297,9578],{"class":262},[252,159299,1727],{"class":258},[252,159301,2287],{"class":311},[252,159303,3878],{"class":262},[252,159305,159306,159308],{"class":254,"line":1333},[252,159307,31439],{"class":311},[252,159309,159310],{"class":262},"(i)\n",[252,159312,159313,159316,159318],{"class":254,"line":1339},[252,159314,159315],{"class":262},"    i ",[252,159317,9617],{"class":258},[252,159319,55839],{"class":311},[19,159321,81068],{},[207,159323,159324,159330,159333,159336],{},[210,159325,159326,159327,28525],{},"判断条件 ",[22,159328,159329],{},"i \u003C= 5",[210,159331,159332],{},"条件成立，执行循环体。",[210,159334,159335],{},"执行完后回到条件判断。",[210,159337,159338],{},"条件不成立，退出循环。",[14,159340,159342],{"id":159341},"_43-while累加","4.3 while累加",[19,159344,159345],{},"计算 1 到 100 的和：",[244,159347,159349],{"className":30518,"code":159348,"language":30520,"meta":169,"style":169},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[22,159350,159351,159359,159367,159371,159383,159393,159401,159405],{"__ignoreMap":169},[252,159352,159353,159355,159357],{"class":254,"line":255},[252,159354,100286],{"class":262},[252,159356,308],{"class":258},[252,159358,55839],{"class":311},[252,159360,159361,159363,159365],{"class":254,"line":170},[252,159362,157340],{"class":262},[252,159364,308],{"class":258},[252,159366,47473],{"class":311},[252,159368,159369],{"class":254,"line":1318},[252,159370,2539],{"emptyLinePlaceholder":181},[252,159372,159373,159375,159377,159379,159381],{"class":254,"line":1333},[252,159374,108799],{"class":258},[252,159376,9578],{"class":262},[252,159378,1727],{"class":258},[252,159380,5894],{"class":311},[252,159382,3878],{"class":262},[252,159384,159385,159388,159390],{"class":254,"line":1339},[252,159386,159387],{"class":262},"    total ",[252,159389,9617],{"class":258},[252,159391,159392],{"class":262}," i\n",[252,159394,159395,159397,159399],{"class":254,"line":1353},[252,159396,159315],{"class":262},[252,159398,9617],{"class":258},[252,159400,55839],{"class":311},[252,159402,159403],{"class":254,"line":1359},[252,159404,2539],{"emptyLinePlaceholder":181},[252,159406,159407,159409],{"class":254,"line":1450},[252,159408,30555],{"class":311},[252,159410,159411],{"class":262},"(total)\n",[19,159413,159414],{},"核心思想：",[207,159416,159417,159422,159427],{},[210,159418,159419,159421],{},[22,159420,704],{}," 控制循环次数。",[210,159423,159424,159426],{},[22,159425,157441],{}," 保存累加结果。",[210,159428,159429,159430,159432],{},"每轮循环都要更新 ",[22,159431,704],{},"，否则可能死循环。",[14,159434,159436],{"id":159435},"_44-while猜数字","4.4 while猜数字",[244,159438,159440],{"className":30518,"code":159439,"language":30520,"meta":169,"style":169},"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",[22,159441,159442,159448,159452,159469,159477,159481,159489,159509,159518,159522,159534,159545,159555,159566,159572,159594],{"__ignoreMap":169},[252,159443,159444,159446],{"class":254,"line":255},[252,159445,30532],{"class":258},[252,159447,45468],{"class":262},[252,159449,159450],{"class":254,"line":170},[252,159451,2539],{"emptyLinePlaceholder":181},[252,159453,159454,159456,159458,159461,159463,159465,159467],{"class":254,"line":1318},[252,159455,159120],{"class":262},[252,159457,308],{"class":258},[252,159459,159460],{"class":262}," random.randint(",[252,159462,480],{"class":311},[252,159464,12575],{"class":262},[252,159466,574],{"class":311},[252,159468,269],{"class":262},[252,159470,159471,159473,159475],{"class":254,"line":1333},[252,159472,146771],{"class":262},[252,159474,308],{"class":258},[252,159476,47473],{"class":311},[252,159478,159479],{"class":254,"line":1339},[252,159480,2539],{"emptyLinePlaceholder":181},[252,159482,159483,159485,159487],{"class":254,"line":1353},[252,159484,108799],{"class":258},[252,159486,95430],{"class":311},[252,159488,3878],{"class":262},[252,159490,159491,159494,159496,159498,159500,159502,159504,159507],{"class":254,"line":1359},[252,159492,159493],{"class":262},"    guess ",[252,159495,308],{"class":258},[252,159497,2521],{"class":311},[252,159499,263],{"class":262},[252,159501,53961],{"class":311},[252,159503,263],{"class":262},[252,159505,159506],{"class":367},"\"请输入1到100之间的数字:\"",[252,159508,30637],{"class":262},[252,159510,159511,159514,159516],{"class":254,"line":1450},[252,159512,159513],{"class":262},"    count ",[252,159515,9617],{"class":258},[252,159517,55839],{"class":311},[252,159519,159520],{"class":254,"line":1456},[252,159521,2539],{"emptyLinePlaceholder":181},[252,159523,159524,159526,159529,159531],{"class":254,"line":1468},[252,159525,3240],{"class":258},[252,159527,159528],{"class":262}," guess ",[252,159530,1223],{"class":258},[252,159532,159533],{"class":262}," answer:\n",[252,159535,159536,159538,159540,159543],{"class":254,"line":1751},[252,159537,32591],{"class":311},[252,159539,263],{"class":262},[252,159541,159542],{"class":367},"\"猜大了\"",[252,159544,269],{"class":262},[252,159546,159547,159549,159551,159553],{"class":254,"line":1756},[252,159548,39433],{"class":258},[252,159550,159528],{"class":262},[252,159552,1173],{"class":258},[252,159554,159533],{"class":262},[252,159556,159557,159559,159561,159564],{"class":254,"line":1762},[252,159558,32591],{"class":311},[252,159560,263],{"class":262},[252,159562,159563],{"class":367},"\"猜小了\"",[252,159565,269],{"class":262},[252,159567,159568,159570],{"class":254,"line":1767},[252,159569,158102],{"class":258},[252,159571,3878],{"class":262},[252,159573,159574,159576,159578,159580,159583,159585,159587,159589,159592],{"class":254,"line":1781},[252,159575,32591],{"class":311},[252,159577,263],{"class":262},[252,159579,315],{"class":258},[252,159581,159582],{"class":367},"\"猜对了，一共猜了",[252,159584,1159],{"class":311},[252,159586,84572],{"class":262},[252,159588,1209],{"class":311},[252,159590,159591],{"class":367},"次\"",[252,159593,269],{"class":262},[252,159595,159596],{"class":254,"line":1786},[252,159597,31767],{"class":258},[19,159599,159600,159603,159604,159606],{},[22,159601,159602],{},"while True"," 表示无限循环，通常配合 ",[22,159605,2192],{}," 使用。",[14,159608,159610],{"id":159609},"_45-break和continue","4.5 break和continue",[224,159612,159614],{"id":159613},"_451-break","4.5.1 break",[19,159616,159617,159619],{},[22,159618,2192],{}," 直接结束整个循环。",[244,159621,159623],{"className":30518,"code":159622,"language":30520,"meta":169,"style":169},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[22,159624,159625,159645,159657,159661],{"__ignoreMap":169},[252,159626,159627,159629,159631,159633,159635,159637,159639,159641,159643],{"class":254,"line":255},[252,159628,3164],{"class":258},[252,159630,9578],{"class":262},[252,159632,26183],{"class":258},[252,159634,32583],{"class":311},[252,159636,263],{"class":262},[252,159638,480],{"class":311},[252,159640,12575],{"class":262},[252,159642,607],{"class":311},[252,159644,30926],{"class":262},[252,159646,159647,159649,159651,159653,159655],{"class":254,"line":170},[252,159648,3240],{"class":258},[252,159650,9578],{"class":262},[252,159652,3088],{"class":258},[252,159654,78209],{"class":311},[252,159656,3878],{"class":262},[252,159658,159659],{"class":254,"line":1318},[252,159660,31767],{"class":258},[252,159662,159663,159665],{"class":254,"line":1333},[252,159664,31439],{"class":311},[252,159666,159310],{"class":262},[19,159668,146537],{},[244,159670,159673],{"className":159671,"code":159672,"language":5327,"meta":169},[5325],"1\n2\n",[22,159674,159672],{"__ignoreMap":169},[224,159676,159678],{"id":159677},"_452-continue","4.5.2 continue",[19,159680,159681,159683],{},[22,159682,154752],{}," 跳过本轮剩余代码，进入下一轮循环。",[244,159685,159687],{"className":30518,"code":159686,"language":30520,"meta":169,"style":169},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[22,159688,159689,159709,159721,159725],{"__ignoreMap":169},[252,159690,159691,159693,159695,159697,159699,159701,159703,159705,159707],{"class":254,"line":255},[252,159692,3164],{"class":258},[252,159694,9578],{"class":262},[252,159696,26183],{"class":258},[252,159698,32583],{"class":311},[252,159700,263],{"class":262},[252,159702,480],{"class":311},[252,159704,12575],{"class":262},[252,159706,607],{"class":311},[252,159708,30926],{"class":262},[252,159710,159711,159713,159715,159717,159719],{"class":254,"line":170},[252,159712,3240],{"class":258},[252,159714,9578],{"class":262},[252,159716,3088],{"class":258},[252,159718,78209],{"class":311},[252,159720,3878],{"class":262},[252,159722,159723],{"class":254,"line":1318},[252,159724,148592],{"class":258},[252,159726,159727,159729],{"class":254,"line":1333},[252,159728,31439],{"class":311},[252,159730,159310],{"class":262},[19,159732,146537],{},[244,159734,159737],{"className":159735,"code":159736,"language":5327,"meta":169},[5325],"1\n2\n4\n5\n",[22,159738,159736],{"__ignoreMap":169},[14,159740,159742],{"id":159741},"_46-for循环","4.6 for循环",[19,159744,159745,159747],{},[22,159746,3164],{}," 常用于遍历序列。",[244,159749,159751],{"className":30518,"code":159750,"language":30520,"meta":169,"style":169},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[22,159752,159753,159762,159766,159777],{"__ignoreMap":169},[252,159754,159755,159757,159759],{"class":254,"line":255},[252,159756,146616],{"class":262},[252,159758,308],{"class":258},[252,159760,159761],{"class":367}," \"python\"\n",[252,159763,159764],{"class":254,"line":170},[252,159765,2539],{"emptyLinePlaceholder":181},[252,159767,159768,159770,159773,159775],{"class":254,"line":1318},[252,159769,3164],{"class":258},[252,159771,159772],{"class":262}," ch ",[252,159774,26183],{"class":258},[252,159776,158479],{"class":262},[252,159778,159779,159781],{"class":254,"line":1333},[252,159780,31439],{"class":311},[252,159782,159783],{"class":262},"(ch)\n",[19,159785,159786],{},"遍历列表：",[244,159788,159790],{"className":30518,"code":159789,"language":30520,"meta":169,"style":169},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[22,159791,159792,159814,159818,159828],{"__ignoreMap":169},[252,159793,159794,159797,159799,159801,159803,159805,159807,159809,159812],{"class":254,"line":255},[252,159795,159796],{"class":262},"students ",[252,159798,308],{"class":258},[252,159800,52366],{"class":262},[252,159802,149968],{"class":367},[252,159804,12575],{"class":262},[252,159806,151016],{"class":367},[252,159808,12575],{"class":262},[252,159810,159811],{"class":367},"\"小刚\"",[252,159813,33386],{"class":262},[252,159815,159816],{"class":254,"line":170},[252,159817,2539],{"emptyLinePlaceholder":181},[252,159819,159820,159822,159824,159826],{"class":254,"line":1318},[252,159821,3164],{"class":258},[252,159823,152217],{"class":262},[252,159825,26183],{"class":258},[252,159827,152222],{"class":262},[252,159829,159830,159832],{"class":254,"line":1333},[252,159831,31439],{"class":311},[252,159833,150122],{"class":262},[14,159835,159837],{"id":159836},"_47-range函数","4.7 range函数",[19,159839,159840,159843],{},[22,159841,159842],{},"range()"," 用于生成整数序列。",[244,159845,159847],{"className":30518,"code":159846,"language":30520,"meta":169,"style":169},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[22,159848,159849,159863,159881],{"__ignoreMap":169},[252,159850,159851,159853,159855,159857,159860],{"class":254,"line":255},[252,159852,33556],{"class":311},[252,159854,263],{"class":262},[252,159856,582],{"class":311},[252,159858,159859],{"class":262},")          ",[252,159861,159862],{"class":321},"# 0,1,2,3,4\n",[252,159864,159865,159867,159869,159871,159873,159875,159878],{"class":254,"line":170},[252,159866,33556],{"class":311},[252,159868,263],{"class":262},[252,159870,480],{"class":311},[252,159872,12575],{"class":262},[252,159874,582],{"class":311},[252,159876,159877],{"class":262},")       ",[252,159879,159880],{"class":321},"# 1,2,3,4\n",[252,159882,159883,159885,159887,159889,159891,159893,159895,159897,159899],{"class":254,"line":1318},[252,159884,33556],{"class":311},[252,159886,263],{"class":262},[252,159888,480],{"class":311},[252,159890,12575],{"class":262},[252,159892,709],{"class":311},[252,159894,12575],{"class":262},[252,159896,340],{"class":311},[252,159898,155741],{"class":262},[252,159900,159901],{"class":321},"# 1,3,5,7,9\n",[19,159903,159904,159905,24758],{},"配合 ",[22,159906,3164],{},[244,159908,159910],{"className":30518,"code":159909,"language":30520,"meta":169,"style":169},"for i in range(1, 6):\n    print(i)\n",[22,159911,159912,159932],{"__ignoreMap":169},[252,159913,159914,159916,159918,159920,159922,159924,159926,159928,159930],{"class":254,"line":255},[252,159915,3164],{"class":258},[252,159917,9578],{"class":262},[252,159919,26183],{"class":258},[252,159921,32583],{"class":311},[252,159923,263],{"class":262},[252,159925,480],{"class":311},[252,159927,12575],{"class":262},[252,159929,607],{"class":311},[252,159931,30926],{"class":262},[252,159933,159934,159936],{"class":254,"line":170},[252,159935,31439],{"class":311},[252,159937,159310],{"class":262},[19,159939,9165,159940,159942],{},[22,159941,33556],{}," 的结束值不包含在内。",[14,159944,159946],{"id":159945},"_48-for循环求和","4.8 for循环求和",[244,159948,159950],{"className":30518,"code":159949,"language":30520,"meta":169,"style":169},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[22,159951,159952,159960,159964,159984,159992,159996],{"__ignoreMap":169},[252,159953,159954,159956,159958],{"class":254,"line":255},[252,159955,157340],{"class":262},[252,159957,308],{"class":258},[252,159959,47473],{"class":311},[252,159961,159962],{"class":254,"line":170},[252,159963,2539],{"emptyLinePlaceholder":181},[252,159965,159966,159968,159970,159972,159974,159976,159978,159980,159982],{"class":254,"line":1318},[252,159967,3164],{"class":258},[252,159969,9578],{"class":262},[252,159971,26183],{"class":258},[252,159973,32583],{"class":311},[252,159975,263],{"class":262},[252,159977,480],{"class":311},[252,159979,12575],{"class":262},[252,159981,600],{"class":311},[252,159983,30926],{"class":262},[252,159985,159986,159988,159990],{"class":254,"line":1333},[252,159987,159387],{"class":262},[252,159989,9617],{"class":258},[252,159991,159392],{"class":262},[252,159993,159994],{"class":254,"line":1339},[252,159995,2539],{"emptyLinePlaceholder":181},[252,159997,159998,160000],{"class":254,"line":1353},[252,159999,30555],{"class":311},[252,160001,159411],{"class":262},[19,160003,160004],{},"求偶数和：",[244,160006,160008],{"className":30518,"code":160007,"language":30520,"meta":169,"style":169},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[22,160009,160010,160018,160022,160042,160058,160067,160071],{"__ignoreMap":169},[252,160011,160012,160014,160016],{"class":254,"line":255},[252,160013,157340],{"class":262},[252,160015,308],{"class":258},[252,160017,47473],{"class":311},[252,160019,160020],{"class":254,"line":170},[252,160021,2539],{"emptyLinePlaceholder":181},[252,160023,160024,160026,160028,160030,160032,160034,160036,160038,160040],{"class":254,"line":1318},[252,160025,3164],{"class":258},[252,160027,9578],{"class":262},[252,160029,26183],{"class":258},[252,160031,32583],{"class":311},[252,160033,263],{"class":262},[252,160035,480],{"class":311},[252,160037,12575],{"class":262},[252,160039,600],{"class":311},[252,160041,30926],{"class":262},[252,160043,160044,160046,160048,160050,160052,160054,160056],{"class":254,"line":1333},[252,160045,3240],{"class":258},[252,160047,9578],{"class":262},[252,160049,591],{"class":258},[252,160051,14895],{"class":311},[252,160053,101696],{"class":258},[252,160055,4232],{"class":311},[252,160057,3878],{"class":262},[252,160059,160060,160063,160065],{"class":254,"line":1339},[252,160061,160062],{"class":262},"        total ",[252,160064,9617],{"class":258},[252,160066,159392],{"class":262},[252,160068,160069],{"class":254,"line":1353},[252,160070,2539],{"emptyLinePlaceholder":181},[252,160072,160073,160075],{"class":254,"line":1359},[252,160074,30555],{"class":311},[252,160076,159411],{"class":262},[19,160078,160079],{},"也可以：",[244,160081,160083],{"className":30518,"code":160082,"language":30520,"meta":169,"style":169},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[22,160084,160085,160093,160097,160121,160129,160133],{"__ignoreMap":169},[252,160086,160087,160089,160091],{"class":254,"line":255},[252,160088,157340],{"class":262},[252,160090,308],{"class":258},[252,160092,47473],{"class":311},[252,160094,160095],{"class":254,"line":170},[252,160096,2539],{"emptyLinePlaceholder":181},[252,160098,160099,160101,160103,160105,160107,160109,160111,160113,160115,160117,160119],{"class":254,"line":1318},[252,160100,3164],{"class":258},[252,160102,9578],{"class":262},[252,160104,26183],{"class":258},[252,160106,32583],{"class":311},[252,160108,263],{"class":262},[252,160110,340],{"class":311},[252,160112,12575],{"class":262},[252,160114,600],{"class":311},[252,160116,12575],{"class":262},[252,160118,340],{"class":311},[252,160120,30926],{"class":262},[252,160122,160123,160125,160127],{"class":254,"line":1333},[252,160124,159387],{"class":262},[252,160126,9617],{"class":258},[252,160128,159392],{"class":262},[252,160130,160131],{"class":254,"line":1339},[252,160132,2539],{"emptyLinePlaceholder":181},[252,160134,160135,160137],{"class":254,"line":1353},[252,160136,30555],{"class":311},[252,160138,159411],{"class":262},[14,160140,160142],{"id":160141},"_49-循环嵌套","4.9 循环嵌套",[19,160144,160145],{},"嵌套循环就是循环里面再写循环。",[244,160147,160149],{"className":30518,"code":160148,"language":30520,"meta":169,"style":169},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[22,160150,160151,160171,160191],{"__ignoreMap":169},[252,160152,160153,160155,160157,160159,160161,160163,160165,160167,160169],{"class":254,"line":255},[252,160154,3164],{"class":258},[252,160156,9578],{"class":262},[252,160158,26183],{"class":258},[252,160160,32583],{"class":311},[252,160162,263],{"class":262},[252,160164,480],{"class":311},[252,160166,12575],{"class":262},[252,160168,556],{"class":311},[252,160170,30926],{"class":262},[252,160172,160173,160175,160177,160179,160181,160183,160185,160187,160189],{"class":254,"line":170},[252,160174,3340],{"class":258},[252,160176,9640],{"class":262},[252,160178,26183],{"class":258},[252,160180,32583],{"class":311},[252,160182,263],{"class":262},[252,160184,480],{"class":311},[252,160186,12575],{"class":262},[252,160188,556],{"class":311},[252,160190,30926],{"class":262},[252,160192,160193,160195,160197,160199,160202,160204,160206,160208,160211,160213,160215,160217,160219],{"class":254,"line":1318},[252,160194,32591],{"class":311},[252,160196,263],{"class":262},[252,160198,315],{"class":258},[252,160200,160201],{"class":367},"\"i=",[252,160203,1159],{"class":311},[252,160205,704],{"class":262},[252,160207,1209],{"class":311},[252,160209,160210],{"class":367},", j=",[252,160212,1159],{"class":311},[252,160214,730],{"class":262},[252,160216,1209],{"class":311},[252,160218,514],{"class":367},[252,160220,269],{"class":262},[19,160222,160223],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160225,160227],{"id":160226},"_410-九九乘法表","4.10 九九乘法表",[244,160229,160231],{"className":30518,"code":160230,"language":30520,"meta":169,"style":169},"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",[22,160232,160233,160253,160276,160328],{"__ignoreMap":169},[252,160234,160235,160237,160239,160241,160243,160245,160247,160249,160251],{"class":254,"line":255},[252,160236,3164],{"class":258},[252,160238,9578],{"class":262},[252,160240,26183],{"class":258},[252,160242,32583],{"class":311},[252,160244,263],{"class":262},[252,160246,480],{"class":311},[252,160248,12575],{"class":262},[252,160250,709],{"class":311},[252,160252,30926],{"class":262},[252,160254,160255,160257,160259,160261,160263,160265,160267,160270,160272,160274],{"class":254,"line":170},[252,160256,3340],{"class":258},[252,160258,9640],{"class":262},[252,160260,26183],{"class":258},[252,160262,32583],{"class":311},[252,160264,263],{"class":262},[252,160266,480],{"class":311},[252,160268,160269],{"class":262},", i ",[252,160271,744],{"class":258},[252,160273,25258],{"class":311},[252,160275,30926],{"class":262},[252,160277,160278,160280,160282,160284,160286,160288,160290,160292,160294,160296,160298,160300,160302,160304,160306,160308,160310,160312,160314,160316,160318,160320,160322,160324,160326],{"class":254,"line":1318},[252,160279,32591],{"class":311},[252,160281,263],{"class":262},[252,160283,315],{"class":258},[252,160285,514],{"class":367},[252,160287,1159],{"class":311},[252,160289,730],{"class":262},[252,160291,1209],{"class":311},[252,160293,718],{"class":367},[252,160295,1159],{"class":311},[252,160297,704],{"class":262},[252,160299,1209],{"class":311},[252,160301,308],{"class":367},[252,160303,1159],{"class":311},[252,160305,100286],{"class":262},[252,160307,718],{"class":258},[252,160309,3549],{"class":262},[252,160311,1209],{"class":311},[252,160313,514],{"class":367},[252,160315,12575],{"class":262},[252,160317,45941],{"class":5356},[252,160319,308],{"class":258},[252,160321,514],{"class":367},[252,160323,1369],{"class":311},[252,160325,514],{"class":367},[252,160327,269],{"class":262},[252,160329,160330,160332],{"class":254,"line":1333},[252,160331,31439],{"class":311},[252,160333,2115],{"class":262},[19,160335,160336],{},"关键点：",[207,160338,160339,160345,160351,160357],{},[210,160340,160341,160342,160344],{},"外层 ",[22,160343,704],{}," 控制行。",[210,160346,160347,160348,160350],{},"内层 ",[22,160349,730],{}," 控制列。",[210,160352,160353,160354,160356],{},"每行结束后用 ",[22,160355,146552],{}," 换行。",[210,160358,160359,160362],{},[22,160360,160361],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160364,160366],{"id":160365},"_411-循环else","4.11 循环else",[19,160368,160369,160370,160372,160373,160375,160376,160378],{},"Python 的循环可以带 ",[22,160371,1840],{},"。当循环正常结束时执行 ",[22,160374,1840],{},"，如果被 ",[22,160377,2192],{}," 打断，则不执行。",[244,160380,160382],{"className":30518,"code":160381,"language":30520,"meta":169,"style":169},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[22,160383,160384,160404,160416,160427,160431,160437],{"__ignoreMap":169},[252,160385,160386,160388,160390,160392,160394,160396,160398,160400,160402],{"class":254,"line":255},[252,160387,3164],{"class":258},[252,160389,9578],{"class":262},[252,160391,26183],{"class":258},[252,160393,32583],{"class":311},[252,160395,263],{"class":262},[252,160397,480],{"class":311},[252,160399,12575],{"class":262},[252,160401,607],{"class":311},[252,160403,30926],{"class":262},[252,160405,160406,160408,160410,160412,160414],{"class":254,"line":170},[252,160407,3240],{"class":258},[252,160409,9578],{"class":262},[252,160411,3088],{"class":258},[252,160413,2177],{"class":311},[252,160415,3878],{"class":262},[252,160417,160418,160420,160422,160425],{"class":254,"line":1318},[252,160419,32591],{"class":311},[252,160421,263],{"class":262},[252,160423,160424],{"class":367},"\"找到了\"",[252,160426,269],{"class":262},[252,160428,160429],{"class":254,"line":1333},[252,160430,31767],{"class":258},[252,160432,160433,160435],{"class":254,"line":1339},[252,160434,1840],{"class":258},[252,160436,3878],{"class":262},[252,160438,160439,160441,160443,160446],{"class":254,"line":1353},[252,160440,31439],{"class":311},[252,160442,263],{"class":262},[252,160444,160445],{"class":367},"\"没找到\"",[252,160447,269],{"class":262},[19,160449,160450],{},"常用于搜索。",[244,160452,160454],{"className":30518,"code":160453,"language":30520,"meta":169,"style":169},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[22,160455,160456,160477,160486,160490,160502,160513,160523,160527,160533],{"__ignoreMap":169},[252,160457,160458,160461,160463,160465,160467,160469,160471,160473,160475],{"class":254,"line":255},[252,160459,160460],{"class":262},"names ",[252,160462,308],{"class":258},[252,160464,52366],{"class":262},[252,160466,149968],{"class":367},[252,160468,12575],{"class":262},[252,160470,151016],{"class":367},[252,160472,12575],{"class":262},[252,160474,159811],{"class":367},[252,160476,33386],{"class":262},[252,160478,160479,160481,160483],{"class":254,"line":170},[252,160480,111714],{"class":262},[252,160482,308],{"class":258},[252,160484,160485],{"class":367}," \"小李\"\n",[252,160487,160488],{"class":254,"line":1318},[252,160489,2539],{"emptyLinePlaceholder":181},[252,160491,160492,160494,160497,160499],{"class":254,"line":1333},[252,160493,3164],{"class":258},[252,160495,160496],{"class":262}," name ",[252,160498,26183],{"class":258},[252,160500,160501],{"class":262}," names:\n",[252,160503,160504,160506,160508,160510],{"class":254,"line":1339},[252,160505,3240],{"class":258},[252,160507,160496],{"class":262},[252,160509,3088],{"class":258},[252,160511,160512],{"class":262}," target:\n",[252,160514,160515,160517,160519,160521],{"class":254,"line":1353},[252,160516,32591],{"class":311},[252,160518,263],{"class":262},[252,160520,160424],{"class":367},[252,160522,269],{"class":262},[252,160524,160525],{"class":254,"line":1359},[252,160526,31767],{"class":258},[252,160528,160529,160531],{"class":254,"line":1450},[252,160530,1840],{"class":258},[252,160532,3878],{"class":262},[252,160534,160535,160537,160539,160541],{"class":254,"line":1456},[252,160536,31439],{"class":311},[252,160538,263],{"class":262},[252,160540,160445],{"class":367},[252,160542,269],{"class":262},[14,160544,160546],{"id":160545},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160548,123428],{},[207,160550,160551,160554,160557],{},[210,160552,160553],{},"用户最多输入 3 次密码。",[210,160555,160556],{},"密码正确则登录成功。",[210,160558,160559],{},"3 次都错误则锁定账号。",[19,160561,10175],{},[244,160563,160565],{"className":30518,"code":160564,"language":30520,"meta":169,"style":169},"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",[22,160566,160567,160577,160581,160597,160613,160617,160629,160640,160644,160650,160675,160681],{"__ignoreMap":169},[252,160568,160569,160572,160574],{"class":254,"line":255},[252,160570,160571],{"class":262},"password ",[252,160573,308],{"class":258},[252,160575,160576],{"class":367}," \"123456\"\n",[252,160578,160579],{"class":254,"line":170},[252,160580,2539],{"emptyLinePlaceholder":181},[252,160582,160583,160585,160587,160589,160591,160593,160595],{"class":254,"line":1318},[252,160584,3164],{"class":258},[252,160586,9578],{"class":262},[252,160588,26183],{"class":258},[252,160590,32583],{"class":311},[252,160592,263],{"class":262},[252,160594,334],{"class":311},[252,160596,30926],{"class":262},[252,160598,160599,160602,160604,160606,160608,160611],{"class":254,"line":1333},[252,160600,160601],{"class":262},"    user_password ",[252,160603,308],{"class":258},[252,160605,60745],{"class":311},[252,160607,263],{"class":262},[252,160609,160610],{"class":367},"\"请输入密码:\"",[252,160612,269],{"class":262},[252,160614,160615],{"class":254,"line":1339},[252,160616,2539],{"emptyLinePlaceholder":181},[252,160618,160619,160621,160624,160626],{"class":254,"line":1353},[252,160620,3240],{"class":258},[252,160622,160623],{"class":262}," user_password ",[252,160625,3088],{"class":258},[252,160627,160628],{"class":262}," password:\n",[252,160630,160631,160633,160635,160638],{"class":254,"line":1359},[252,160632,32591],{"class":311},[252,160634,263],{"class":262},[252,160636,160637],{"class":367},"\"登录成功\"",[252,160639,269],{"class":262},[252,160641,160642],{"class":254,"line":1450},[252,160643,31767],{"class":258},[252,160645,160646,160648],{"class":254,"line":1456},[252,160647,158102],{"class":258},[252,160649,3878],{"class":262},[252,160651,160652,160654,160656,160658,160661,160664,160666,160668,160670,160673],{"class":254,"line":1468},[252,160653,32591],{"class":311},[252,160655,263],{"class":262},[252,160657,315],{"class":258},[252,160659,160660],{"class":367},"\"密码错误，还剩",[252,160662,160663],{"class":311},"{2",[252,160665,52411],{"class":258},[252,160667,3171],{"class":262},[252,160669,1209],{"class":311},[252,160671,160672],{"class":367},"次机会\"",[252,160674,269],{"class":262},[252,160676,160677,160679],{"class":254,"line":1751},[252,160678,1840],{"class":258},[252,160680,3878],{"class":262},[252,160682,160683,160685,160687,160690],{"class":254,"line":1756},[252,160684,31439],{"class":311},[252,160686,263],{"class":262},[252,160688,160689],{"class":367},"\"账号已锁定\"",[252,160691,269],{"class":262},[14,160693,160695],{"id":160694},"_413-小案例菜单程序","4.13 小案例：菜单程序",[244,160697,160699],{"className":30518,"code":160698,"language":30520,"meta":169,"style":169},"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",[22,160700,160701,160709,160720,160731,160742,160753,160764,160768,160783,160787,160799,160810,160822,160833,160845,160856,160868,160878,160882,160888],{"__ignoreMap":169},[252,160702,160703,160705,160707],{"class":254,"line":255},[252,160704,108799],{"class":258},[252,160706,95430],{"class":311},[252,160708,3878],{"class":262},[252,160710,160711,160713,160715,160718],{"class":254,"line":170},[252,160712,31439],{"class":311},[252,160714,263],{"class":262},[252,160716,160717],{"class":367},"\"====== 菜单 ======\"",[252,160719,269],{"class":262},[252,160721,160722,160724,160726,160729],{"class":254,"line":1318},[252,160723,31439],{"class":311},[252,160725,263],{"class":262},[252,160727,160728],{"class":367},"\"1. 查询余额\"",[252,160730,269],{"class":262},[252,160732,160733,160735,160737,160740],{"class":254,"line":1333},[252,160734,31439],{"class":311},[252,160736,263],{"class":262},[252,160738,160739],{"class":367},"\"2. 存款\"",[252,160741,269],{"class":262},[252,160743,160744,160746,160748,160751],{"class":254,"line":1339},[252,160745,31439],{"class":311},[252,160747,263],{"class":262},[252,160749,160750],{"class":367},"\"3. 取款\"",[252,160752,269],{"class":262},[252,160754,160755,160757,160759,160762],{"class":254,"line":1353},[252,160756,31439],{"class":311},[252,160758,263],{"class":262},[252,160760,160761],{"class":367},"\"0. 退出\"",[252,160763,269],{"class":262},[252,160765,160766],{"class":254,"line":1359},[252,160767,2539],{"emptyLinePlaceholder":181},[252,160769,160770,160773,160775,160777,160779,160781],{"class":254,"line":1450},[252,160771,160772],{"class":262},"    choice ",[252,160774,308],{"class":258},[252,160776,60745],{"class":311},[252,160778,263],{"class":262},[252,160780,153153],{"class":367},[252,160782,269],{"class":262},[252,160784,160785],{"class":254,"line":1456},[252,160786,2539],{"emptyLinePlaceholder":181},[252,160788,160789,160791,160793,160795,160797],{"class":254,"line":1468},[252,160790,3240],{"class":258},[252,160792,153166],{"class":262},[252,160794,3088],{"class":258},[252,160796,153171],{"class":367},[252,160798,3878],{"class":262},[252,160800,160801,160803,160805,160808],{"class":254,"line":1751},[252,160802,32591],{"class":311},[252,160804,263],{"class":262},[252,160806,160807],{"class":367},"\"余额为1000元\"",[252,160809,269],{"class":262},[252,160811,160812,160814,160816,160818,160820],{"class":254,"line":1756},[252,160813,39433],{"class":258},[252,160815,153166],{"class":262},[252,160817,3088],{"class":258},[252,160819,153190],{"class":367},[252,160821,3878],{"class":262},[252,160823,160824,160826,160828,160831],{"class":254,"line":1762},[252,160825,32591],{"class":311},[252,160827,263],{"class":262},[252,160829,160830],{"class":367},"\"存款功能\"",[252,160832,269],{"class":262},[252,160834,160835,160837,160839,160841,160843],{"class":254,"line":1767},[252,160836,39433],{"class":258},[252,160838,153166],{"class":262},[252,160840,3088],{"class":258},[252,160842,153208],{"class":367},[252,160844,3878],{"class":262},[252,160846,160847,160849,160851,160854],{"class":254,"line":1781},[252,160848,32591],{"class":311},[252,160850,263],{"class":262},[252,160852,160853],{"class":367},"\"取款功能\"",[252,160855,269],{"class":262},[252,160857,160858,160860,160862,160864,160866],{"class":254,"line":1786},[252,160859,39433],{"class":258},[252,160861,153166],{"class":262},[252,160863,3088],{"class":258},[252,160865,153262],{"class":367},[252,160867,3878],{"class":262},[252,160869,160870,160872,160874,160876],{"class":254,"line":1792},[252,160871,32591],{"class":311},[252,160873,263],{"class":262},[252,160875,153273],{"class":367},[252,160877,269],{"class":262},[252,160879,160880],{"class":254,"line":1813},[252,160881,31767],{"class":258},[252,160883,160884,160886],{"class":254,"line":1818},[252,160885,158102],{"class":258},[252,160887,3878],{"class":262},[252,160889,160890,160892,160894,160896],{"class":254,"line":1832},[252,160891,32591],{"class":311},[252,160893,263],{"class":262},[252,160895,153294],{"class":367},[252,160897,269],{"class":262},[19,160899,160900,160901,160903,160904,28525],{},"菜单类程序通常使用 ",[22,160902,159602],{},"，用户选择退出时 ",[22,160905,2192],{},[14,160907,160909],{"id":160908},"_414-易错点","4.14 易错点",[207,160911,160912,160917,160923,160931,160937],{},[210,160913,160914,160916],{},[22,160915,108799],{}," 循环必须更新控制变量。",[210,160918,160919,160922],{},[22,160920,160921],{},"range(1, 10)"," 不包含 10。",[210,160924,160925,160927,160928,160930],{},[22,160926,2192],{}," 结束整个循环，",[22,160929,154752],{}," 只跳过本轮。",[210,160932,160933,160934,160936],{},"嵌套循环中，",[22,160935,2192],{}," 只跳出当前所在的一层循环。",[210,160938,160939],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,160941,160943],{"id":160942},"_415-本章练习","4.15 本章练习",[207,160945,160946,160949,160952,160955,160958],{},[210,160947,160948],{},"输出 1 到 100。",[210,160950,160951],{},"计算 1 到 100 的偶数和。",[210,160953,160954],{},"输出 100 以内能被 3 和 5 同时整除的数。",[210,160956,160957],{},"编写猜数字游戏，限制最多猜 7 次。",[210,160959,160960],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5266,160962,160963],{},"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":169,"searchDepth":170,"depth":170,"links":160965},[160966,160967,160968,160969,160970,160974,160975,160976,160977,160978,160979,160980,160981,160982,160983],{"id":159222,"depth":170,"text":159223},{"id":159252,"depth":170,"text":159253},{"id":159341,"depth":170,"text":159342},{"id":159435,"depth":170,"text":159436},{"id":159609,"depth":170,"text":159610,"children":160971},[160972,160973],{"id":159613,"depth":1318,"text":159614},{"id":159677,"depth":1318,"text":159678},{"id":159741,"depth":170,"text":159742},{"id":159836,"depth":170,"text":159837},{"id":159945,"depth":170,"text":159946},{"id":160141,"depth":170,"text":160142},{"id":160226,"depth":170,"text":160227},{"id":160365,"depth":170,"text":160366},{"id":160545,"depth":170,"text":160546},{"id":160694,"depth":170,"text":160695},{"id":160908,"depth":170,"text":160909},{"id":160942,"depth":170,"text":160943},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159214,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160990,"title":160991,"body":160992,"description":178,"extension":179,"meta":162997,"navigation":181,"path":162998,"seo":162999,"stem":163000,"__hash__":163001},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160993,"toc":162977},[160994,160997,161001,161004,161007,161021,161024,161038,161042,161044,161063,161065,161112,161114,161128,161132,161206,161209,161213,161216,161275,161283,161286,161339,161342,161346,161351,161406,161414,161464,161468,161473,161481,161580,161586,161590,161595,161598,161609,161650,161663,161667,161670,161706,161709,161722,161725,161785,161789,161793,161796,161847,161851,161854,161901,161907,161973,161976,161980,161983,162099,162102,162106,162109,162215,162219,162222,162260,162263,162305,162308,162368,162371,162375,162839,162842,162846,162873,162879,162940,162944,162974],[10,160995,160991],{"id":160996},"_5-函数基础",[14,160998,161000],{"id":160999},"_51-为什么需要函数","5.1 为什么需要函数",[19,161002,161003],{},"函数用于封装一段可以重复使用的代码。",[19,161005,161006],{},"不使用函数的问题：",[207,161008,161009,161012,161015,161018],{},[210,161010,161011],{},"重复代码多。",[210,161013,161014],{},"修改逻辑时容易漏改。",[210,161016,161017],{},"主流程不清晰。",[210,161019,161020],{},"程序越写越长，难以维护。",[19,161022,161023],{},"使用函数后的好处：",[207,161025,161026,161029,161032,161035],{},[210,161027,161028],{},"提高复用性。",[210,161030,161031],{},"提高可读性。",[210,161033,161034],{},"便于调试。",[210,161036,161037],{},"便于分工。",[14,161039,161041],{"id":161040},"_52-函数定义","5.2 函数定义",[19,161043,5321],{},[244,161045,161047],{"className":30518,"code":161046,"language":30520,"meta":169,"style":169},"def 函数名():\n    函数体\n",[22,161048,161049,161058],{"__ignoreMap":169},[252,161050,161051,161053,161056],{"class":254,"line":255},[252,161052,32087],{"class":258},[252,161054,161055],{"class":2102}," 函数名",[252,161057,32093],{"class":262},[252,161059,161060],{"class":254,"line":170},[252,161061,161062],{"class":262},"    函数体\n",[19,161064,15275],{},[244,161066,161068],{"className":30518,"code":161067,"language":30520,"meta":169,"style":169},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[22,161069,161070,161079,161089,161099,161103,161107],{"__ignoreMap":169},[252,161071,161072,161074,161077],{"class":254,"line":255},[252,161073,32087],{"class":258},[252,161075,161076],{"class":2102}," say_hello",[252,161078,32093],{"class":262},[252,161080,161081,161083,161085,161087],{"class":254,"line":170},[252,161082,31439],{"class":311},[252,161084,263],{"class":262},[252,161086,5984],{"class":367},[252,161088,269],{"class":262},[252,161090,161091,161093,161095,161097],{"class":254,"line":1318},[252,161092,31439],{"class":311},[252,161094,263],{"class":262},[252,161096,146719],{"class":367},[252,161098,269],{"class":262},[252,161100,161101],{"class":254,"line":1333},[252,161102,2539],{"emptyLinePlaceholder":181},[252,161104,161105],{"class":254,"line":1339},[252,161106,2539],{"emptyLinePlaceholder":181},[252,161108,161109],{"class":254,"line":1353},[252,161110,161111],{"class":262},"say_hello()\n",[19,161113,9165],{},[207,161115,161116,161119,161122,161125],{},[210,161117,161118],{},"函数必须先定义，再调用。",[210,161120,161121],{},"函数名遵循变量命名规则。",[210,161123,161124],{},"函数体需要缩进。",[210,161126,161127],{},"函数不调用就不会执行。",[14,161129,161131],{"id":161130},"_53-函数调用","5.3 函数调用",[244,161133,161135],{"className":30518,"code":161134,"language":30520,"meta":169,"style":169},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[22,161136,161137,161146,161157,161168,161179,161189,161193,161197,161202],{"__ignoreMap":169},[252,161138,161139,161141,161144],{"class":254,"line":255},[252,161140,32087],{"class":258},[252,161142,161143],{"class":2102}," print_menu",[252,161145,32093],{"class":262},[252,161147,161148,161150,161152,161155],{"class":254,"line":170},[252,161149,31439],{"class":311},[252,161151,263],{"class":262},[252,161153,161154],{"class":367},"\"1. 查询\"",[252,161156,269],{"class":262},[252,161158,161159,161161,161163,161166],{"class":254,"line":1318},[252,161160,31439],{"class":311},[252,161162,263],{"class":262},[252,161164,161165],{"class":367},"\"2. 添加\"",[252,161167,269],{"class":262},[252,161169,161170,161172,161174,161177],{"class":254,"line":1333},[252,161171,31439],{"class":311},[252,161173,263],{"class":262},[252,161175,161176],{"class":367},"\"3. 删除\"",[252,161178,269],{"class":262},[252,161180,161181,161183,161185,161187],{"class":254,"line":1339},[252,161182,31439],{"class":311},[252,161184,263],{"class":262},[252,161186,160761],{"class":367},[252,161188,269],{"class":262},[252,161190,161191],{"class":254,"line":1353},[252,161192,2539],{"emptyLinePlaceholder":181},[252,161194,161195],{"class":254,"line":1359},[252,161196,2539],{"emptyLinePlaceholder":181},[252,161198,161199],{"class":254,"line":1450},[252,161200,161201],{"class":262},"print_menu()\n",[252,161203,161204],{"class":254,"line":1456},[252,161205,161201],{"class":262},[19,161207,161208],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161210,161212],{"id":161211},"_54-参数","5.4 参数",[19,161214,161215],{},"参数用于向函数传递数据。",[244,161217,161219],{"className":30518,"code":161218,"language":30520,"meta":169,"style":169},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[22,161220,161221,161230,161250,161254,161258,161267],{"__ignoreMap":169},[252,161222,161223,161225,161227],{"class":254,"line":255},[252,161224,32087],{"class":258},[252,161226,161076],{"class":2102},[252,161228,161229],{"class":262},"(name):\n",[252,161231,161232,161234,161236,161238,161240,161242,161244,161246,161248],{"class":254,"line":170},[252,161233,31439],{"class":311},[252,161235,263],{"class":262},[252,161237,315],{"class":258},[252,161239,157134],{"class":367},[252,161241,1159],{"class":311},[252,161243,79949],{"class":262},[252,161245,1209],{"class":311},[252,161247,514],{"class":367},[252,161249,269],{"class":262},[252,161251,161252],{"class":254,"line":1318},[252,161253,2539],{"emptyLinePlaceholder":181},[252,161255,161256],{"class":254,"line":1333},[252,161257,2539],{"emptyLinePlaceholder":181},[252,161259,161260,161263,161265],{"class":254,"line":1339},[252,161261,161262],{"class":262},"say_hello(",[252,161264,149968],{"class":367},[252,161266,269],{"class":262},[252,161268,161269,161271,161273],{"class":254,"line":1353},[252,161270,161262],{"class":262},[252,161272,151016],{"class":367},[252,161274,269],{"class":262},[19,161276,161277,161279,161280,161282],{},[22,161278,79949],{}," 是形参，",[22,161281,149968],{}," 是实参。",[19,161284,161285],{},"多个参数：",[244,161287,161289],{"className":30518,"code":161288,"language":30520,"meta":169,"style":169},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[22,161290,161291,161299,161312,161318,161322,161326],{"__ignoreMap":169},[252,161292,161293,161295,161297],{"class":254,"line":255},[252,161294,32087],{"class":258},[252,161296,5349],{"class":2102},[252,161298,151173],{"class":262},[252,161300,161301,161304,161306,161308,161310],{"class":254,"line":170},[252,161302,161303],{"class":262},"    result ",[252,161305,308],{"class":258},[252,161307,11009],{"class":262},[252,161309,744],{"class":258},[252,161311,151184],{"class":262},[252,161313,161314,161316],{"class":254,"line":1318},[252,161315,31439],{"class":311},[252,161317,76725],{"class":262},[252,161319,161320],{"class":254,"line":1333},[252,161321,2539],{"emptyLinePlaceholder":181},[252,161323,161324],{"class":254,"line":1339},[252,161325,2539],{"emptyLinePlaceholder":181},[252,161327,161328,161331,161333,161335,161337],{"class":254,"line":1353},[252,161329,161330],{"class":262},"add(",[252,161332,709],{"class":311},[252,161334,12575],{"class":262},[252,161336,963],{"class":311},[252,161338,269],{"class":262},[19,161340,161341],{},"调用时参数数量必须匹配。",[14,161343,161345],{"id":161344},"_55-返回值","5.5 返回值",[19,161347,161348,161350],{},[22,161349,17186],{}," 用于把函数内部的结果返回给调用者。",[244,161352,161354],{"className":30518,"code":161353,"language":30520,"meta":169,"style":169},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[22,161355,161356,161364,161374,161378,161382,161400],{"__ignoreMap":169},[252,161357,161358,161360,161362],{"class":254,"line":255},[252,161359,32087],{"class":258},[252,161361,5349],{"class":2102},[252,161363,151173],{"class":262},[252,161365,161366,161368,161370,161372],{"class":254,"line":170},[252,161367,4229],{"class":258},[252,161369,11009],{"class":262},[252,161371,744],{"class":258},[252,161373,151184],{"class":262},[252,161375,161376],{"class":254,"line":1318},[252,161377,2539],{"emptyLinePlaceholder":181},[252,161379,161380],{"class":254,"line":1333},[252,161381,2539],{"emptyLinePlaceholder":181},[252,161383,161384,161387,161389,161392,161394,161396,161398],{"class":254,"line":1339},[252,161385,161386],{"class":262},"result ",[252,161388,308],{"class":258},[252,161390,161391],{"class":262}," add(",[252,161393,709],{"class":311},[252,161395,12575],{"class":262},[252,161397,963],{"class":311},[252,161399,269],{"class":262},[252,161401,161402,161404],{"class":254,"line":1353},[252,161403,30555],{"class":311},[252,161405,76725],{"class":262},[19,161407,161408,161409,161411,161412,28525],{},"如果函数没有写 ",[22,161410,17186],{},"，默认返回 ",[22,161413,95824],{},[244,161415,161417],{"className":30518,"code":161416,"language":30520,"meta":169,"style":169},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[22,161418,161419,161427,161437,161441,161445,161454],{"__ignoreMap":169},[252,161420,161421,161423,161425],{"class":254,"line":255},[252,161422,32087],{"class":258},[252,161424,161076],{"class":2102},[252,161426,32093],{"class":262},[252,161428,161429,161431,161433,161435],{"class":254,"line":170},[252,161430,31439],{"class":311},[252,161432,263],{"class":262},[252,161434,5984],{"class":367},[252,161436,269],{"class":262},[252,161438,161439],{"class":254,"line":1318},[252,161440,2539],{"emptyLinePlaceholder":181},[252,161442,161443],{"class":254,"line":1333},[252,161444,2539],{"emptyLinePlaceholder":181},[252,161446,161447,161449,161451],{"class":254,"line":1339},[252,161448,161386],{"class":262},[252,161450,308],{"class":258},[252,161452,161453],{"class":262}," say_hello()\n",[252,161455,161456,161458,161461],{"class":254,"line":1353},[252,161457,30555],{"class":311},[252,161459,161460],{"class":262},"(result)  ",[252,161462,161463],{"class":321},"# None\n",[14,161465,161467],{"id":161466},"_56-return的作用","5.6 return的作用",[19,161469,161470,161472],{},[22,161471,17186],{}," 有两个作用：",[207,161474,161475,161478],{},[210,161476,161477],{},"返回结果。",[210,161479,161480],{},"结束函数。",[244,161482,161484],{"className":30518,"code":161483,"language":30520,"meta":169,"style":169},"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",[22,161485,161486,161496,161508,161515,161519,161531,161538,161542,161549,161553,161557,161568],{"__ignoreMap":169},[252,161487,161488,161490,161493],{"class":254,"line":255},[252,161489,32087],{"class":258},[252,161491,161492],{"class":2102}," check_age",[252,161494,161495],{"class":262},"(age):\n",[252,161497,161498,161500,161502,161504,161506],{"class":254,"line":170},[252,161499,3240],{"class":258},[252,161501,15847],{"class":262},[252,161503,1173],{"class":258},[252,161505,4232],{"class":311},[252,161507,3878],{"class":262},[252,161509,161510,161512],{"class":254,"line":1318},[252,161511,14892],{"class":258},[252,161513,161514],{"class":367}," \"年龄不合法\"\n",[252,161516,161517],{"class":254,"line":1333},[252,161518,2539],{"emptyLinePlaceholder":181},[252,161520,161521,161523,161525,161527,161529],{"class":254,"line":1339},[252,161522,3240],{"class":258},[252,161524,15847],{"class":262},[252,161526,1849],{"class":258},[252,161528,156365],{"class":311},[252,161530,3878],{"class":262},[252,161532,161533,161535],{"class":254,"line":1353},[252,161534,14892],{"class":258},[252,161536,161537],{"class":367}," \"成年人\"\n",[252,161539,161540],{"class":254,"line":1359},[252,161541,2539],{"emptyLinePlaceholder":181},[252,161543,161544,161546],{"class":254,"line":1450},[252,161545,4229],{"class":258},[252,161547,161548],{"class":367}," \"未成年人\"\n",[252,161550,161551],{"class":254,"line":1456},[252,161552,2539],{"emptyLinePlaceholder":181},[252,161554,161555],{"class":254,"line":1468},[252,161556,2539],{"emptyLinePlaceholder":181},[252,161558,161559,161561,161564,161566],{"class":254,"line":1751},[252,161560,30555],{"class":311},[252,161562,161563],{"class":262},"(check_age(",[252,161565,963],{"class":311},[252,161567,30637],{"class":262},[252,161569,161570,161572,161574,161576,161578],{"class":254,"line":1756},[252,161571,30555],{"class":311},[252,161573,161563],{"class":262},[252,161575,795],{"class":258},[252,161577,480],{"class":311},[252,161579,30637],{"class":262},[19,161581,161582,161583,161585],{},"函数执行到 ",[22,161584,17186],{}," 后，后面的代码不会继续执行。",[14,161587,161589],{"id":161588},"_57-none","5.7 None",[19,161591,161592,161594],{},[22,161593,95824],{}," 表示空值或没有结果。",[19,161596,161597],{},"常见使用场景：",[207,161599,161600,161603,161606],{},[210,161601,161602],{},"函数没有返回值。",[210,161604,161605],{},"变量暂时没有具体值。",[210,161607,161608],{},"表示查询不到结果。",[244,161610,161612],{"className":30518,"code":161611,"language":30520,"meta":169,"style":169},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[22,161613,161614,161622,161626,161639],{"__ignoreMap":169},[252,161615,161616,161618,161620],{"class":254,"line":255},[252,161617,161386],{"class":262},[252,161619,308],{"class":258},[252,161621,152252],{"class":311},[252,161623,161624],{"class":254,"line":170},[252,161625,2539],{"emptyLinePlaceholder":181},[252,161627,161628,161630,161633,161635,161637],{"class":254,"line":1318},[252,161629,1670],{"class":258},[252,161631,161632],{"class":262}," result ",[252,161634,39067],{"class":258},[252,161636,39073],{"class":311},[252,161638,3878],{"class":262},[252,161640,161641,161643,161645,161648],{"class":254,"line":1333},[252,161642,31439],{"class":311},[252,161644,263],{"class":262},[252,161646,161647],{"class":367},"\"没有数据\"",[252,161649,269],{"class":262},[19,161651,161652,161653,161655,161656,161659,161660,28525],{},"判断 ",[22,161654,95824],{}," 推荐使用 ",[22,161657,161658],{},"is None","，不要写成 ",[22,161661,161662],{},"== None",[14,161664,161666],{"id":161665},"_58-函数文档字符串","5.8 函数文档字符串",[19,161668,161669],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[244,161671,161673],{"className":30518,"code":161672,"language":30520,"meta":169,"style":169},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[22,161674,161675,161685,161690],{"__ignoreMap":169},[252,161676,161677,161679,161682],{"class":254,"line":255},[252,161678,32087],{"class":258},[252,161680,161681],{"class":2102}," calculate_bmi",[252,161683,161684],{"class":262},"(weight, height):\n",[252,161686,161687],{"class":254,"line":170},[252,161688,161689],{"class":367},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[252,161691,161692,161694,161697,161699,161702,161704],{"class":254,"line":1318},[252,161693,4229],{"class":258},[252,161695,161696],{"class":262}," weight ",[252,161698,847],{"class":258},[252,161700,161701],{"class":262}," height ",[252,161703,10801],{"class":258},[252,161705,47863],{"class":311},[19,161707,161708],{},"查看说明：",[244,161710,161712],{"className":30518,"code":161711,"language":30520,"meta":169,"style":169},"help(calculate_bmi)\n",[22,161713,161714],{"__ignoreMap":169},[252,161715,161716,161719],{"class":254,"line":255},[252,161717,161718],{"class":311},"help",[252,161720,161721],{"class":262},"(calculate_bmi)\n",[19,161723,161724],{},"较完整的写法：",[244,161726,161728],{"className":30518,"code":161727,"language":30520,"meta":169,"style":169},"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",[22,161729,161730,161738,161743,161748,161752,161757,161762,161767,161771],{"__ignoreMap":169},[252,161731,161732,161734,161736],{"class":254,"line":255},[252,161733,32087],{"class":258},[252,161735,161681],{"class":2102},[252,161737,161684],{"class":262},[252,161739,161740],{"class":254,"line":170},[252,161741,161742],{"class":367},"    \"\"\"\n",[252,161744,161745],{"class":254,"line":1318},[252,161746,161747],{"class":367},"    计算BMI。\n",[252,161749,161750],{"class":254,"line":1333},[252,161751,2539],{"emptyLinePlaceholder":181},[252,161753,161754],{"class":254,"line":1339},[252,161755,161756],{"class":367},"    :param weight: 体重，单位kg\n",[252,161758,161759],{"class":254,"line":1353},[252,161760,161761],{"class":367},"    :param height: 身高，单位m\n",[252,161763,161764],{"class":254,"line":1359},[252,161765,161766],{"class":367},"    :return: BMI数值\n",[252,161768,161769],{"class":254,"line":1450},[252,161770,161742],{"class":367},[252,161772,161773,161775,161777,161779,161781,161783],{"class":254,"line":1456},[252,161774,4229],{"class":258},[252,161776,161696],{"class":262},[252,161778,847],{"class":258},[252,161780,161701],{"class":262},[252,161782,10801],{"class":258},[252,161784,47863],{"class":311},[14,161786,161788],{"id":161787},"_59-变量作用域","5.9 变量作用域",[224,161790,161792],{"id":161791},"_591-局部变量","5.9.1 局部变量",[19,161794,161795],{},"在函数内部定义的变量，只能在函数内部使用。",[244,161797,161799],{"className":30518,"code":161798,"language":30520,"meta":169,"style":169},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[22,161800,161801,161810,161818,161824,161828,161832,161837],{"__ignoreMap":169},[252,161802,161803,161805,161808],{"class":254,"line":255},[252,161804,32087],{"class":258},[252,161806,161807],{"class":2102}," test",[252,161809,32093],{"class":262},[252,161811,161812,161814,161816],{"class":254,"line":170},[252,161813,45733],{"class":262},[252,161815,308],{"class":258},[252,161817,58568],{"class":311},[252,161819,161820,161822],{"class":254,"line":1318},[252,161821,31439],{"class":311},[252,161823,276],{"class":262},[252,161825,161826],{"class":254,"line":1333},[252,161827,2539],{"emptyLinePlaceholder":181},[252,161829,161830],{"class":254,"line":1339},[252,161831,2539],{"emptyLinePlaceholder":181},[252,161833,161834],{"class":254,"line":1353},[252,161835,161836],{"class":262},"test()\n",[252,161838,161839,161841,161844],{"class":254,"line":1359},[252,161840,30555],{"class":311},[252,161842,161843],{"class":262},"(num)  ",[252,161845,161846],{"class":321},"# 报错\n",[224,161848,161850],{"id":161849},"_592-全局变量","5.9.2 全局变量",[19,161852,161853],{},"在函数外部定义的变量，可以在函数内部读取。",[244,161855,161857],{"className":30518,"code":161856,"language":30520,"meta":169,"style":169},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[22,161858,161859,161867,161871,161875,161883,161889,161893,161897],{"__ignoreMap":169},[252,161860,161861,161863,161865],{"class":254,"line":255},[252,161862,146616],{"class":262},[252,161864,308],{"class":258},[252,161866,149433],{"class":367},[252,161868,161869],{"class":254,"line":170},[252,161870,2539],{"emptyLinePlaceholder":181},[252,161872,161873],{"class":254,"line":1318},[252,161874,2539],{"emptyLinePlaceholder":181},[252,161876,161877,161879,161881],{"class":254,"line":1333},[252,161878,32087],{"class":258},[252,161880,161076],{"class":2102},[252,161882,32093],{"class":262},[252,161884,161885,161887],{"class":254,"line":1339},[252,161886,31439],{"class":311},[252,161888,150740],{"class":262},[252,161890,161891],{"class":254,"line":1353},[252,161892,2539],{"emptyLinePlaceholder":181},[252,161894,161895],{"class":254,"line":1359},[252,161896,2539],{"emptyLinePlaceholder":181},[252,161898,161899],{"class":254,"line":1450},[252,161900,161111],{"class":262},[19,161902,161903,161904,28525],{},"如果要在函数内部修改全局变量，需要 ",[22,161905,161906],{},"global",[244,161908,161910],{"className":30518,"code":161909,"language":30520,"meta":169,"style":169},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[22,161911,161912,161920,161924,161928,161937,161945,161953,161957,161961,161966],{"__ignoreMap":169},[252,161913,161914,161916,161918],{"class":254,"line":255},[252,161915,146771],{"class":262},[252,161917,308],{"class":258},[252,161919,47473],{"class":311},[252,161921,161922],{"class":254,"line":170},[252,161923,2539],{"emptyLinePlaceholder":181},[252,161925,161926],{"class":254,"line":1318},[252,161927,2539],{"emptyLinePlaceholder":181},[252,161929,161930,161932,161935],{"class":254,"line":1333},[252,161931,32087],{"class":258},[252,161933,161934],{"class":2102}," add_count",[252,161936,32093],{"class":262},[252,161938,161939,161942],{"class":254,"line":1339},[252,161940,161941],{"class":258},"    global",[252,161943,161944],{"class":262}," count\n",[252,161946,161947,161949,161951],{"class":254,"line":1353},[252,161948,159513],{"class":262},[252,161950,9617],{"class":258},[252,161952,55839],{"class":311},[252,161954,161955],{"class":254,"line":1359},[252,161956,2539],{"emptyLinePlaceholder":181},[252,161958,161959],{"class":254,"line":1450},[252,161960,2539],{"emptyLinePlaceholder":181},[252,161962,161963],{"class":254,"line":1456},[252,161964,161965],{"class":262},"add_count()\n",[252,161967,161968,161970],{"class":254,"line":1468},[252,161969,30555],{"class":311},[252,161971,161972],{"class":262},"(count)\n",[19,161974,161975],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,161977,161979],{"id":161978},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,161981,161982],{},"一个函数中可以调用另一个函数。",[244,161984,161986],{"className":30518,"code":161985,"language":30520,"meta":169,"style":169},"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",[22,161987,161988,161997,162011,162015,162019,162028,162033,162053,162074,162078,162082,162086],{"__ignoreMap":169},[252,161989,161990,161992,161995],{"class":254,"line":255},[252,161991,32087],{"class":258},[252,161993,161994],{"class":2102}," print_line",[252,161996,32093],{"class":262},[252,161998,161999,162001,162003,162005,162007,162009],{"class":254,"line":170},[252,162000,31439],{"class":311},[252,162002,263],{"class":262},[252,162004,32623],{"class":367},[252,162006,6658],{"class":258},[252,162008,78804],{"class":311},[252,162010,269],{"class":262},[252,162012,162013],{"class":254,"line":1318},[252,162014,2539],{"emptyLinePlaceholder":181},[252,162016,162017],{"class":254,"line":1333},[252,162018,2539],{"emptyLinePlaceholder":181},[252,162020,162021,162023,162026],{"class":254,"line":1339},[252,162022,32087],{"class":258},[252,162024,162025],{"class":2102}," print_info",[252,162027,149455],{"class":262},[252,162029,162030],{"class":254,"line":1353},[252,162031,162032],{"class":262},"    print_line()\n",[252,162034,162035,162037,162039,162041,162043,162045,162047,162049,162051],{"class":254,"line":1359},[252,162036,31439],{"class":311},[252,162038,263],{"class":262},[252,162040,315],{"class":258},[252,162042,156762],{"class":367},[252,162044,1159],{"class":311},[252,162046,79949],{"class":262},[252,162048,1209],{"class":311},[252,162050,514],{"class":367},[252,162052,269],{"class":262},[252,162054,162055,162057,162059,162061,162064,162066,162068,162070,162072],{"class":254,"line":1450},[252,162056,31439],{"class":311},[252,162058,263],{"class":262},[252,162060,315],{"class":258},[252,162062,162063],{"class":367},"\"年龄:",[252,162065,1159],{"class":311},[252,162067,70361],{"class":262},[252,162069,1209],{"class":311},[252,162071,514],{"class":367},[252,162073,269],{"class":262},[252,162075,162076],{"class":254,"line":1456},[252,162077,162032],{"class":262},[252,162079,162080],{"class":254,"line":1468},[252,162081,2539],{"emptyLinePlaceholder":181},[252,162083,162084],{"class":254,"line":1751},[252,162085,2539],{"emptyLinePlaceholder":181},[252,162087,162088,162091,162093,162095,162097],{"class":254,"line":1756},[252,162089,162090],{"class":262},"print_info(",[252,162092,149968],{"class":367},[252,162094,12575],{"class":262},[252,162096,913],{"class":311},[252,162098,269],{"class":262},[19,162100,162101],{},"这种方式可以把小功能组合成大功能。",[14,162103,162105],{"id":162104},"_511-参数检查","5.11 参数检查",[19,162107,162108],{},"函数内部可以检查参数是否合法。",[244,162110,162112],{"className":30518,"code":162111,"language":30520,"meta":169,"style":169},"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",[22,162113,162114,162123,162135,162141,162151,162155,162159,162176,162180,162192,162203,162209],{"__ignoreMap":169},[252,162115,162116,162118,162121],{"class":254,"line":255},[252,162117,32087],{"class":258},[252,162119,162120],{"class":2102}," divide",[252,162122,151173],{"class":262},[252,162124,162125,162127,162129,162131,162133],{"class":254,"line":170},[252,162126,3240],{"class":258},[252,162128,11022],{"class":262},[252,162130,3088],{"class":258},[252,162132,4232],{"class":311},[252,162134,3878],{"class":262},[252,162136,162137,162139],{"class":254,"line":1318},[252,162138,14892],{"class":258},[252,162140,152252],{"class":311},[252,162142,162143,162145,162147,162149],{"class":254,"line":1333},[252,162144,4229],{"class":258},[252,162146,11009],{"class":262},[252,162148,847],{"class":258},[252,162150,151184],{"class":262},[252,162152,162153],{"class":254,"line":1339},[252,162154,2539],{"emptyLinePlaceholder":181},[252,162156,162157],{"class":254,"line":1353},[252,162158,2539],{"emptyLinePlaceholder":181},[252,162160,162161,162163,162165,162168,162170,162172,162174],{"class":254,"line":1359},[252,162162,161386],{"class":262},[252,162164,308],{"class":258},[252,162166,162167],{"class":262}," divide(",[252,162169,709],{"class":311},[252,162171,12575],{"class":262},[252,162173,454],{"class":311},[252,162175,269],{"class":262},[252,162177,162178],{"class":254,"line":1450},[252,162179,2539],{"emptyLinePlaceholder":181},[252,162181,162182,162184,162186,162188,162190],{"class":254,"line":1456},[252,162183,1670],{"class":258},[252,162185,161632],{"class":262},[252,162187,39067],{"class":258},[252,162189,39073],{"class":311},[252,162191,3878],{"class":262},[252,162193,162194,162196,162198,162201],{"class":254,"line":1468},[252,162195,31439],{"class":311},[252,162197,263],{"class":262},[252,162199,162200],{"class":367},"\"除数不能为0\"",[252,162202,269],{"class":262},[252,162204,162205,162207],{"class":254,"line":1751},[252,162206,1840],{"class":258},[252,162208,3878],{"class":262},[252,162210,162211,162213],{"class":254,"line":1756},[252,162212,31439],{"class":311},[252,162214,76725],{"class":262},[14,162216,162218],{"id":162217},"_512-类型提示","5.12 类型提示",[19,162220,162221],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[244,162223,162225],{"className":30518,"code":162224,"language":30520,"meta":169,"style":169},"def add(a: int, b: int) -> int:\n    return a + b\n",[22,162226,162227,162250],{"__ignoreMap":169},[252,162228,162229,162231,162233,162236,162238,162241,162243,162246,162248],{"class":254,"line":255},[252,162230,32087],{"class":258},[252,162232,5349],{"class":2102},[252,162234,162235],{"class":262},"(a: ",[252,162237,266],{"class":311},[252,162239,162240],{"class":262},", b: ",[252,162242,266],{"class":311},[252,162244,162245],{"class":262},") -> ",[252,162247,266],{"class":311},[252,162249,3878],{"class":262},[252,162251,162252,162254,162256,162258],{"class":254,"line":170},[252,162253,4229],{"class":258},[252,162255,11009],{"class":262},[252,162257,744],{"class":258},[252,162259,151184],{"class":262},[19,162261,162262],{},"字符串参数：",[244,162264,162266],{"className":30518,"code":162265,"language":30520,"meta":169,"style":169},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[22,162267,162268,162285],{"__ignoreMap":169},[252,162269,162270,162272,162274,162277,162279,162281,162283],{"class":254,"line":255},[252,162271,32087],{"class":258},[252,162273,161076],{"class":2102},[252,162275,162276],{"class":262},"(name: ",[252,162278,1438],{"class":311},[252,162280,162245],{"class":262},[252,162282,95824],{"class":311},[252,162284,3878],{"class":262},[252,162286,162287,162289,162291,162293,162295,162297,162299,162301,162303],{"class":254,"line":170},[252,162288,31439],{"class":311},[252,162290,263],{"class":262},[252,162292,315],{"class":258},[252,162294,157134],{"class":367},[252,162296,1159],{"class":311},[252,162298,79949],{"class":262},[252,162300,1209],{"class":311},[252,162302,514],{"class":367},[252,162304,269],{"class":262},[19,162306,162307],{},"列表参数：",[244,162309,162311],{"className":30518,"code":162310,"language":30520,"meta":169,"style":169},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[22,162312,162313,162332,162340,162352,162361],{"__ignoreMap":169},[252,162314,162315,162317,162320,162323,162325,162328,162330],{"class":254,"line":255},[252,162316,32087],{"class":258},[252,162318,162319],{"class":2102}," get_total",[252,162321,162322],{"class":262},"(numbers: list[",[252,162324,266],{"class":311},[252,162326,162327],{"class":262},"]) -> ",[252,162329,266],{"class":311},[252,162331,3878],{"class":262},[252,162333,162334,162336,162338],{"class":254,"line":170},[252,162335,159387],{"class":262},[252,162337,308],{"class":258},[252,162339,47473],{"class":311},[252,162341,162342,162344,162347,162349],{"class":254,"line":1318},[252,162343,3340],{"class":258},[252,162345,162346],{"class":262}," number ",[252,162348,26183],{"class":258},[252,162350,162351],{"class":262}," numbers:\n",[252,162353,162354,162356,162358],{"class":254,"line":1333},[252,162355,160062],{"class":262},[252,162357,9617],{"class":258},[252,162359,162360],{"class":262}," number\n",[252,162362,162363,162365],{"class":254,"line":1339},[252,162364,4229],{"class":258},[252,162366,162367],{"class":262}," total\n",[19,162369,162370],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162372,162374],{"id":162373},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[244,162376,162378],{"className":30518,"code":162377,"language":30520,"meta":169,"style":169},"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",[22,162379,162380,162390,162394,162398,162406,162417,162427,162437,162447,162457,162461,162465,162474,162496,162500,162504,162513,162519,162539,162551,162562,162566,162575,162586,162591,162595,162599,162608,162614,162633,162645,162655,162659,162670,162680,162684,162692,162703,162707,162711,162715,162723,162728,162742,162746,162758,162763,162775,162780,162792,162797,162809,162819,162823,162829],{"__ignoreMap":169},[252,162381,162382,162385,162387],{"class":254,"line":255},[252,162383,162384],{"class":262},"balance ",[252,162386,308],{"class":258},[252,162388,162389],{"class":311}," 1000\n",[252,162391,162392],{"class":254,"line":170},[252,162393,2539],{"emptyLinePlaceholder":181},[252,162395,162396],{"class":254,"line":1318},[252,162397,2539],{"emptyLinePlaceholder":181},[252,162399,162400,162402,162404],{"class":254,"line":1333},[252,162401,32087],{"class":258},[252,162403,152113],{"class":2102},[252,162405,32093],{"class":262},[252,162407,162408,162410,162412,162415],{"class":254,"line":1339},[252,162409,31439],{"class":311},[252,162411,263],{"class":262},[252,162413,162414],{"class":367},"\"====== ATM ======\"",[252,162416,269],{"class":262},[252,162418,162419,162421,162423,162425],{"class":254,"line":1353},[252,162420,31439],{"class":311},[252,162422,263],{"class":262},[252,162424,160728],{"class":367},[252,162426,269],{"class":262},[252,162428,162429,162431,162433,162435],{"class":254,"line":1359},[252,162430,31439],{"class":311},[252,162432,263],{"class":262},[252,162434,160739],{"class":367},[252,162436,269],{"class":262},[252,162438,162439,162441,162443,162445],{"class":254,"line":1450},[252,162440,31439],{"class":311},[252,162442,263],{"class":262},[252,162444,160750],{"class":367},[252,162446,269],{"class":262},[252,162448,162449,162451,162453,162455],{"class":254,"line":1456},[252,162450,31439],{"class":311},[252,162452,263],{"class":262},[252,162454,160761],{"class":367},[252,162456,269],{"class":262},[252,162458,162459],{"class":254,"line":1468},[252,162460,2539],{"emptyLinePlaceholder":181},[252,162462,162463],{"class":254,"line":1751},[252,162464,2539],{"emptyLinePlaceholder":181},[252,162466,162467,162469,162472],{"class":254,"line":1756},[252,162468,32087],{"class":258},[252,162470,162471],{"class":2102}," show_balance",[252,162473,32093],{"class":262},[252,162475,162476,162478,162480,162482,162485,162487,162490,162492,162494],{"class":254,"line":1762},[252,162477,31439],{"class":311},[252,162479,263],{"class":262},[252,162481,315],{"class":258},[252,162483,162484],{"class":367},"\"当前余额:",[252,162486,1159],{"class":311},[252,162488,162489],{"class":262},"balance",[252,162491,1209],{"class":311},[252,162493,157092],{"class":367},[252,162495,269],{"class":262},[252,162497,162498],{"class":254,"line":1767},[252,162499,2539],{"emptyLinePlaceholder":181},[252,162501,162502],{"class":254,"line":1781},[252,162503,2539],{"emptyLinePlaceholder":181},[252,162505,162506,162508,162511],{"class":254,"line":1786},[252,162507,32087],{"class":258},[252,162509,162510],{"class":2102}," save_money",[252,162512,32093],{"class":262},[252,162514,162515,162517],{"class":254,"line":1792},[252,162516,161941],{"class":258},[252,162518,150179],{"class":262},[252,162520,162521,162524,162526,162528,162530,162532,162534,162537],{"class":254,"line":1813},[252,162522,162523],{"class":262},"    money ",[252,162525,308],{"class":258},[252,162527,109933],{"class":311},[252,162529,263],{"class":262},[252,162531,53961],{"class":311},[252,162533,263],{"class":262},[252,162535,162536],{"class":367},"\"请输入存款金额:\"",[252,162538,30637],{"class":262},[252,162540,162541,162543,162545,162547,162549],{"class":254,"line":1818},[252,162542,3240],{"class":258},[252,162544,150222],{"class":262},[252,162546,1727],{"class":258},[252,162548,4232],{"class":311},[252,162550,3878],{"class":262},[252,162552,162553,162555,162557,162560],{"class":254,"line":1832},[252,162554,32591],{"class":311},[252,162556,263],{"class":262},[252,162558,162559],{"class":367},"\"金额必须大于0\"",[252,162561,269],{"class":262},[252,162563,162564],{"class":254,"line":1837},[252,162565,152441],{"class":258},[252,162567,162568,162571,162573],{"class":254,"line":1866},[252,162569,162570],{"class":262},"    balance ",[252,162572,9617],{"class":258},[252,162574,150255],{"class":262},[252,162576,162577,162579,162581,162584],{"class":254,"line":1871},[252,162578,31439],{"class":311},[252,162580,263],{"class":262},[252,162582,162583],{"class":367},"\"存款成功\"",[252,162585,269],{"class":262},[252,162587,162588],{"class":254,"line":1888},[252,162589,162590],{"class":262},"    show_balance()\n",[252,162592,162593],{"class":254,"line":1893},[252,162594,2539],{"emptyLinePlaceholder":181},[252,162596,162597],{"class":254,"line":1898},[252,162598,2539],{"emptyLinePlaceholder":181},[252,162600,162601,162603,162606],{"class":254,"line":1903},[252,162602,32087],{"class":258},[252,162604,162605],{"class":2102}," withdraw_money",[252,162607,32093],{"class":262},[252,162609,162610,162612],{"class":254,"line":1917},[252,162611,161941],{"class":258},[252,162613,150179],{"class":262},[252,162615,162616,162618,162620,162622,162624,162626,162628,162631],{"class":254,"line":1922},[252,162617,162523],{"class":262},[252,162619,308],{"class":258},[252,162621,109933],{"class":311},[252,162623,263],{"class":262},[252,162625,53961],{"class":311},[252,162627,263],{"class":262},[252,162629,162630],{"class":367},"\"请输入取款金额:\"",[252,162632,30637],{"class":262},[252,162634,162635,162637,162639,162641,162643],{"class":254,"line":2716},[252,162636,3240],{"class":258},[252,162638,150222],{"class":262},[252,162640,1727],{"class":258},[252,162642,4232],{"class":311},[252,162644,3878],{"class":262},[252,162646,162647,162649,162651,162653],{"class":254,"line":2730},[252,162648,32591],{"class":311},[252,162650,263],{"class":262},[252,162652,162559],{"class":367},[252,162654,269],{"class":262},[252,162656,162657],{"class":254,"line":2738},[252,162658,152441],{"class":258},[252,162660,162661,162663,162665,162667],{"class":254,"line":2743},[252,162662,3240],{"class":258},[252,162664,150222],{"class":262},[252,162666,1223],{"class":258},[252,162668,162669],{"class":262}," balance:\n",[252,162671,162672,162674,162676,162678],{"class":254,"line":2749},[252,162673,32591],{"class":311},[252,162675,263],{"class":262},[252,162677,150317],{"class":367},[252,162679,269],{"class":262},[252,162681,162682],{"class":254,"line":2755},[252,162683,152441],{"class":258},[252,162685,162686,162688,162690],{"class":254,"line":2760},[252,162687,162570],{"class":262},[252,162689,150332],{"class":258},[252,162691,150255],{"class":262},[252,162693,162694,162696,162698,162701],{"class":254,"line":8088},[252,162695,31439],{"class":311},[252,162697,263],{"class":262},[252,162699,162700],{"class":367},"\"取款成功\"",[252,162702,269],{"class":262},[252,162704,162705],{"class":254,"line":8112},[252,162706,162590],{"class":262},[252,162708,162709],{"class":254,"line":8117},[252,162710,2539],{"emptyLinePlaceholder":181},[252,162712,162713],{"class":254,"line":8123},[252,162714,2539],{"emptyLinePlaceholder":181},[252,162716,162717,162719,162721],{"class":254,"line":8150},[252,162718,108799],{"class":258},[252,162720,95430],{"class":311},[252,162722,3878],{"class":262},[252,162724,162725],{"class":254,"line":8155},[252,162726,162727],{"class":262},"    show_menu()\n",[252,162729,162730,162732,162734,162736,162738,162740],{"class":254,"line":8161},[252,162731,160772],{"class":262},[252,162733,308],{"class":258},[252,162735,60745],{"class":311},[252,162737,263],{"class":262},[252,162739,153153],{"class":367},[252,162741,269],{"class":262},[252,162743,162744],{"class":254,"line":8173},[252,162745,2539],{"emptyLinePlaceholder":181},[252,162747,162748,162750,162752,162754,162756],{"class":254,"line":8185},[252,162749,3240],{"class":258},[252,162751,153166],{"class":262},[252,162753,3088],{"class":258},[252,162755,153171],{"class":367},[252,162757,3878],{"class":262},[252,162759,162760],{"class":254,"line":8197},[252,162761,162762],{"class":262},"        show_balance()\n",[252,162764,162765,162767,162769,162771,162773],{"class":254,"line":9856},[252,162766,39433],{"class":258},[252,162768,153166],{"class":262},[252,162770,3088],{"class":258},[252,162772,153190],{"class":367},[252,162774,3878],{"class":262},[252,162776,162777],{"class":254,"line":9881},[252,162778,162779],{"class":262},"        save_money()\n",[252,162781,162782,162784,162786,162788,162790],{"class":254,"line":9904},[252,162783,39433],{"class":258},[252,162785,153166],{"class":262},[252,162787,3088],{"class":258},[252,162789,153208],{"class":367},[252,162791,3878],{"class":262},[252,162793,162794],{"class":254,"line":9928},[252,162795,162796],{"class":262},"        withdraw_money()\n",[252,162798,162799,162801,162803,162805,162807],{"class":254,"line":9933},[252,162800,39433],{"class":258},[252,162802,153166],{"class":262},[252,162804,3088],{"class":258},[252,162806,153262],{"class":367},[252,162808,3878],{"class":262},[252,162810,162811,162813,162815,162817],{"class":254,"line":9938},[252,162812,32591],{"class":311},[252,162814,263],{"class":262},[252,162816,153273],{"class":367},[252,162818,269],{"class":262},[252,162820,162821],{"class":254,"line":9943},[252,162822,31767],{"class":258},[252,162824,162825,162827],{"class":254,"line":9952},[252,162826,158102],{"class":258},[252,162828,3878],{"class":262},[252,162830,162831,162833,162835,162837],{"class":254,"line":9957},[252,162832,32591],{"class":311},[252,162834,263],{"class":262},[252,162836,153294],{"class":367},[252,162838,269],{"class":262},[19,162840,162841],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162843,162845],{"id":162844},"_514-易错点","5.14 易错点",[207,162847,162848,162851,162854,162859,162864,162867],{},[210,162849,162850],{},"函数定义后必须调用才会执行。",[210,162852,162853],{},"函数名后面有括号才是调用。",[210,162855,162856,162858],{},[22,162857,17186],{}," 后面的代码不会执行。",[210,162860,162861,162862,28525],{},"没有返回值的函数默认返回 ",[22,162863,95824],{},[210,162865,162866],{},"局部变量不能在函数外部访问。",[210,162868,162869,162870,162872],{},"不要滥用 ",[22,162871,161906],{},"，更好的方式是让函数返回新值。",[19,162874,162875,162876,162878],{},"例如不用 ",[22,162877,161906],{}," 改写存款：",[244,162880,162882],{"className":30518,"code":162881,"language":30520,"meta":169,"style":169},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[22,162883,162884,162893,162904,162908,162912,162920,162933],{"__ignoreMap":169},[252,162885,162886,162888,162890],{"class":254,"line":255},[252,162887,32087],{"class":258},[252,162889,162510],{"class":2102},[252,162891,162892],{"class":262},"(balance, money):\n",[252,162894,162895,162897,162900,162902],{"class":254,"line":170},[252,162896,4229],{"class":258},[252,162898,162899],{"class":262}," balance ",[252,162901,744],{"class":258},[252,162903,150255],{"class":262},[252,162905,162906],{"class":254,"line":1318},[252,162907,2539],{"emptyLinePlaceholder":181},[252,162909,162910],{"class":254,"line":1333},[252,162911,2539],{"emptyLinePlaceholder":181},[252,162913,162914,162916,162918],{"class":254,"line":1339},[252,162915,162384],{"class":262},[252,162917,308],{"class":258},[252,162919,162389],{"class":311},[252,162921,162922,162924,162926,162929,162931],{"class":254,"line":1353},[252,162923,162384],{"class":262},[252,162925,308],{"class":258},[252,162927,162928],{"class":262}," save_money(balance, ",[252,162930,1861],{"class":311},[252,162932,269],{"class":262},[252,162934,162935,162937],{"class":254,"line":1359},[252,162936,30555],{"class":311},[252,162938,162939],{"class":262},"(balance)\n",[14,162941,162943],{"id":162942},"_515-本章练习","5.15 本章练习",[207,162945,162946,162953,162959,162965,162971],{},[210,162947,162948,162949,162952],{},"定义函数 ",[22,162950,162951],{},"print_student(name, age)","，输出学生信息。",[210,162954,162948,162955,162958],{},[22,162956,162957],{},"get_max(a, b, c)","，返回三个数中的最大值。",[210,162960,162948,162961,162964],{},[22,162962,162963],{},"is_even(num)","，判断一个数是否为偶数。",[210,162966,162948,162967,162970],{},[22,162968,162969],{},"calculate_bmi(weight, height)","，返回 BMI。",[210,162972,162973],{},"把第 4 章的菜单程序拆分成多个函数。",[5266,162975,162976],{},"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":169,"searchDepth":170,"depth":170,"links":162978},[162979,162980,162981,162982,162983,162984,162985,162986,162987,162991,162992,162993,162994,162995,162996],{"id":160999,"depth":170,"text":161000},{"id":161040,"depth":170,"text":161041},{"id":161130,"depth":170,"text":161131},{"id":161211,"depth":170,"text":161212},{"id":161344,"depth":170,"text":161345},{"id":161466,"depth":170,"text":161467},{"id":161588,"depth":170,"text":161589},{"id":161665,"depth":170,"text":161666},{"id":161787,"depth":170,"text":161788,"children":162988},[162989,162990],{"id":161791,"depth":1318,"text":161792},{"id":161849,"depth":1318,"text":161850},{"id":161978,"depth":170,"text":161979},{"id":162104,"depth":170,"text":162105},{"id":162217,"depth":170,"text":162218},{"id":162373,"depth":170,"text":162374},{"id":162844,"depth":170,"text":162845},{"id":162942,"depth":170,"text":162943},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160991,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163003,"title":163004,"body":163005,"description":178,"extension":179,"meta":166049,"navigation":181,"path":166050,"seo":166051,"stem":166052,"__hash__":166053},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163006,"toc":166030},[163007,163010,163014,163017,163020,163124,163127,163131,163134,163214,163217,163221,163224,163284,163287,163323,163326,163341,163345,163418,163421,163476,163479,163549,163552,163636,163646,163704,163708,163753,163756,163782,163785,163891,163895,163898,163940,163943,164007,164010,164014,164017,164078,164081,164111,164114,164152,164156,164159,164168,164171,164295,164298,164339,164343,164346,164357,164397,164400,164415,164420,164423,164490,164493,164583,164587,164590,164638,164641,164668,164670,164700,164703,164723,164726,164757,164760,164793,164797,164800,164824,164827,164851,164854,164878,164882,164885,165015,165018,165098,165101,165176,165180,165183,165233,165236,165278,165281,165305,165307,165331,165334,165389,165392,165458,165462,165465,165468,165506,165509,165562,165565,165611,165614,165647,165650,165654,165973,165977,166006,166010,166027],[10,163008,163004],{"id":163009},"_6-数据容器",[14,163011,163013],{"id":163012},"_61-什么是数据容器","6.1 什么是数据容器",[19,163015,163016],{},"数据容器用于一次保存多个数据。",[19,163018,163019],{},"常见容器：",[400,163021,163022,163039],{},[403,163023,163024],{},[406,163025,163026,163028,163031,163034,163037],{},[409,163027,25911],{},[409,163029,163030],{},"是否有序",[409,163032,163033],{},"是否可变",[409,163035,163036],{},"是否允许重复",[409,163038,27632],{},[447,163040,163041,163059,163075,163090,163107],{},[406,163042,163043,163046,163049,163052,163055],{},[452,163044,163045],{},"list列表",[452,163047,163048],{},"有序",[452,163050,163051],{},"可变",[452,163053,163054],{},"允许",[452,163056,163057],{},[22,163058,155337],{},[406,163060,163061,163064,163066,163069,163071],{},[452,163062,163063],{},"tuple元组",[452,163065,163048],{},[452,163067,163068],{},"不可变",[452,163070,163054],{},[452,163072,163073],{},[22,163074,155350],{},[406,163076,163077,163080,163082,163084,163086],{},[452,163078,163079],{},"str字符串",[452,163081,163048],{},[452,163083,163068],{},[452,163085,163054],{},[452,163087,163088],{},[22,163089,155960],{},[406,163091,163092,163095,163098,163100,163103],{},[452,163093,163094],{},"set集合",[452,163096,163097],{},"无序",[452,163099,163051],{},[452,163101,163102],{},"不允许",[452,163104,163105],{},[22,163106,155375],{},[406,163108,163109,163112,163114,163116,163119],{},[452,163110,163111],{},"dict字典",[452,163113,163048],{},[452,163115,163051],{},[452,163117,163118],{},"key不允许重复",[452,163120,163121],{},[22,163122,163123],{},"{\"name\": \"小明\"}",[19,163125,163126],{},"Python 3.7 之后，字典保持插入顺序。",[14,163128,163130],{"id":163129},"_62-列表list","6.2 列表list",[19,163132,163133],{},"列表用于保存一组有顺序的数据。",[244,163135,163137],{"className":30518,"code":163136,"language":30520,"meta":169,"style":169},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[22,163138,163139,163159,163184,163205],{"__ignoreMap":169},[252,163140,163141,163143,163145,163147,163149,163151,163153,163155,163157],{"class":254,"line":255},[252,163142,160460],{"class":262},[252,163144,308],{"class":258},[252,163146,52366],{"class":262},[252,163148,149968],{"class":367},[252,163150,12575],{"class":262},[252,163152,151016],{"class":367},[252,163154,12575],{"class":262},[252,163156,159811],{"class":367},[252,163158,33386],{"class":262},[252,163160,163161,163164,163166,163168,163170,163172,163174,163176,163178,163180,163182],{"class":254,"line":170},[252,163162,163163],{"class":262},"numbers ",[252,163165,308],{"class":258},[252,163167,52366],{"class":262},[252,163169,480],{"class":311},[252,163171,12575],{"class":262},[252,163173,340],{"class":311},[252,163175,12575],{"class":262},[252,163177,334],{"class":311},[252,163179,12575],{"class":262},[252,163181,556],{"class":311},[252,163183,33386],{"class":262},[252,163185,163186,163189,163191,163193,163195,163197,163199,163201,163203],{"class":254,"line":1318},[252,163187,163188],{"class":262},"mixed ",[252,163190,308],{"class":258},[252,163192,52366],{"class":262},[252,163194,149968],{"class":367},[252,163196,12575],{"class":262},[252,163198,913],{"class":311},[252,163200,12575],{"class":262},[252,163202,31616],{"class":311},[252,163204,33386],{"class":262},[252,163206,163207,163210,163212],{"class":254,"line":1333},[252,163208,163209],{"class":262},"empty ",[252,163211,308],{"class":258},[252,163213,51978],{"class":262},[19,163215,163216],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163218,163220],{"id":163219},"_63-列表索引","6.3 列表索引",[19,163222,163223],{},"正向索引从 0 开始：",[244,163225,163227],{"className":30518,"code":163226,"language":30520,"meta":169,"style":169},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[22,163228,163229,163249,163253,163264,163274],{"__ignoreMap":169},[252,163230,163231,163233,163235,163237,163239,163241,163243,163245,163247],{"class":254,"line":255},[252,163232,160460],{"class":262},[252,163234,308],{"class":258},[252,163236,52366],{"class":262},[252,163238,149968],{"class":367},[252,163240,12575],{"class":262},[252,163242,151016],{"class":367},[252,163244,12575],{"class":262},[252,163246,159811],{"class":367},[252,163248,33386],{"class":262},[252,163250,163251],{"class":254,"line":170},[252,163252,2539],{"emptyLinePlaceholder":181},[252,163254,163255,163257,163260,163262],{"class":254,"line":1318},[252,163256,30555],{"class":311},[252,163258,163259],{"class":262},"(names[",[252,163261,454],{"class":311},[252,163263,4796],{"class":262},[252,163265,163266,163268,163270,163272],{"class":254,"line":1333},[252,163267,30555],{"class":311},[252,163269,163259],{"class":262},[252,163271,480],{"class":311},[252,163273,4796],{"class":262},[252,163275,163276,163278,163280,163282],{"class":254,"line":1339},[252,163277,30555],{"class":311},[252,163279,163259],{"class":262},[252,163281,340],{"class":311},[252,163283,4796],{"class":262},[19,163285,163286],{},"反向索引从 -1 开始：",[244,163288,163290],{"className":30518,"code":163289,"language":30520,"meta":169,"style":169},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[22,163291,163292,163308],{"__ignoreMap":169},[252,163293,163294,163296,163298,163300,163302,163305],{"class":254,"line":255},[252,163295,30555],{"class":311},[252,163297,163259],{"class":262},[252,163299,795],{"class":258},[252,163301,480],{"class":311},[252,163303,163304],{"class":262},"])  ",[252,163306,163307],{"class":321},"# 小刚\n",[252,163309,163310,163312,163314,163316,163318,163320],{"class":254,"line":170},[252,163311,30555],{"class":311},[252,163313,163259],{"class":262},[252,163315,795],{"class":258},[252,163317,340],{"class":311},[252,163319,163304],{"class":262},[252,163321,163322],{"class":321},"# 小红\n",[19,163324,163325],{},"索引越界会报错：",[244,163327,163329],{"className":30518,"code":163328,"language":30520,"meta":169,"style":169},"print(names[3])\n",[22,163330,163331],{"__ignoreMap":169},[252,163332,163333,163335,163337,163339],{"class":254,"line":255},[252,163334,30555],{"class":311},[252,163336,163259],{"class":262},[252,163338,334],{"class":311},[252,163340,4796],{"class":262},[14,163342,163344],{"id":163343},"_64-列表常用方法","6.4 列表常用方法",[244,163346,163348],{"className":30518,"code":163347,"language":30520,"meta":169,"style":169},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[22,163349,163350,163366,163370,163379,163393,163407,163411],{"__ignoreMap":169},[252,163351,163352,163354,163356,163358,163360,163362,163364],{"class":254,"line":255},[252,163353,160460],{"class":262},[252,163355,308],{"class":258},[252,163357,52366],{"class":262},[252,163359,149968],{"class":367},[252,163361,12575],{"class":262},[252,163363,151016],{"class":367},[252,163365,33386],{"class":262},[252,163367,163368],{"class":254,"line":170},[252,163369,2539],{"emptyLinePlaceholder":181},[252,163371,163372,163375,163377],{"class":254,"line":1318},[252,163373,163374],{"class":262},"names.append(",[252,163376,159811],{"class":367},[252,163378,269],{"class":262},[252,163380,163381,163384,163386,163388,163391],{"class":254,"line":1333},[252,163382,163383],{"class":262},"names.insert(",[252,163385,480],{"class":311},[252,163387,12575],{"class":262},[252,163389,163390],{"class":367},"\"小李\"",[252,163392,269],{"class":262},[252,163394,163395,163398,163400,163402,163405],{"class":254,"line":1339},[252,163396,163397],{"class":262},"names.extend([",[252,163399,8823],{"class":367},[252,163401,12575],{"class":262},[252,163403,163404],{"class":367},"\"小赵\"",[252,163406,4796],{"class":262},[252,163408,163409],{"class":254,"line":1353},[252,163410,2539],{"emptyLinePlaceholder":181},[252,163412,163413,163415],{"class":254,"line":1359},[252,163414,30555],{"class":311},[252,163416,163417],{"class":262},"(names)\n",[19,163419,163420],{},"删除元素：",[244,163422,163424],{"className":30518,"code":163423,"language":30520,"meta":169,"style":169},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[22,163425,163426,163435,163445,163459,163471],{"__ignoreMap":169},[252,163427,163428,163431,163433],{"class":254,"line":255},[252,163429,163430],{"class":262},"names.remove(",[252,163432,151016],{"class":367},[252,163434,269],{"class":262},[252,163436,163437,163440,163442],{"class":254,"line":170},[252,163438,163439],{"class":262},"last ",[252,163441,308],{"class":258},[252,163443,163444],{"class":262}," names.pop()\n",[252,163446,163447,163450,163452,163455,163457],{"class":254,"line":1318},[252,163448,163449],{"class":262},"first ",[252,163451,308],{"class":258},[252,163453,163454],{"class":262}," names.pop(",[252,163456,454],{"class":311},[252,163458,269],{"class":262},[252,163460,163461,163464,163467,163469],{"class":254,"line":1333},[252,163462,163463],{"class":258},"del",[252,163465,163466],{"class":262}," names[",[252,163468,454],{"class":311},[252,163470,33386],{"class":262},[252,163472,163473],{"class":254,"line":1339},[252,163474,163475],{"class":262},"names.clear()\n",[19,163477,163478],{},"查询和统计：",[244,163480,163482],{"className":30518,"code":163481,"language":30520,"meta":169,"style":169},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[22,163483,163484,163512,163516,163527,163538],{"__ignoreMap":169},[252,163485,163486,163488,163490,163492,163494,163496,163498,163500,163502,163504,163506,163508,163510],{"class":254,"line":255},[252,163487,163163],{"class":262},[252,163489,308],{"class":258},[252,163491,52366],{"class":262},[252,163493,480],{"class":311},[252,163495,12575],{"class":262},[252,163497,340],{"class":311},[252,163499,12575],{"class":262},[252,163501,334],{"class":311},[252,163503,12575],{"class":262},[252,163505,340],{"class":311},[252,163507,12575],{"class":262},[252,163509,556],{"class":311},[252,163511,33386],{"class":262},[252,163513,163514],{"class":254,"line":170},[252,163515,2539],{"emptyLinePlaceholder":181},[252,163517,163518,163520,163523,163525],{"class":254,"line":1318},[252,163519,30555],{"class":311},[252,163521,163522],{"class":262},"(numbers.index(",[252,163524,334],{"class":311},[252,163526,30637],{"class":262},[252,163528,163529,163531,163534,163536],{"class":254,"line":1333},[252,163530,30555],{"class":311},[252,163532,163533],{"class":262},"(numbers.count(",[252,163535,340],{"class":311},[252,163537,30637],{"class":262},[252,163539,163540,163542,163544,163546],{"class":254,"line":1339},[252,163541,30555],{"class":311},[252,163543,263],{"class":262},[252,163545,7498],{"class":311},[252,163547,163548],{"class":262},"(numbers))\n",[19,163550,163551],{},"排序：",[244,163553,163555],{"className":30518,"code":163554,"language":30520,"meta":169,"style":169},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[22,163556,163557,163581,163585,163590,163597,163601,163615,163621,163625,163630],{"__ignoreMap":169},[252,163558,163559,163561,163563,163565,163567,163569,163571,163573,163575,163577,163579],{"class":254,"line":255},[252,163560,163163],{"class":262},[252,163562,308],{"class":258},[252,163564,52366],{"class":262},[252,163566,334],{"class":311},[252,163568,12575],{"class":262},[252,163570,480],{"class":311},[252,163572,12575],{"class":262},[252,163574,582],{"class":311},[252,163576,12575],{"class":262},[252,163578,340],{"class":311},[252,163580,33386],{"class":262},[252,163582,163583],{"class":254,"line":170},[252,163584,2539],{"emptyLinePlaceholder":181},[252,163586,163587],{"class":254,"line":1318},[252,163588,163589],{"class":262},"numbers.sort()\n",[252,163591,163592,163594],{"class":254,"line":1333},[252,163593,30555],{"class":311},[252,163595,163596],{"class":262},"(numbers)\n",[252,163598,163599],{"class":254,"line":1339},[252,163600,2539],{"emptyLinePlaceholder":181},[252,163602,163603,163606,163609,163611,163613],{"class":254,"line":1353},[252,163604,163605],{"class":262},"numbers.sort(",[252,163607,163608],{"class":5356},"reverse",[252,163610,308],{"class":258},[252,163612,31616],{"class":311},[252,163614,269],{"class":262},[252,163616,163617,163619],{"class":254,"line":1359},[252,163618,30555],{"class":311},[252,163620,163596],{"class":262},[252,163622,163623],{"class":254,"line":1450},[252,163624,2539],{"emptyLinePlaceholder":181},[252,163626,163627],{"class":254,"line":1456},[252,163628,163629],{"class":262},"numbers.reverse()\n",[252,163631,163632,163634],{"class":254,"line":1468},[252,163633,30555],{"class":311},[252,163635,163596],{"class":262},[19,163637,163638,163641,163642,163645],{},[22,163639,163640],{},"sort()"," 会修改原列表，",[22,163643,163644],{},"sorted()"," 返回新列表。",[244,163647,163649],{"className":30518,"code":163648,"language":30520,"meta":169,"style":169},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[22,163650,163651,163675,163687,163691,163697],{"__ignoreMap":169},[252,163652,163653,163655,163657,163659,163661,163663,163665,163667,163669,163671,163673],{"class":254,"line":255},[252,163654,163163],{"class":262},[252,163656,308],{"class":258},[252,163658,52366],{"class":262},[252,163660,334],{"class":311},[252,163662,12575],{"class":262},[252,163664,480],{"class":311},[252,163666,12575],{"class":262},[252,163668,582],{"class":311},[252,163670,12575],{"class":262},[252,163672,340],{"class":311},[252,163674,33386],{"class":262},[252,163676,163677,163680,163682,163685],{"class":254,"line":170},[252,163678,163679],{"class":262},"new_numbers ",[252,163681,308],{"class":258},[252,163683,163684],{"class":311}," sorted",[252,163686,163596],{"class":262},[252,163688,163689],{"class":254,"line":1318},[252,163690,2539],{"emptyLinePlaceholder":181},[252,163692,163693,163695],{"class":254,"line":1333},[252,163694,30555],{"class":311},[252,163696,163596],{"class":262},[252,163698,163699,163701],{"class":254,"line":1339},[252,163700,30555],{"class":311},[252,163702,163703],{"class":262},"(new_numbers)\n",[14,163705,163707],{"id":163706},"_65-列表遍历","6.5 列表遍历",[244,163709,163711],{"className":30518,"code":163710,"language":30520,"meta":169,"style":169},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[22,163712,163713,163733,163737,163747],{"__ignoreMap":169},[252,163714,163715,163717,163719,163721,163723,163725,163727,163729,163731],{"class":254,"line":255},[252,163716,160460],{"class":262},[252,163718,308],{"class":258},[252,163720,52366],{"class":262},[252,163722,149968],{"class":367},[252,163724,12575],{"class":262},[252,163726,151016],{"class":367},[252,163728,12575],{"class":262},[252,163730,159811],{"class":367},[252,163732,33386],{"class":262},[252,163734,163735],{"class":254,"line":170},[252,163736,2539],{"emptyLinePlaceholder":181},[252,163738,163739,163741,163743,163745],{"class":254,"line":1318},[252,163740,3164],{"class":258},[252,163742,160496],{"class":262},[252,163744,26183],{"class":258},[252,163746,160501],{"class":262},[252,163748,163749,163751],{"class":254,"line":1333},[252,163750,31439],{"class":311},[252,163752,150740],{"class":262},[19,163754,163755],{},"需要索引时：",[244,163757,163759],{"className":30518,"code":163758,"language":30520,"meta":169,"style":169},"for index, name in enumerate(names):\n    print(index, name)\n",[22,163760,163761,163775],{"__ignoreMap":169},[252,163762,163763,163765,163768,163770,163772],{"class":254,"line":255},[252,163764,3164],{"class":258},[252,163766,163767],{"class":262}," index, name ",[252,163769,26183],{"class":258},[252,163771,31746],{"class":311},[252,163773,163774],{"class":262},"(names):\n",[252,163776,163777,163779],{"class":254,"line":170},[252,163778,31439],{"class":311},[252,163780,163781],{"class":262},"(index, name)\n",[19,163783,163784],{},"统计总分：",[244,163786,163788],{"className":30518,"code":163787,"language":30520,"meta":169,"style":169},"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",[22,163789,163790,163815,163823,163827,163838,163846,163850,163867],{"__ignoreMap":169},[252,163791,163792,163795,163797,163799,163801,163803,163805,163807,163809,163811,163813],{"class":254,"line":255},[252,163793,163794],{"class":262},"scores ",[252,163796,308],{"class":258},[252,163798,52366],{"class":262},[252,163800,1125],{"class":311},[252,163802,12575],{"class":262},[252,163804,999],{"class":311},[252,163806,12575],{"class":262},[252,163808,517],{"class":311},[252,163810,12575],{"class":262},[252,163812,824],{"class":311},[252,163814,33386],{"class":262},[252,163816,163817,163819,163821],{"class":254,"line":170},[252,163818,157340],{"class":262},[252,163820,308],{"class":258},[252,163822,47473],{"class":311},[252,163824,163825],{"class":254,"line":1318},[252,163826,2539],{"emptyLinePlaceholder":181},[252,163828,163829,163831,163833,163835],{"class":254,"line":1333},[252,163830,3164],{"class":258},[252,163832,157863],{"class":262},[252,163834,26183],{"class":258},[252,163836,163837],{"class":262}," scores:\n",[252,163839,163840,163842,163844],{"class":254,"line":1339},[252,163841,159387],{"class":262},[252,163843,9617],{"class":258},[252,163845,1718],{"class":262},[252,163847,163848],{"class":254,"line":1353},[252,163849,2539],{"emptyLinePlaceholder":181},[252,163851,163852,163855,163857,163860,163862,163864],{"class":254,"line":1359},[252,163853,163854],{"class":262},"avg ",[252,163856,308],{"class":258},[252,163858,163859],{"class":262}," total ",[252,163861,847],{"class":258},[252,163863,7471],{"class":311},[252,163865,163866],{"class":262},"(scores)\n",[252,163868,163869,163871,163873,163875,163878,163880,163883,163885,163887,163889],{"class":254,"line":1450},[252,163870,30555],{"class":311},[252,163872,263],{"class":262},[252,163874,315],{"class":258},[252,163876,163877],{"class":367},"\"平均分:",[252,163879,1159],{"class":311},[252,163881,163882],{"class":262},"avg",[252,163884,157239],{"class":258},[252,163886,1209],{"class":311},[252,163888,514],{"class":367},[252,163890,269],{"class":262},[14,163892,163894],{"id":163893},"_66-元组tuple","6.6 元组tuple",[19,163896,163897],{},"元组和列表类似，但不可修改。",[244,163899,163901],{"className":30518,"code":163900,"language":30520,"meta":169,"style":169},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[22,163902,163903,163920],{"__ignoreMap":169},[252,163904,163905,163908,163910,163912,163914,163916,163918],{"class":254,"line":255},[252,163906,163907],{"class":262},"point ",[252,163909,308],{"class":258},[252,163911,1797],{"class":262},[252,163913,709],{"class":311},[252,163915,12575],{"class":262},[252,163917,963],{"class":311},[252,163919,269],{"class":262},[252,163921,163922,163924,163926,163928,163930,163932,163934,163936,163938],{"class":254,"line":170},[252,163923,116450],{"class":262},[252,163925,308],{"class":258},[252,163927,1797],{"class":262},[252,163929,149968],{"class":367},[252,163931,12575],{"class":262},[252,163933,913],{"class":311},[252,163935,12575],{"class":262},[252,163937,69409],{"class":367},[252,163939,269],{"class":262},[19,163941,163942],{},"单元素元组必须加逗号：",[244,163944,163946],{"className":30518,"code":163945,"language":30520,"meta":169,"style":169},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[22,163947,163948,163962,163975,163979,163993],{"__ignoreMap":169},[252,163949,163950,163953,163955,163957,163959],{"class":254,"line":255},[252,163951,163952],{"class":262},"t1 ",[252,163954,308],{"class":258},[252,163956,1797],{"class":262},[252,163958,709],{"class":311},[252,163960,163961],{"class":262},",)\n",[252,163963,163964,163967,163969,163971,163973],{"class":254,"line":170},[252,163965,163966],{"class":262},"t2 ",[252,163968,308],{"class":258},[252,163970,1797],{"class":262},[252,163972,709],{"class":311},[252,163974,269],{"class":262},[252,163976,163977],{"class":254,"line":1318},[252,163978,2539],{"emptyLinePlaceholder":181},[252,163980,163981,163983,163985,163987,163990],{"class":254,"line":1333},[252,163982,30555],{"class":311},[252,163984,263],{"class":262},[252,163986,103243],{"class":311},[252,163988,163989],{"class":262},"(t1))  ",[252,163991,163992],{"class":321},"# tuple\n",[252,163994,163995,163997,163999,164001,164004],{"class":254,"line":1339},[252,163996,30555],{"class":311},[252,163998,263],{"class":262},[252,164000,103243],{"class":311},[252,164002,164003],{"class":262},"(t2))  ",[252,164005,164006],{"class":321},"# int\n",[19,164008,164009],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164011,164013],{"id":164012},"_67-字符串str","6.7 字符串str",[19,164015,164016],{},"字符串也是序列，可以索引、切片和遍历。",[244,164018,164020],{"className":30518,"code":164019,"language":30520,"meta":169,"style":169},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[22,164021,164022,164030,164034,164045,164057,164061,164072],{"__ignoreMap":169},[252,164023,164024,164026,164028],{"class":254,"line":255},[252,164025,156524],{"class":262},[252,164027,308],{"class":258},[252,164029,159761],{"class":367},[252,164031,164032],{"class":254,"line":170},[252,164033,2539],{"emptyLinePlaceholder":181},[252,164035,164036,164038,164041,164043],{"class":254,"line":1318},[252,164037,30555],{"class":311},[252,164039,164040],{"class":262},"(text[",[252,164042,454],{"class":311},[252,164044,4796],{"class":262},[252,164046,164047,164049,164051,164053,164055],{"class":254,"line":1333},[252,164048,30555],{"class":311},[252,164050,164040],{"class":262},[252,164052,795],{"class":258},[252,164054,480],{"class":311},[252,164056,4796],{"class":262},[252,164058,164059],{"class":254,"line":1339},[252,164060,2539],{"emptyLinePlaceholder":181},[252,164062,164063,164065,164067,164069],{"class":254,"line":1353},[252,164064,3164],{"class":258},[252,164066,159772],{"class":262},[252,164068,26183],{"class":258},[252,164070,164071],{"class":262}," text:\n",[252,164073,164074,164076],{"class":254,"line":1359},[252,164075,31439],{"class":311},[252,164077,159783],{"class":262},[19,164079,164080],{},"字符串不可变：",[244,164082,164084],{"className":30518,"code":164083,"language":30520,"meta":169,"style":169},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[22,164085,164086,164094],{"__ignoreMap":169},[252,164087,164088,164090,164092],{"class":254,"line":255},[252,164089,156524],{"class":262},[252,164091,308],{"class":258},[252,164093,159761],{"class":367},[252,164095,164096,164099,164101,164103,164105,164108],{"class":254,"line":170},[252,164097,164098],{"class":262},"text[",[252,164100,454],{"class":311},[252,164102,4582],{"class":262},[252,164104,308],{"class":258},[252,164106,164107],{"class":367}," \"P\"",[252,164109,164110],{"class":321},"  # 报错\n",[19,164112,164113],{},"如果要得到新字符串：",[244,164115,164117],{"className":30518,"code":164116,"language":30520,"meta":169,"style":169},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[22,164118,164119,164127,164145],{"__ignoreMap":169},[252,164120,164121,164123,164125],{"class":254,"line":255},[252,164122,156524],{"class":262},[252,164124,308],{"class":258},[252,164126,159761],{"class":367},[252,164128,164129,164131,164133,164135,164137,164140,164142],{"class":254,"line":170},[252,164130,156524],{"class":262},[252,164132,308],{"class":258},[252,164134,164107],{"class":367},[252,164136,45706],{"class":258},[252,164138,164139],{"class":262}," text[",[252,164141,480],{"class":311},[252,164143,164144],{"class":262},":]\n",[252,164146,164147,164149],{"class":254,"line":1318},[252,164148,30555],{"class":311},[252,164150,164151],{"class":262},"(text)\n",[14,164153,164155],{"id":164154},"_68-切片","6.8 切片",[19,164157,164158],{},"切片用于从序列中取一部分。",[244,164160,164162],{"className":30518,"code":164161,"language":30520,"meta":169,"style":169},"序列[开始:结束:步长]\n",[22,164163,164164],{"__ignoreMap":169},[252,164165,164166],{"class":254,"line":255},[252,164167,164161],{"class":262},[19,164169,164170],{},"结束位置不包含。",[244,164172,164174],{"className":30518,"code":164173,"language":30520,"meta":169,"style":169},"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",[22,164175,164176,164213,164217,164236,164251,164265,164279],{"__ignoreMap":169},[252,164177,164178,164181,164183,164185,164187,164189,164191,164193,164195,164197,164199,164201,164203,164205,164207,164209,164211],{"class":254,"line":255},[252,164179,164180],{"class":262},"nums ",[252,164182,308],{"class":258},[252,164184,52366],{"class":262},[252,164186,454],{"class":311},[252,164188,12575],{"class":262},[252,164190,480],{"class":311},[252,164192,12575],{"class":262},[252,164194,340],{"class":311},[252,164196,12575],{"class":262},[252,164198,334],{"class":311},[252,164200,12575],{"class":262},[252,164202,556],{"class":311},[252,164204,12575],{"class":262},[252,164206,582],{"class":311},[252,164208,12575],{"class":262},[252,164210,607],{"class":311},[252,164212,33386],{"class":262},[252,164214,164215],{"class":254,"line":170},[252,164216,2539],{"emptyLinePlaceholder":181},[252,164218,164219,164221,164224,164226,164228,164230,164233],{"class":254,"line":1318},[252,164220,30555],{"class":311},[252,164222,164223],{"class":262},"(nums[",[252,164225,480],{"class":311},[252,164227,1122],{"class":262},[252,164229,556],{"class":311},[252,164231,164232],{"class":262},"])    ",[252,164234,164235],{"class":321},"# [1, 2, 3]\n",[252,164237,164238,164240,164243,164245,164248],{"class":254,"line":1333},[252,164239,30555],{"class":311},[252,164241,164242],{"class":262},"(nums[:",[252,164244,334],{"class":311},[252,164246,164247],{"class":262},"])     ",[252,164249,164250],{"class":321},"# [0, 1, 2]\n",[252,164252,164253,164255,164257,164259,164262],{"class":254,"line":1339},[252,164254,30555],{"class":311},[252,164256,164223],{"class":262},[252,164258,334],{"class":311},[252,164260,164261],{"class":262},":])     ",[252,164263,164264],{"class":321},"# [3, 4, 5, 6]\n",[252,164266,164267,164269,164272,164274,164276],{"class":254,"line":1353},[252,164268,30555],{"class":311},[252,164270,164271],{"class":262},"(nums[::",[252,164273,340],{"class":311},[252,164275,164232],{"class":262},[252,164277,164278],{"class":321},"# [0, 2, 4, 6]\n",[252,164280,164281,164283,164285,164287,164289,164292],{"class":254,"line":1359},[252,164282,30555],{"class":311},[252,164284,164271],{"class":262},[252,164286,795],{"class":258},[252,164288,480],{"class":311},[252,164290,164291],{"class":262},"])   ",[252,164293,164294],{"class":321},"# 反转\n",[19,164296,164297],{},"字符串切片：",[244,164299,164301],{"className":30518,"code":164300,"language":30520,"meta":169,"style":169},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[22,164302,164303,164312,164326],{"__ignoreMap":169},[252,164304,164305,164307,164309],{"class":254,"line":255},[252,164306,156524],{"class":262},[252,164308,308],{"class":258},[252,164310,164311],{"class":367}," \"abcdef\"\n",[252,164313,164314,164316,164318,164320,164322,164324],{"class":254,"line":170},[252,164315,30555],{"class":311},[252,164317,164040],{"class":262},[252,164319,480],{"class":311},[252,164321,1122],{"class":262},[252,164323,556],{"class":311},[252,164325,4796],{"class":262},[252,164327,164328,164330,164333,164335,164337],{"class":254,"line":1318},[252,164329,30555],{"class":311},[252,164331,164332],{"class":262},"(text[::",[252,164334,795],{"class":258},[252,164336,480],{"class":311},[252,164338,4796],{"class":262},[14,164340,164342],{"id":164341},"_69-集合set","6.9 集合set",[19,164344,164345],{},"集合特点：",[207,164347,164348,164351,164354],{},[210,164349,164350],{},"无序。",[210,164352,164353],{},"元素不重复。",[210,164355,164356],{},"可以做交集、并集、差集。",[244,164358,164360],{"className":30518,"code":164359,"language":30520,"meta":169,"style":169},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[22,164361,164362,164390],{"__ignoreMap":169},[252,164363,164364,164366,164368,164370,164372,164374,164376,164378,164380,164382,164384,164386,164388],{"class":254,"line":255},[252,164365,164180],{"class":262},[252,164367,308],{"class":258},[252,164369,4587],{"class":262},[252,164371,480],{"class":311},[252,164373,12575],{"class":262},[252,164375,340],{"class":311},[252,164377,12575],{"class":262},[252,164379,334],{"class":311},[252,164381,12575],{"class":262},[252,164383,334],{"class":311},[252,164385,12575],{"class":262},[252,164387,556],{"class":311},[252,164389,1704],{"class":262},[252,164391,164392,164394],{"class":254,"line":170},[252,164393,30555],{"class":311},[252,164395,164396],{"class":262},"(nums)\n",[19,164398,164399],{},"创建空集合：",[244,164401,164403],{"className":30518,"code":164402,"language":30520,"meta":169,"style":169},"s = set()\n",[22,164404,164405],{"__ignoreMap":169},[252,164406,164407,164409,164411,164413],{"class":254,"line":255},[252,164408,10719],{"class":262},[252,164410,308],{"class":258},[252,164412,119858],{"class":311},[252,164414,2115],{"class":262},[19,164416,9165,164417,164419],{},[22,164418,32599],{}," 是空字典，不是空集合。",[19,164421,164422],{},"集合常用操作：",[244,164424,164426],{"className":30518,"code":164425,"language":30520,"meta":169,"style":169},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[22,164427,164428,164448,164452,164461,164470,164479],{"__ignoreMap":169},[252,164429,164430,164432,164434,164436,164438,164440,164442,164444,164446],{"class":254,"line":255},[252,164431,10719],{"class":262},[252,164433,308],{"class":258},[252,164435,4587],{"class":262},[252,164437,480],{"class":311},[252,164439,12575],{"class":262},[252,164441,340],{"class":311},[252,164443,12575],{"class":262},[252,164445,334],{"class":311},[252,164447,1704],{"class":262},[252,164449,164450],{"class":254,"line":170},[252,164451,2539],{"emptyLinePlaceholder":181},[252,164453,164454,164457,164459],{"class":254,"line":1318},[252,164455,164456],{"class":262},"s.add(",[252,164458,556],{"class":311},[252,164460,269],{"class":262},[252,164462,164463,164466,164468],{"class":254,"line":1333},[252,164464,164465],{"class":262},"s.remove(",[252,164467,340],{"class":311},[252,164469,269],{"class":262},[252,164471,164472,164475,164477],{"class":254,"line":1339},[252,164473,164474],{"class":262},"s.discard(",[252,164476,709],{"class":311},[252,164478,269],{"class":262},[252,164480,164481,164483,164485,164487],{"class":254,"line":1353},[252,164482,30555],{"class":311},[252,164484,263],{"class":262},[252,164486,7498],{"class":311},[252,164488,164489],{"class":262},"(s))\n",[19,164491,164492],{},"交并差：",[244,164494,164496],{"className":30518,"code":164495,"language":30520,"meta":169,"style":169},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[22,164497,164498,164518,164538,164542,164557,164570],{"__ignoreMap":169},[252,164499,164500,164502,164504,164506,164508,164510,164512,164514,164516],{"class":254,"line":255},[252,164501,11059],{"class":262},[252,164503,308],{"class":258},[252,164505,4587],{"class":262},[252,164507,480],{"class":311},[252,164509,12575],{"class":262},[252,164511,340],{"class":311},[252,164513,12575],{"class":262},[252,164515,334],{"class":311},[252,164517,1704],{"class":262},[252,164519,164520,164522,164524,164526,164528,164530,164532,164534,164536],{"class":254,"line":170},[252,164521,11085],{"class":262},[252,164523,308],{"class":258},[252,164525,4587],{"class":262},[252,164527,334],{"class":311},[252,164529,12575],{"class":262},[252,164531,556],{"class":311},[252,164533,12575],{"class":262},[252,164535,582],{"class":311},[252,164537,1704],{"class":262},[252,164539,164540],{"class":254,"line":1318},[252,164541,2539],{"emptyLinePlaceholder":181},[252,164543,164544,164546,164549,164551,164554],{"class":254,"line":1333},[252,164545,30555],{"class":311},[252,164547,164548],{"class":262},"(a ",[252,164550,616],{"class":258},[252,164552,164553],{"class":262}," b)  ",[252,164555,164556],{"class":321},"# 交集\n",[252,164558,164559,164561,164563,164565,164567],{"class":254,"line":1339},[252,164560,30555],{"class":311},[252,164562,164548],{"class":262},[252,164564,1184],{"class":258},[252,164566,164553],{"class":262},[252,164568,164569],{"class":321},"# 并集\n",[252,164571,164572,164574,164576,164578,164580],{"class":254,"line":1353},[252,164573,30555],{"class":311},[252,164575,164548],{"class":262},[252,164577,795],{"class":258},[252,164579,164553],{"class":262},[252,164581,164582],{"class":321},"# 差集\n",[14,164584,164586],{"id":164585},"_610-字典dict","6.10 字典dict",[19,164588,164589],{},"字典通过 key-value 保存数据。",[244,164591,164593],{"className":30518,"code":164592,"language":30520,"meta":169,"style":169},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[22,164594,164595,164603,164613,164624,164634],{"__ignoreMap":169},[252,164596,164597,164599,164601],{"class":254,"line":255},[252,164598,149561],{"class":262},[252,164600,308],{"class":258},[252,164602,15712],{"class":262},[252,164604,164605,164607,164609,164611],{"class":254,"line":170},[252,164606,147100],{"class":367},[252,164608,51577],{"class":262},[252,164610,149968],{"class":367},[252,164612,31606],{"class":262},[252,164614,164615,164618,164620,164622],{"class":254,"line":1318},[252,164616,164617],{"class":367},"    \"age\"",[252,164619,51577],{"class":262},[252,164621,913],{"class":311},[252,164623,31606],{"class":262},[252,164625,164626,164629,164631],{"class":254,"line":1333},[252,164627,164628],{"class":367},"    \"score\"",[252,164630,51577],{"class":262},[252,164632,164633],{"class":311},"95\n",[252,164635,164636],{"class":254,"line":1339},[252,164637,1704],{"class":262},[19,164639,164640],{},"获取值：",[244,164642,164644],{"className":30518,"code":164643,"language":30520,"meta":169,"style":169},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[22,164645,164646,164657],{"__ignoreMap":169},[252,164647,164648,164650,164653,164655],{"class":254,"line":255},[252,164649,30555],{"class":311},[252,164651,164652],{"class":262},"(student[",[252,164654,62819],{"class":367},[252,164656,4796],{"class":262},[252,164658,164659,164661,164664,164666],{"class":254,"line":170},[252,164660,30555],{"class":311},[252,164662,164663],{"class":262},"(student.get(",[252,164665,62819],{"class":367},[252,164667,30637],{"class":262},[19,164669,15528],{},[244,164671,164673],{"className":30518,"code":164672,"language":30520,"meta":169,"style":169},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[22,164674,164675,164688],{"__ignoreMap":169},[252,164676,164677,164679,164682,164685],{"class":254,"line":255},[252,164678,152939],{"class":262},[252,164680,164681],{"class":367},"\"address\"",[252,164683,164684],{"class":262},"]     ",[252,164686,164687],{"class":321},"# key不存在会报错\n",[252,164689,164690,164693,164695,164697],{"class":254,"line":170},[252,164691,164692],{"class":262},"student.get(",[252,164694,164681],{"class":367},[252,164696,13854],{"class":262},[252,164698,164699],{"class":321},"# key不存在返回None\n",[19,164701,164702],{},"设置默认值：",[244,164704,164706],{"className":30518,"code":164705,"language":30520,"meta":169,"style":169},"print(student.get(\"address\", \"未知\"))\n",[22,164707,164708],{"__ignoreMap":169},[252,164709,164710,164712,164714,164716,164718,164721],{"class":254,"line":255},[252,164711,30555],{"class":311},[252,164713,164663],{"class":262},[252,164715,164681],{"class":367},[252,164717,12575],{"class":262},[252,164719,164720],{"class":367},"\"未知\"",[252,164722,30637],{"class":262},[19,164724,164725],{},"新增和修改：",[244,164727,164729],{"className":30518,"code":164728,"language":30520,"meta":169,"style":169},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[22,164730,164731,164744],{"__ignoreMap":169},[252,164732,164733,164735,164737,164739,164741],{"class":254,"line":255},[252,164734,152939],{"class":262},[252,164736,69264],{"class":367},[252,164738,4582],{"class":262},[252,164740,308],{"class":258},[252,164742,164743],{"class":311}," 19\n",[252,164745,164746,164748,164750,164752,164754],{"class":254,"line":170},[252,164747,152939],{"class":262},[252,164749,164681],{"class":367},[252,164751,4582],{"class":262},[252,164753,308],{"class":258},[252,164755,164756],{"class":367}," \"北京\"\n",[19,164758,164759],{},"删除：",[244,164761,164763],{"className":30518,"code":164762,"language":30520,"meta":169,"style":169},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[22,164764,164765,164778,164788],{"__ignoreMap":169},[252,164766,164767,164769,164771,164774,164776],{"class":254,"line":255},[252,164768,155438],{"class":262},[252,164770,308],{"class":258},[252,164772,164773],{"class":262}," student.pop(",[252,164775,151552],{"class":367},[252,164777,269],{"class":262},[252,164779,164780,164782,164784,164786],{"class":254,"line":170},[252,164781,163463],{"class":258},[252,164783,152229],{"class":262},[252,164785,69264],{"class":367},[252,164787,33386],{"class":262},[252,164789,164790],{"class":254,"line":1318},[252,164791,164792],{"class":262},"student.clear()\n",[14,164794,164796],{"id":164795},"_611-字典遍历","6.11 字典遍历",[19,164798,164799],{},"遍历 key：",[244,164801,164803],{"className":30518,"code":164802,"language":30520,"meta":169,"style":169},"for key in student:\n    print(key, student[key])\n",[22,164804,164805,164817],{"__ignoreMap":169},[252,164806,164807,164809,164812,164814],{"class":254,"line":255},[252,164808,3164],{"class":258},[252,164810,164811],{"class":262}," key ",[252,164813,26183],{"class":258},[252,164815,164816],{"class":262}," student:\n",[252,164818,164819,164821],{"class":254,"line":170},[252,164820,31439],{"class":311},[252,164822,164823],{"class":262},"(key, student[key])\n",[19,164825,164826],{},"遍历 value：",[244,164828,164830],{"className":30518,"code":164829,"language":30520,"meta":169,"style":169},"for value in student.values():\n    print(value)\n",[22,164831,164832,164844],{"__ignoreMap":169},[252,164833,164834,164836,164839,164841],{"class":254,"line":255},[252,164835,3164],{"class":258},[252,164837,164838],{"class":262}," value ",[252,164840,26183],{"class":258},[252,164842,164843],{"class":262}," student.values():\n",[252,164845,164846,164848],{"class":254,"line":170},[252,164847,31439],{"class":311},[252,164849,164850],{"class":262},"(value)\n",[19,164852,164853],{},"遍历 key 和 value：",[244,164855,164857],{"className":30518,"code":164856,"language":30520,"meta":169,"style":169},"for key, value in student.items():\n    print(key, value)\n",[22,164858,164859,164871],{"__ignoreMap":169},[252,164860,164861,164863,164866,164868],{"class":254,"line":255},[252,164862,3164],{"class":258},[252,164864,164865],{"class":262}," key, value ",[252,164867,26183],{"class":258},[252,164869,164870],{"class":262}," student.items():\n",[252,164872,164873,164875],{"class":254,"line":170},[252,164874,31439],{"class":311},[252,164876,164877],{"class":262},"(key, value)\n",[14,164879,164881],{"id":164880},"_612-嵌套容器","6.12 嵌套容器",[19,164883,164884],{},"列表中保存字典，是项目中最常见的结构之一。",[244,164886,164888],{"className":30518,"code":164887,"language":30520,"meta":169,"style":169},"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",[22,164889,164890,164898,164926,164954,164982,164986,164990,165000],{"__ignoreMap":169},[252,164891,164892,164894,164896],{"class":254,"line":255},[252,164893,159796],{"class":262},[252,164895,308],{"class":258},[252,164897,55587],{"class":262},[252,164899,164900,164902,164904,164906,164908,164910,164912,164914,164916,164918,164920,164922,164924],{"class":254,"line":170},[252,164901,148465],{"class":262},[252,164903,62819],{"class":367},[252,164905,51577],{"class":262},[252,164907,149968],{"class":367},[252,164909,12575],{"class":262},[252,164911,69264],{"class":367},[252,164913,51577],{"class":262},[252,164915,913],{"class":311},[252,164917,12575],{"class":262},[252,164919,151552],{"class":367},[252,164921,51577],{"class":262},[252,164923,1252],{"class":311},[252,164925,5069],{"class":262},[252,164927,164928,164930,164932,164934,164936,164938,164940,164942,164944,164946,164948,164950,164952],{"class":254,"line":1318},[252,164929,148465],{"class":262},[252,164931,62819],{"class":367},[252,164933,51577],{"class":262},[252,164935,151016],{"class":367},[252,164937,12575],{"class":262},[252,164939,69264],{"class":367},[252,164941,51577],{"class":262},[252,164943,888],{"class":311},[252,164945,12575],{"class":262},[252,164947,151552],{"class":367},[252,164949,51577],{"class":262},[252,164951,1074],{"class":311},[252,164953,5069],{"class":262},[252,164955,164956,164958,164960,164962,164964,164966,164968,164970,164972,164974,164976,164978,164980],{"class":254,"line":1333},[252,164957,148465],{"class":262},[252,164959,62819],{"class":367},[252,164961,51577],{"class":262},[252,164963,159811],{"class":367},[252,164965,12575],{"class":262},[252,164967,69264],{"class":367},[252,164969,51577],{"class":262},[252,164971,938],{"class":311},[252,164973,12575],{"class":262},[252,164975,151552],{"class":367},[252,164977,51577],{"class":262},[252,164979,669],{"class":311},[252,164981,5069],{"class":262},[252,164983,164984],{"class":254,"line":1339},[252,164985,33386],{"class":262},[252,164987,164988],{"class":254,"line":1353},[252,164989,2539],{"emptyLinePlaceholder":181},[252,164991,164992,164994,164996,164998],{"class":254,"line":1359},[252,164993,3164],{"class":258},[252,164995,152217],{"class":262},[252,164997,26183],{"class":258},[252,164999,152222],{"class":262},[252,165001,165002,165004,165006,165008,165011,165013],{"class":254,"line":1450},[252,165003,31439],{"class":311},[252,165005,164652],{"class":262},[252,165007,62819],{"class":367},[252,165009,165010],{"class":262},"], student[",[252,165012,151552],{"class":367},[252,165014,4796],{"class":262},[19,165016,165017],{},"统计平均分：",[244,165019,165021],{"className":30518,"code":165020,"language":30520,"meta":169,"style":169},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[22,165022,165023,165031,165035,165045,165057,165061,165076],{"__ignoreMap":169},[252,165024,165025,165027,165029],{"class":254,"line":255},[252,165026,157340],{"class":262},[252,165028,308],{"class":258},[252,165030,47473],{"class":311},[252,165032,165033],{"class":254,"line":170},[252,165034,2539],{"emptyLinePlaceholder":181},[252,165036,165037,165039,165041,165043],{"class":254,"line":1318},[252,165038,3164],{"class":258},[252,165040,152217],{"class":262},[252,165042,26183],{"class":258},[252,165044,152222],{"class":262},[252,165046,165047,165049,165051,165053,165055],{"class":254,"line":1333},[252,165048,159387],{"class":262},[252,165050,9617],{"class":258},[252,165052,152229],{"class":262},[252,165054,151552],{"class":367},[252,165056,33386],{"class":262},[252,165058,165059],{"class":254,"line":1339},[252,165060,2539],{"emptyLinePlaceholder":181},[252,165062,165063,165065,165067,165069,165071,165073],{"class":254,"line":1353},[252,165064,163854],{"class":262},[252,165066,308],{"class":258},[252,165068,163859],{"class":262},[252,165070,847],{"class":258},[252,165072,7471],{"class":311},[252,165074,165075],{"class":262},"(students)\n",[252,165077,165078,165080,165082,165084,165086,165088,165090,165092,165094,165096],{"class":254,"line":1359},[252,165079,30555],{"class":311},[252,165081,263],{"class":262},[252,165083,315],{"class":258},[252,165085,163877],{"class":367},[252,165087,1159],{"class":311},[252,165089,163882],{"class":262},[252,165091,157239],{"class":258},[252,165093,1209],{"class":311},[252,165095,514],{"class":367},[252,165097,269],{"class":262},[19,165099,165100],{},"查找学生：",[244,165102,165104],{"className":30518,"code":165103,"language":30520,"meta":169,"style":169},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[22,165105,165106,165121,165125,165135,165149,165155,165159,165165],{"__ignoreMap":169},[252,165107,165108,165110,165112,165114,165116,165119],{"class":254,"line":255},[252,165109,111714],{"class":262},[252,165111,308],{"class":258},[252,165113,60745],{"class":311},[252,165115,263],{"class":262},[252,165117,165118],{"class":367},"\"请输入学生姓名:\"",[252,165120,269],{"class":262},[252,165122,165123],{"class":254,"line":170},[252,165124,2539],{"emptyLinePlaceholder":181},[252,165126,165127,165129,165131,165133],{"class":254,"line":1318},[252,165128,3164],{"class":258},[252,165130,152217],{"class":262},[252,165132,26183],{"class":258},[252,165134,152222],{"class":262},[252,165136,165137,165139,165141,165143,165145,165147],{"class":254,"line":1333},[252,165138,3240],{"class":258},[252,165140,152229],{"class":262},[252,165142,62819],{"class":367},[252,165144,4582],{"class":262},[252,165146,3088],{"class":258},[252,165148,160512],{"class":262},[252,165150,165151,165153],{"class":254,"line":1339},[252,165152,32591],{"class":311},[252,165154,150122],{"class":262},[252,165156,165157],{"class":254,"line":1353},[252,165158,31767],{"class":258},[252,165160,165161,165163],{"class":254,"line":1359},[252,165162,1840],{"class":258},[252,165164,3878],{"class":262},[252,165166,165167,165169,165171,165174],{"class":254,"line":1450},[252,165168,31439],{"class":311},[252,165170,263],{"class":262},[252,165172,165173],{"class":367},"\"没有找到\"",[252,165175,269],{"class":262},[14,165177,165179],{"id":165178},"_613-容器通用操作","6.13 容器通用操作",[19,165181,165182],{},"长度：",[244,165184,165186],{"className":30518,"code":165185,"language":30520,"meta":169,"style":169},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[22,165187,165188,165207,165217],{"__ignoreMap":169},[252,165189,165190,165192,165195,165197,165199,165201,165203,165205],{"class":254,"line":255},[252,165191,7498],{"class":311},[252,165193,165194],{"class":262},"([",[252,165196,480],{"class":311},[252,165198,12575],{"class":262},[252,165200,340],{"class":311},[252,165202,12575],{"class":262},[252,165204,334],{"class":311},[252,165206,4796],{"class":262},[252,165208,165209,165211,165213,165215],{"class":254,"line":170},[252,165210,7498],{"class":311},[252,165212,263],{"class":262},[252,165214,155960],{"class":367},[252,165216,269],{"class":262},[252,165218,165219,165221,165224,165226,165228,165230],{"class":254,"line":1318},[252,165220,7498],{"class":311},[252,165222,165223],{"class":262},"({",[252,165225,62819],{"class":367},[252,165227,51577],{"class":262},[252,165229,149968],{"class":367},[252,165231,165232],{"class":262},"})\n",[19,165234,165235],{},"最大最小：",[244,165237,165239],{"className":30518,"code":165238,"language":30520,"meta":169,"style":169},"max([1, 2, 3])\nmin([1, 2, 3])\n",[22,165240,165241,165259],{"__ignoreMap":169},[252,165242,165243,165245,165247,165249,165251,165253,165255,165257],{"class":254,"line":255},[252,165244,6155],{"class":311},[252,165246,165194],{"class":262},[252,165248,480],{"class":311},[252,165250,12575],{"class":262},[252,165252,340],{"class":311},[252,165254,12575],{"class":262},[252,165256,334],{"class":311},[252,165258,4796],{"class":262},[252,165260,165261,165264,165266,165268,165270,165272,165274,165276],{"class":254,"line":170},[252,165262,165263],{"class":311},"min",[252,165265,165194],{"class":262},[252,165267,480],{"class":311},[252,165269,12575],{"class":262},[252,165271,340],{"class":311},[252,165273,12575],{"class":262},[252,165275,334],{"class":311},[252,165277,4796],{"class":262},[19,165279,165280],{},"求和：",[244,165282,165284],{"className":30518,"code":165283,"language":30520,"meta":169,"style":169},"sum([1, 2, 3])\n",[22,165285,165286],{"__ignoreMap":169},[252,165287,165288,165291,165293,165295,165297,165299,165301,165303],{"class":254,"line":255},[252,165289,165290],{"class":311},"sum",[252,165292,165194],{"class":262},[252,165294,480],{"class":311},[252,165296,12575],{"class":262},[252,165298,340],{"class":311},[252,165300,12575],{"class":262},[252,165302,334],{"class":311},[252,165304,4796],{"class":262},[19,165306,163551],{},[244,165308,165310],{"className":30518,"code":165309,"language":30520,"meta":169,"style":169},"sorted([3, 1, 2])\n",[22,165311,165312],{"__ignoreMap":169},[252,165313,165314,165317,165319,165321,165323,165325,165327,165329],{"class":254,"line":255},[252,165315,165316],{"class":311},"sorted",[252,165318,165194],{"class":262},[252,165320,334],{"class":311},[252,165322,12575],{"class":262},[252,165324,480],{"class":311},[252,165326,12575],{"class":262},[252,165328,340],{"class":311},[252,165330,4796],{"class":262},[19,165332,165333],{},"类型转换：",[244,165335,165337],{"className":30518,"code":165336,"language":30520,"meta":169,"style":169},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[22,165338,165339,165349,165367],{"__ignoreMap":169},[252,165340,165341,165343,165345,165347],{"class":254,"line":255},[252,165342,154150],{"class":311},[252,165344,263],{"class":262},[252,165346,155960],{"class":367},[252,165348,269],{"class":262},[252,165350,165351,165353,165355,165357,165359,165361,165363,165365],{"class":254,"line":170},[252,165352,155345],{"class":311},[252,165354,165194],{"class":262},[252,165356,480],{"class":311},[252,165358,12575],{"class":262},[252,165360,340],{"class":311},[252,165362,12575],{"class":262},[252,165364,334],{"class":311},[252,165366,4796],{"class":262},[252,165368,165369,165371,165373,165375,165377,165379,165381,165383,165385,165387],{"class":254,"line":1318},[252,165370,155370],{"class":311},[252,165372,165194],{"class":262},[252,165374,480],{"class":311},[252,165376,12575],{"class":262},[252,165378,480],{"class":311},[252,165380,12575],{"class":262},[252,165382,340],{"class":311},[252,165384,12575],{"class":262},[252,165386,334],{"class":311},[252,165388,4796],{"class":262},[19,165390,165391],{},"成员判断：",[244,165393,165395],{"className":30518,"code":165394,"language":30520,"meta":169,"style":169},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[22,165396,165397,165414,165438],{"__ignoreMap":169},[252,165398,165399,165401,165403,165406,165409,165412],{"class":254,"line":255},[252,165400,30555],{"class":311},[252,165402,263],{"class":262},[252,165404,165405],{"class":367},"\"a\"",[252,165407,165408],{"class":258}," in",[252,165410,165411],{"class":367}," \"abc\"",[252,165413,269],{"class":262},[252,165415,165416,165418,165420,165422,165424,165426,165428,165430,165432,165434,165436],{"class":254,"line":170},[252,165417,30555],{"class":311},[252,165419,263],{"class":262},[252,165421,480],{"class":311},[252,165423,165408],{"class":258},[252,165425,52366],{"class":262},[252,165427,480],{"class":311},[252,165429,12575],{"class":262},[252,165431,340],{"class":311},[252,165433,12575],{"class":262},[252,165435,334],{"class":311},[252,165437,4796],{"class":262},[252,165439,165440,165442,165444,165446,165448,165450,165452,165454,165456],{"class":254,"line":1318},[252,165441,30555],{"class":311},[252,165443,263],{"class":262},[252,165445,62819],{"class":367},[252,165447,165408],{"class":258},[252,165449,4587],{"class":262},[252,165451,62819],{"class":367},[252,165453,51577],{"class":262},[252,165455,149968],{"class":367},[252,165457,165232],{"class":262},[14,165459,165461],{"id":165460},"_614-推导式","6.14 推导式",[19,165463,165464],{},"推导式用于快速生成容器。",[19,165466,165467],{},"列表推导式：",[244,165469,165471],{"className":30518,"code":165470,"language":30520,"meta":169,"style":169},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[22,165472,165473,165500],{"__ignoreMap":169},[252,165474,165475,165477,165479,165482,165484,165486,165488,165490,165492,165494,165496,165498],{"class":254,"line":255},[252,165476,164180],{"class":262},[252,165478,308],{"class":258},[252,165480,165481],{"class":262}," [i ",[252,165483,3164],{"class":258},[252,165485,9578],{"class":262},[252,165487,26183],{"class":258},[252,165489,32583],{"class":311},[252,165491,263],{"class":262},[252,165493,480],{"class":311},[252,165495,12575],{"class":262},[252,165497,607],{"class":311},[252,165499,97438],{"class":262},[252,165501,165502,165504],{"class":254,"line":170},[252,165503,30555],{"class":311},[252,165505,164396],{"class":262},[19,165507,165508],{},"带条件：",[244,165510,165512],{"className":30518,"code":165511,"language":30520,"meta":169,"style":169},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[22,165513,165514,165555],{"__ignoreMap":169},[252,165515,165516,165519,165521,165523,165525,165527,165529,165531,165533,165535,165537,165539,165541,165543,165545,165547,165549,165551,165553],{"class":254,"line":255},[252,165517,165518],{"class":262},"even_nums ",[252,165520,308],{"class":258},[252,165522,165481],{"class":262},[252,165524,3164],{"class":258},[252,165526,9578],{"class":262},[252,165528,26183],{"class":258},[252,165530,32583],{"class":311},[252,165532,263],{"class":262},[252,165534,480],{"class":311},[252,165536,12575],{"class":262},[252,165538,600],{"class":311},[252,165540,13854],{"class":262},[252,165542,1670],{"class":258},[252,165544,9578],{"class":262},[252,165546,591],{"class":258},[252,165548,14895],{"class":311},[252,165550,101696],{"class":258},[252,165552,4232],{"class":311},[252,165554,33386],{"class":262},[252,165556,165557,165559],{"class":254,"line":170},[252,165558,30555],{"class":311},[252,165560,165561],{"class":262},"(even_nums)\n",[19,165563,165564],{},"字典推导式：",[244,165566,165568],{"className":30518,"code":165567,"language":30520,"meta":169,"style":169},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[22,165569,165570,165604],{"__ignoreMap":169},[252,165571,165572,165575,165577,165580,165582,165584,165587,165589,165591,165593,165595,165597,165599,165601],{"class":254,"line":255},[252,165573,165574],{"class":262},"squares ",[252,165576,308],{"class":258},[252,165578,165579],{"class":262}," {i: i ",[252,165581,10801],{"class":258},[252,165583,14895],{"class":311},[252,165585,165586],{"class":258}," for",[252,165588,9578],{"class":262},[252,165590,26183],{"class":258},[252,165592,32583],{"class":311},[252,165594,263],{"class":262},[252,165596,480],{"class":311},[252,165598,12575],{"class":262},[252,165600,607],{"class":311},[252,165602,165603],{"class":262},")}\n",[252,165605,165606,165608],{"class":254,"line":170},[252,165607,30555],{"class":311},[252,165609,165610],{"class":262},"(squares)\n",[19,165612,165613],{},"集合推导式：",[244,165615,165617],{"className":30518,"code":165616,"language":30520,"meta":169,"style":169},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[22,165618,165619,165640],{"__ignoreMap":169},[252,165620,165621,165624,165626,165629,165631,165633,165635,165638],{"class":254,"line":255},[252,165622,165623],{"class":262},"chars ",[252,165625,308],{"class":258},[252,165627,165628],{"class":262}," {ch ",[252,165630,3164],{"class":258},[252,165632,159772],{"class":262},[252,165634,26183],{"class":258},[252,165636,165637],{"class":367}," \"hello\"",[252,165639,1704],{"class":262},[252,165641,165642,165644],{"class":254,"line":170},[252,165643,30555],{"class":311},[252,165645,165646],{"class":262},"(chars)\n",[19,165648,165649],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165651,165653],{"id":165652},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[244,165655,165657],{"className":30518,"code":165656,"language":30520,"meta":169,"style":169},"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",[22,165658,165659,165667,165687,165707,165727,165747,165751,165755,165763,165777,165786,165790,165800,165812,165816,165836,165845,165849,165865,165870,165874,165888,165892,165914,165950],{"__ignoreMap":169},[252,165660,165661,165663,165665],{"class":254,"line":255},[252,165662,159796],{"class":262},[252,165664,308],{"class":258},[252,165666,55587],{"class":262},[252,165668,165669,165671,165673,165675,165677,165679,165681,165683,165685],{"class":254,"line":170},[252,165670,148465],{"class":262},[252,165672,62819],{"class":367},[252,165674,51577],{"class":262},[252,165676,149968],{"class":367},[252,165678,12575],{"class":262},[252,165680,151552],{"class":367},[252,165682,51577],{"class":262},[252,165684,1252],{"class":311},[252,165686,5069],{"class":262},[252,165688,165689,165691,165693,165695,165697,165699,165701,165703,165705],{"class":254,"line":1318},[252,165690,148465],{"class":262},[252,165692,62819],{"class":367},[252,165694,51577],{"class":262},[252,165696,151016],{"class":367},[252,165698,12575],{"class":262},[252,165700,151552],{"class":367},[252,165702,51577],{"class":262},[252,165704,1074],{"class":311},[252,165706,5069],{"class":262},[252,165708,165709,165711,165713,165715,165717,165719,165721,165723,165725],{"class":254,"line":1333},[252,165710,148465],{"class":262},[252,165712,62819],{"class":367},[252,165714,51577],{"class":262},[252,165716,159811],{"class":367},[252,165718,12575],{"class":262},[252,165720,151552],{"class":367},[252,165722,51577],{"class":262},[252,165724,669],{"class":311},[252,165726,5069],{"class":262},[252,165728,165729,165731,165733,165735,165737,165739,165741,165743,165745],{"class":254,"line":1339},[252,165730,148465],{"class":262},[252,165732,62819],{"class":367},[252,165734,51577],{"class":262},[252,165736,163390],{"class":367},[252,165738,12575],{"class":262},[252,165740,151552],{"class":367},[252,165742,51577],{"class":262},[252,165744,1145],{"class":311},[252,165746,5069],{"class":262},[252,165748,165749],{"class":254,"line":1353},[252,165750,33386],{"class":262},[252,165752,165753],{"class":254,"line":1359},[252,165754,2539],{"emptyLinePlaceholder":181},[252,165756,165757,165759,165761],{"class":254,"line":1450},[252,165758,157340],{"class":262},[252,165760,308],{"class":258},[252,165762,47473],{"class":311},[252,165764,165765,165768,165770,165773,165775],{"class":254,"line":1456},[252,165766,165767],{"class":262},"max_student ",[252,165769,308],{"class":258},[252,165771,165772],{"class":262}," students[",[252,165774,454],{"class":311},[252,165776,33386],{"class":262},[252,165778,165779,165782,165784],{"class":254,"line":1468},[252,165780,165781],{"class":262},"passed ",[252,165783,308],{"class":258},[252,165785,51978],{"class":262},[252,165787,165788],{"class":254,"line":1751},[252,165789,2539],{"emptyLinePlaceholder":181},[252,165791,165792,165794,165796,165798],{"class":254,"line":1756},[252,165793,3164],{"class":258},[252,165795,152217],{"class":262},[252,165797,26183],{"class":258},[252,165799,152222],{"class":262},[252,165801,165802,165804,165806,165808,165810],{"class":254,"line":1762},[252,165803,159387],{"class":262},[252,165805,9617],{"class":258},[252,165807,152229],{"class":262},[252,165809,151552],{"class":367},[252,165811,33386],{"class":262},[252,165813,165814],{"class":254,"line":1767},[252,165815,2539],{"emptyLinePlaceholder":181},[252,165817,165818,165820,165822,165824,165826,165828,165831,165833],{"class":254,"line":1781},[252,165819,3240],{"class":258},[252,165821,152229],{"class":262},[252,165823,151552],{"class":367},[252,165825,4582],{"class":262},[252,165827,1223],{"class":258},[252,165829,165830],{"class":262}," max_student[",[252,165832,151552],{"class":367},[252,165834,165835],{"class":262},"]:\n",[252,165837,165838,165841,165843],{"class":254,"line":1786},[252,165839,165840],{"class":262},"        max_student ",[252,165842,308],{"class":258},[252,165844,152245],{"class":262},[252,165846,165847],{"class":254,"line":1792},[252,165848,2539],{"emptyLinePlaceholder":181},[252,165850,165851,165853,165855,165857,165859,165861,165863],{"class":254,"line":1813},[252,165852,3240],{"class":258},[252,165854,152229],{"class":262},[252,165856,151552],{"class":367},[252,165858,4582],{"class":262},[252,165860,1849],{"class":258},[252,165862,157917],{"class":311},[252,165864,3878],{"class":262},[252,165866,165867],{"class":254,"line":1818},[252,165868,165869],{"class":262},"        passed.append(student)\n",[252,165871,165872],{"class":254,"line":1832},[252,165873,2539],{"emptyLinePlaceholder":181},[252,165875,165876,165878,165880,165882,165884,165886],{"class":254,"line":1837},[252,165877,163854],{"class":262},[252,165879,308],{"class":258},[252,165881,163859],{"class":262},[252,165883,847],{"class":258},[252,165885,7471],{"class":311},[252,165887,165075],{"class":262},[252,165889,165890],{"class":254,"line":1866},[252,165891,2539],{"emptyLinePlaceholder":181},[252,165893,165894,165896,165898,165900,165902,165904,165906,165908,165910,165912],{"class":254,"line":1871},[252,165895,30555],{"class":311},[252,165897,263],{"class":262},[252,165899,315],{"class":258},[252,165901,163877],{"class":367},[252,165903,1159],{"class":311},[252,165905,163882],{"class":262},[252,165907,157239],{"class":258},[252,165909,1209],{"class":311},[252,165911,514],{"class":367},[252,165913,269],{"class":262},[252,165915,165916,165918,165920,165922,165925,165927,165930,165932,165934,165936,165938,165940,165942,165944,165946,165948],{"class":254,"line":1888},[252,165917,30555],{"class":311},[252,165919,263],{"class":262},[252,165921,315],{"class":258},[252,165923,165924],{"class":367},"\"最高分学生:",[252,165926,1159],{"class":311},[252,165928,165929],{"class":262},"max_student[",[252,165931,152962],{"class":367},[252,165933,1203],{"class":262},[252,165935,1209],{"class":311},[252,165937,4587],{"class":311},[252,165939,165929],{"class":262},[252,165941,153000],{"class":367},[252,165943,1203],{"class":262},[252,165945,1209],{"class":311},[252,165947,514],{"class":367},[252,165949,269],{"class":262},[252,165951,165952,165954,165956,165958,165961,165964,165967,165969,165971],{"class":254,"line":1893},[252,165953,30555],{"class":311},[252,165955,263],{"class":262},[252,165957,315],{"class":258},[252,165959,165960],{"class":367},"\"及格人数:",[252,165962,165963],{"class":311},"{len",[252,165965,165966],{"class":262},"(passed)",[252,165968,1209],{"class":311},[252,165970,514],{"class":367},[252,165972,269],{"class":262},[14,165974,165976],{"id":165975},"_616-易错点","6.16 易错点",[207,165978,165979,165982,165985,165988,165994,166003],{},[210,165980,165981],{},"列表可变，元组和字符串不可变。",[210,165983,165984],{},"切片结束位置不包含。",[210,165986,165987],{},"字典通过 key 取值，不是通过索引。",[210,165989,165990,165991,28525],{},"空集合要用 ",[22,165992,165993],{},"set()",[210,165995,104502,165996,165999,166000,28525],{},[22,165997,165998],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[22,166001,166002],{},"get()",[210,166004,166005],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166007,166009],{"id":166008},"_617-本章练习","6.17 本章练习",[207,166011,166012,166015,166018,166021,166024],{},[210,166013,166014],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[210,166016,166017],{},"输入一句话，统计每个字符出现次数。",[210,166019,166020],{},"使用集合去除列表中的重复元素。",[210,166022,166023],{},"使用字典保存一个学生的信息，并实现修改成绩。",[210,166025,166026],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5266,166028,166029],{},"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":169,"searchDepth":170,"depth":170,"links":166031},[166032,166033,166034,166035,166036,166037,166038,166039,166040,166041,166042,166043,166044,166045,166046,166047,166048],{"id":163012,"depth":170,"text":163013},{"id":163129,"depth":170,"text":163130},{"id":163219,"depth":170,"text":163220},{"id":163343,"depth":170,"text":163344},{"id":163706,"depth":170,"text":163707},{"id":163893,"depth":170,"text":163894},{"id":164012,"depth":170,"text":164013},{"id":164154,"depth":170,"text":164155},{"id":164341,"depth":170,"text":164342},{"id":164585,"depth":170,"text":164586},{"id":164795,"depth":170,"text":164796},{"id":164880,"depth":170,"text":164881},{"id":165178,"depth":170,"text":165179},{"id":165460,"depth":170,"text":165461},{"id":165652,"depth":170,"text":165653},{"id":165975,"depth":170,"text":165976},{"id":166008,"depth":170,"text":166009},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163004,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166055,"title":166056,"body":166057,"description":178,"extension":179,"meta":168229,"navigation":181,"path":168230,"seo":168231,"stem":168232,"__hash__":168233},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166058,"toc":168204},[166059,166062,166066,166069,166149,166152,166173,166176,166180,166183,166245,166248,166265,166269,166272,166317,166319,166327,166331,166334,166416,166419,166422,166447,166450,166473,166477,166480,166482,166544,166547,166549,166600,166604,166608,166614,166719,166723,166729,166800,166804,166807,166875,166878,166958,166962,166968,167004,167007,167010,167120,167126,167130,167133,167205,167208,167212,167216,167221,167283,167287,167292,167360,167364,167369,167485,167489,167492,167572,167575,167579,167582,167686,167688,167703,167706,167710,167848,167856,167860,167862,167873,167875,168133,168137,168169,168173,168201],[10,166060,166056],{"id":166061},"_7-函数进阶",[14,166063,166065],{"id":166064},"_71-多返回值","7.1 多返回值",[19,166067,166068],{},"Python 函数可以返回多个值，本质上返回的是元组。",[244,166070,166072],{"className":30518,"code":166071,"language":30520,"meta":169,"style":169},"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",[22,166073,166074,166083,166091,166099,166108,166115,166119,166123,166132,166138],{"__ignoreMap":169},[252,166075,166076,166078,166081],{"class":254,"line":255},[252,166077,32087],{"class":258},[252,166079,166080],{"class":2102}," get_info",[252,166082,32093],{"class":262},[252,166084,166085,166087,166089],{"class":254,"line":170},[252,166086,152450],{"class":262},[252,166088,308],{"class":258},[252,166090,149433],{"class":367},[252,166092,166093,166095,166097],{"class":254,"line":1318},[252,166094,152466],{"class":262},[252,166096,308],{"class":258},[252,166098,146631],{"class":311},[252,166100,166101,166103,166105],{"class":254,"line":1333},[252,166102,152481],{"class":262},[252,166104,308],{"class":258},[252,166106,166107],{"class":311}," 95\n",[252,166109,166110,166112],{"class":254,"line":1339},[252,166111,4229],{"class":258},[252,166113,166114],{"class":262}," name, age, score\n",[252,166116,166117],{"class":254,"line":1353},[252,166118,2539],{"emptyLinePlaceholder":181},[252,166120,166121],{"class":254,"line":1359},[252,166122,2539],{"emptyLinePlaceholder":181},[252,166124,166125,166127,166129],{"class":254,"line":1450},[252,166126,161386],{"class":262},[252,166128,308],{"class":258},[252,166130,166131],{"class":262}," get_info()\n",[252,166133,166134,166136],{"class":254,"line":1456},[252,166135,30555],{"class":311},[252,166137,76725],{"class":262},[252,166139,166140,166142,166144,166146],{"class":254,"line":1468},[252,166141,30555],{"class":311},[252,166143,263],{"class":262},[252,166145,103243],{"class":311},[252,166147,166148],{"class":262},"(result))\n",[19,166150,166151],{},"可以直接解包：",[244,166153,166155],{"className":30518,"code":166154,"language":30520,"meta":169,"style":169},"name, age, score = get_info()\nprint(name, age, score)\n",[22,166156,166157,166166],{"__ignoreMap":169},[252,166158,166159,166162,166164],{"class":254,"line":255},[252,166160,166161],{"class":262},"name, age, score ",[252,166163,308],{"class":258},[252,166165,166131],{"class":262},[252,166167,166168,166170],{"class":254,"line":170},[252,166169,30555],{"class":311},[252,166171,166172],{"class":262},"(name, age, score)\n",[19,166174,166175],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166177,166179],{"id":166178},"_72-位置参数","7.2 位置参数",[19,166181,166182],{},"位置参数按顺序传递。",[244,166184,166186],{"className":30518,"code":166185,"language":30520,"meta":169,"style":169},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[22,166187,166188,166196,166224,166228,166232],{"__ignoreMap":169},[252,166189,166190,166192,166194],{"class":254,"line":255},[252,166191,32087],{"class":258},[252,166193,149452],{"class":2102},[252,166195,149455],{"class":262},[252,166197,166198,166200,166202,166204,166206,166208,166210,166212,166214,166216,166218,166220,166222],{"class":254,"line":170},[252,166199,31439],{"class":311},[252,166201,263],{"class":262},[252,166203,315],{"class":258},[252,166205,149466],{"class":367},[252,166207,1159],{"class":311},[252,166209,79949],{"class":262},[252,166211,1209],{"class":311},[252,166213,149475],{"class":367},[252,166215,1159],{"class":311},[252,166217,70361],{"class":262},[252,166219,1209],{"class":311},[252,166221,149484],{"class":367},[252,166223,269],{"class":262},[252,166225,166226],{"class":254,"line":1318},[252,166227,2539],{"emptyLinePlaceholder":181},[252,166229,166230],{"class":254,"line":1333},[252,166231,2539],{"emptyLinePlaceholder":181},[252,166233,166234,166237,166239,166241,166243],{"class":254,"line":1339},[252,166235,166236],{"class":262},"introduce(",[252,166238,149968],{"class":367},[252,166240,12575],{"class":262},[252,166242,913],{"class":311},[252,166244,269],{"class":262},[19,166246,166247],{},"顺序错了就会得到错误含义：",[244,166249,166251],{"className":30518,"code":166250,"language":30520,"meta":169,"style":169},"introduce(18, \"小明\")\n",[22,166252,166253],{"__ignoreMap":169},[252,166254,166255,166257,166259,166261,166263],{"class":254,"line":255},[252,166256,166236],{"class":262},[252,166258,913],{"class":311},[252,166260,12575],{"class":262},[252,166262,149968],{"class":367},[252,166264,269],{"class":262},[14,166266,166268],{"id":166267},"_73-关键字参数","7.3 关键字参数",[19,166270,166271],{},"关键字参数按参数名传递。",[244,166273,166275],{"className":30518,"code":166274,"language":30520,"meta":169,"style":169},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[22,166276,166277,166297],{"__ignoreMap":169},[252,166278,166279,166281,166283,166285,166287,166289,166291,166293,166295],{"class":254,"line":255},[252,166280,166236],{"class":262},[252,166282,79949],{"class":5356},[252,166284,308],{"class":258},[252,166286,149968],{"class":367},[252,166288,12575],{"class":262},[252,166290,70361],{"class":5356},[252,166292,308],{"class":258},[252,166294,913],{"class":311},[252,166296,269],{"class":262},[252,166298,166299,166301,166303,166305,166307,166309,166311,166313,166315],{"class":254,"line":170},[252,166300,166236],{"class":262},[252,166302,70361],{"class":5356},[252,166304,308],{"class":258},[252,166306,913],{"class":311},[252,166308,12575],{"class":262},[252,166310,79949],{"class":5356},[252,166312,308],{"class":258},[252,166314,149968],{"class":367},[252,166316,269],{"class":262},[19,166318,118070],{},[207,166320,166321,166324],{},[210,166322,166323],{},"顺序不容易错。",[210,166325,166326],{},"调用时可读性更强。",[14,166328,166330],{"id":166329},"_74-默认参数","7.4 默认参数",[19,166332,166333],{},"默认参数给参数设置默认值。",[244,166335,166337],{"className":30518,"code":166336,"language":30520,"meta":169,"style":169},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[22,166338,166339,166355,166385,166389,166393,166403],{"__ignoreMap":169},[252,166340,166341,166343,166345,166348,166350,166353],{"class":254,"line":255},[252,166342,32087],{"class":258},[252,166344,122229],{"class":2102},[252,166346,166347],{"class":262},"(host, port",[252,166349,308],{"class":258},[252,166351,166352],{"class":311},"3306",[252,166354,30926],{"class":262},[252,166356,166357,166359,166361,166363,166366,166368,166370,166372,166374,166376,166379,166381,166383],{"class":254,"line":170},[252,166358,31439],{"class":311},[252,166360,263],{"class":262},[252,166362,315],{"class":258},[252,166364,166365],{"class":367},"\"连接",[252,166367,1159],{"class":311},[252,166369,27535],{"class":262},[252,166371,1209],{"class":311},[252,166373,1122],{"class":367},[252,166375,1159],{"class":311},[252,166377,166378],{"class":262},"port",[252,166380,1209],{"class":311},[252,166382,514],{"class":367},[252,166384,269],{"class":262},[252,166386,166387],{"class":254,"line":1318},[252,166388,2539],{"emptyLinePlaceholder":181},[252,166390,166391],{"class":254,"line":1333},[252,166392,2539],{"emptyLinePlaceholder":181},[252,166394,166395,166398,166401],{"class":254,"line":1339},[252,166396,166397],{"class":262},"connect(",[252,166399,166400],{"class":367},"\"localhost\"",[252,166402,269],{"class":262},[252,166404,166405,166407,166409,166411,166414],{"class":254,"line":1353},[252,166406,166397],{"class":262},[252,166408,166400],{"class":367},[252,166410,12575],{"class":262},[252,166412,166413],{"class":311},"6379",[252,166415,269],{"class":262},[19,166417,166418],{},"注意：默认参数必须放在非默认参数后面。",[19,166420,166421],{},"错误：",[244,166423,166425],{"className":30518,"code":166424,"language":30520,"meta":169,"style":169},"def connect(port=3306, host):\n    pass\n",[22,166426,166427,166443],{"__ignoreMap":169},[252,166428,166429,166431,166433,166436,166438,166440],{"class":254,"line":255},[252,166430,32087],{"class":258},[252,166432,122229],{"class":2102},[252,166434,166435],{"class":262},"(port",[252,166437,308],{"class":258},[252,166439,166352],{"class":311},[252,166441,166442],{"class":262},", host):\n",[252,166444,166445],{"class":254,"line":170},[252,166446,149617],{"class":258},[19,166448,166449],{},"正确：",[244,166451,166453],{"className":30518,"code":166452,"language":30520,"meta":169,"style":169},"def connect(host, port=3306):\n    pass\n",[22,166454,166455,166469],{"__ignoreMap":169},[252,166456,166457,166459,166461,166463,166465,166467],{"class":254,"line":255},[252,166458,32087],{"class":258},[252,166460,122229],{"class":2102},[252,166462,166347],{"class":262},[252,166464,308],{"class":258},[252,166466,166352],{"class":311},[252,166468,30926],{"class":262},[252,166470,166471],{"class":254,"line":170},[252,166472,149617],{"class":258},[14,166474,166476],{"id":166475},"_75-默认参数的坑","7.5 默认参数的坑",[19,166478,166479],{},"不要使用可变对象作为默认参数。",[19,166481,157703],{},[244,166483,166485],{"className":30518,"code":166484,"language":30520,"meta":169,"style":169},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[22,166486,166487,166502,166507,166514,166518,166522,166533],{"__ignoreMap":169},[252,166488,166489,166491,166494,166497,166499],{"class":254,"line":255},[252,166490,32087],{"class":258},[252,166492,166493],{"class":2102}," add_item",[252,166495,166496],{"class":262},"(item, items",[252,166498,308],{"class":258},[252,166500,166501],{"class":262},"[]):\n",[252,166503,166504],{"class":254,"line":170},[252,166505,166506],{"class":262},"    items.append(item)\n",[252,166508,166509,166511],{"class":254,"line":1318},[252,166510,4229],{"class":258},[252,166512,166513],{"class":262}," items\n",[252,166515,166516],{"class":254,"line":1333},[252,166517,2539],{"emptyLinePlaceholder":181},[252,166519,166520],{"class":254,"line":1339},[252,166521,2539],{"emptyLinePlaceholder":181},[252,166523,166524,166526,166529,166531],{"class":254,"line":1353},[252,166525,30555],{"class":311},[252,166527,166528],{"class":262},"(add_item(",[252,166530,165405],{"class":367},[252,166532,30637],{"class":262},[252,166534,166535,166537,166539,166542],{"class":254,"line":1359},[252,166536,30555],{"class":311},[252,166538,166528],{"class":262},[252,166540,166541],{"class":367},"\"b\"",[252,166543,30637],{"class":262},[19,166545,166546],{},"第二次调用会复用第一次的列表。",[19,166548,155968],{},[244,166550,166552],{"className":30518,"code":166551,"language":30520,"meta":169,"style":169},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[22,166553,166554,166568,166581,166590,166594],{"__ignoreMap":169},[252,166555,166556,166558,166560,166562,166564,166566],{"class":254,"line":255},[252,166557,32087],{"class":258},[252,166559,166493],{"class":2102},[252,166561,166496],{"class":262},[252,166563,308],{"class":258},[252,166565,95824],{"class":311},[252,166567,30926],{"class":262},[252,166569,166570,166572,166575,166577,166579],{"class":254,"line":170},[252,166571,3240],{"class":258},[252,166573,166574],{"class":262}," items ",[252,166576,39067],{"class":258},[252,166578,39073],{"class":311},[252,166580,3878],{"class":262},[252,166582,166583,166586,166588],{"class":254,"line":1318},[252,166584,166585],{"class":262},"        items ",[252,166587,308],{"class":258},[252,166589,51978],{"class":262},[252,166591,166592],{"class":254,"line":1333},[252,166593,166506],{"class":262},[252,166595,166596,166598],{"class":254,"line":1339},[252,166597,4229],{"class":258},[252,166599,166513],{"class":262},[14,166601,166603],{"id":166602},"_76-不定长参数","7.6 不定长参数",[224,166605,166607],{"id":166606},"_761-args","7.6.1 *args",[19,166609,166610,166613],{},[22,166611,166612],{},"*args"," 接收任意数量的位置参数，得到元组。",[244,166615,166617],{"className":30518,"code":166616,"language":30520,"meta":169,"style":169},"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",[22,166618,166619,166632,166640,166651,166660,166666,166670,166674,166693],{"__ignoreMap":169},[252,166620,166621,166623,166625,166627,166629],{"class":254,"line":255},[252,166622,32087],{"class":258},[252,166624,5349],{"class":2102},[252,166626,263],{"class":262},[252,166628,718],{"class":258},[252,166630,166631],{"class":262},"args):\n",[252,166633,166634,166636,166638],{"class":254,"line":170},[252,166635,159387],{"class":262},[252,166637,308],{"class":258},[252,166639,47473],{"class":311},[252,166641,166642,166644,166646,166648],{"class":254,"line":1318},[252,166643,3340],{"class":258},[252,166645,156260],{"class":262},[252,166647,26183],{"class":258},[252,166649,166650],{"class":262}," args:\n",[252,166652,166653,166655,166657],{"class":254,"line":1333},[252,166654,160062],{"class":262},[252,166656,9617],{"class":258},[252,166658,166659],{"class":262}," num\n",[252,166661,166662,166664],{"class":254,"line":1339},[252,166663,4229],{"class":258},[252,166665,162367],{"class":262},[252,166667,166668],{"class":254,"line":1353},[252,166669,2539],{"emptyLinePlaceholder":181},[252,166671,166672],{"class":254,"line":1359},[252,166673,2539],{"emptyLinePlaceholder":181},[252,166675,166676,166678,166681,166683,166685,166687,166689,166691],{"class":254,"line":1450},[252,166677,30555],{"class":311},[252,166679,166680],{"class":262},"(add(",[252,166682,480],{"class":311},[252,166684,12575],{"class":262},[252,166686,340],{"class":311},[252,166688,12575],{"class":262},[252,166690,334],{"class":311},[252,166692,30637],{"class":262},[252,166694,166695,166697,166699,166701,166703,166705,166707,166709,166711,166713,166715,166717],{"class":254,"line":1456},[252,166696,30555],{"class":311},[252,166698,166680],{"class":262},[252,166700,480],{"class":311},[252,166702,12575],{"class":262},[252,166704,340],{"class":311},[252,166706,12575],{"class":262},[252,166708,334],{"class":311},[252,166710,12575],{"class":262},[252,166712,556],{"class":311},[252,166714,12575],{"class":262},[252,166716,582],{"class":311},[252,166718,30637],{"class":262},[224,166720,166722],{"id":166721},"_762-kwargs","7.6.2 **kwargs",[19,166724,166725,166728],{},[22,166726,166727],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[244,166730,166732],{"className":30518,"code":166731,"language":30520,"meta":169,"style":169},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[22,166733,166734,166747,166758,166764,166768,166772],{"__ignoreMap":169},[252,166735,166736,166738,166740,166742,166744],{"class":254,"line":255},[252,166737,32087],{"class":258},[252,166739,162025],{"class":2102},[252,166741,263],{"class":262},[252,166743,10801],{"class":258},[252,166745,166746],{"class":262},"kwargs):\n",[252,166748,166749,166751,166753,166755],{"class":254,"line":170},[252,166750,3340],{"class":258},[252,166752,164865],{"class":262},[252,166754,26183],{"class":258},[252,166756,166757],{"class":262}," kwargs.items():\n",[252,166759,166760,166762],{"class":254,"line":1318},[252,166761,32591],{"class":311},[252,166763,164877],{"class":262},[252,166765,166766],{"class":254,"line":1333},[252,166767,2539],{"emptyLinePlaceholder":181},[252,166769,166770],{"class":254,"line":1339},[252,166771,2539],{"emptyLinePlaceholder":181},[252,166773,166774,166776,166778,166780,166782,166784,166786,166788,166790,166792,166794,166796,166798],{"class":254,"line":1353},[252,166775,162090],{"class":262},[252,166777,79949],{"class":5356},[252,166779,308],{"class":258},[252,166781,149968],{"class":367},[252,166783,12575],{"class":262},[252,166785,70361],{"class":5356},[252,166787,308],{"class":258},[252,166789,913],{"class":311},[252,166791,12575],{"class":262},[252,166793,70412],{"class":5356},[252,166795,308],{"class":258},[252,166797,69409],{"class":367},[252,166799,269],{"class":262},[14,166801,166803],{"id":166802},"_77-参数解包","7.7 参数解包",[19,166805,166806],{},"列表或元组解包为位置参数：",[244,166808,166810],{"className":30518,"code":166809,"language":30520,"meta":169,"style":169},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[22,166811,166812,166821,166836,166840,166844,166864],{"__ignoreMap":169},[252,166813,166814,166816,166818],{"class":254,"line":255},[252,166815,32087],{"class":258},[252,166817,5349],{"class":2102},[252,166819,166820],{"class":262},"(a, b, c):\n",[252,166822,166823,166825,166827,166829,166831,166833],{"class":254,"line":170},[252,166824,4229],{"class":258},[252,166826,11009],{"class":262},[252,166828,744],{"class":258},[252,166830,11022],{"class":262},[252,166832,744],{"class":258},[252,166834,166835],{"class":262}," c\n",[252,166837,166838],{"class":254,"line":1318},[252,166839,2539],{"emptyLinePlaceholder":181},[252,166841,166842],{"class":254,"line":1333},[252,166843,2539],{"emptyLinePlaceholder":181},[252,166845,166846,166848,166850,166852,166854,166856,166858,166860,166862],{"class":254,"line":1339},[252,166847,164180],{"class":262},[252,166849,308],{"class":258},[252,166851,52366],{"class":262},[252,166853,480],{"class":311},[252,166855,12575],{"class":262},[252,166857,340],{"class":311},[252,166859,12575],{"class":262},[252,166861,334],{"class":311},[252,166863,33386],{"class":262},[252,166865,166866,166868,166870,166872],{"class":254,"line":1353},[252,166867,30555],{"class":311},[252,166869,166680],{"class":262},[252,166871,718],{"class":258},[252,166873,166874],{"class":262},"nums))\n",[19,166876,166877],{},"字典解包为关键字参数：",[244,166879,166881],{"className":30518,"code":166880,"language":30520,"meta":169,"style":169},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[22,166882,166883,166891,166917,166921,166925,166949],{"__ignoreMap":169},[252,166884,166885,166887,166889],{"class":254,"line":255},[252,166886,32087],{"class":258},[252,166888,149452],{"class":2102},[252,166890,149455],{"class":262},[252,166892,166893,166895,166897,166899,166901,166903,166905,166907,166909,166911,166913,166915],{"class":254,"line":170},[252,166894,31439],{"class":311},[252,166896,263],{"class":262},[252,166898,315],{"class":258},[252,166900,514],{"class":367},[252,166902,1159],{"class":311},[252,166904,79949],{"class":262},[252,166906,1209],{"class":311},[252,166908,4587],{"class":311},[252,166910,70361],{"class":262},[252,166912,1209],{"class":311},[252,166914,514],{"class":367},[252,166916,269],{"class":262},[252,166918,166919],{"class":254,"line":1318},[252,166920,2539],{"emptyLinePlaceholder":181},[252,166922,166923],{"class":254,"line":1333},[252,166924,2539],{"emptyLinePlaceholder":181},[252,166926,166927,166929,166931,166933,166935,166937,166939,166941,166943,166945,166947],{"class":254,"line":1339},[252,166928,116450],{"class":262},[252,166930,308],{"class":258},[252,166932,4587],{"class":262},[252,166934,62819],{"class":367},[252,166936,51577],{"class":262},[252,166938,149968],{"class":367},[252,166940,12575],{"class":262},[252,166942,69264],{"class":367},[252,166944,51577],{"class":262},[252,166946,913],{"class":311},[252,166948,1704],{"class":262},[252,166950,166951,166953,166955],{"class":254,"line":1353},[252,166952,166236],{"class":262},[252,166954,10801],{"class":258},[252,166956,166957],{"class":262},"info)\n",[14,166959,166961],{"id":166960},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,166963,166964,166967],{},[22,166965,166966],{},"lambda"," 用于定义简单匿名函数。",[244,166969,166971],{"className":30518,"code":166970,"language":30520,"meta":169,"style":169},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[22,166972,166973,166990],{"__ignoreMap":169},[252,166974,166975,166978,166980,166983,166986,166988],{"class":254,"line":255},[252,166976,166977],{"class":262},"add ",[252,166979,308],{"class":258},[252,166981,166982],{"class":258}," lambda",[252,166984,166985],{"class":262}," a, b: a ",[252,166987,744],{"class":258},[252,166989,151184],{"class":262},[252,166991,166992,166994,166996,166998,167000,167002],{"class":254,"line":170},[252,166993,30555],{"class":311},[252,166995,166680],{"class":262},[252,166997,480],{"class":311},[252,166999,12575],{"class":262},[252,167001,340],{"class":311},[252,167003,30637],{"class":262},[19,167005,167006],{},"常和排序、过滤等函数一起使用。",[19,167008,167009],{},"按分数排序：",[244,167011,167013],{"className":30518,"code":167012,"language":30520,"meta":169,"style":169},"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",[22,167014,167015,167023,167043,167063,167083,167087,167091,167114],{"__ignoreMap":169},[252,167016,167017,167019,167021],{"class":254,"line":255},[252,167018,159796],{"class":262},[252,167020,308],{"class":258},[252,167022,55587],{"class":262},[252,167024,167025,167027,167029,167031,167033,167035,167037,167039,167041],{"class":254,"line":170},[252,167026,148465],{"class":262},[252,167028,62819],{"class":367},[252,167030,51577],{"class":262},[252,167032,149968],{"class":367},[252,167034,12575],{"class":262},[252,167036,151552],{"class":367},[252,167038,51577],{"class":262},[252,167040,1252],{"class":311},[252,167042,5069],{"class":262},[252,167044,167045,167047,167049,167051,167053,167055,167057,167059,167061],{"class":254,"line":1318},[252,167046,148465],{"class":262},[252,167048,62819],{"class":367},[252,167050,51577],{"class":262},[252,167052,151016],{"class":367},[252,167054,12575],{"class":262},[252,167056,151552],{"class":367},[252,167058,51577],{"class":262},[252,167060,1074],{"class":311},[252,167062,5069],{"class":262},[252,167064,167065,167067,167069,167071,167073,167075,167077,167079,167081],{"class":254,"line":1333},[252,167066,148465],{"class":262},[252,167068,62819],{"class":367},[252,167070,51577],{"class":262},[252,167072,159811],{"class":367},[252,167074,12575],{"class":262},[252,167076,151552],{"class":367},[252,167078,51577],{"class":262},[252,167080,669],{"class":311},[252,167082,5069],{"class":262},[252,167084,167085],{"class":254,"line":1339},[252,167086,33386],{"class":262},[252,167088,167089],{"class":254,"line":1353},[252,167090,2539],{"emptyLinePlaceholder":181},[252,167092,167093,167096,167098,167100,167102,167104,167106,167108,167110,167112],{"class":254,"line":1359},[252,167094,167095],{"class":262},"students.sort(",[252,167097,154026],{"class":5356},[252,167099,154029],{"class":258},[252,167101,154032],{"class":262},[252,167103,151552],{"class":367},[252,167105,112338],{"class":262},[252,167107,163608],{"class":5356},[252,167109,308],{"class":258},[252,167111,31616],{"class":311},[252,167113,269],{"class":262},[252,167115,167116,167118],{"class":254,"line":1450},[252,167117,30555],{"class":311},[252,167119,165075],{"class":262},[19,167121,167122,167123,167125],{},"如果逻辑复杂，不要硬写 ",[22,167124,166966],{},"，定义普通函数更清晰。",[14,167127,167129],{"id":167128},"_79-函数作为参数","7.9 函数作为参数",[19,167131,167132],{},"函数可以作为参数传给另一个函数。",[244,167134,167136],{"className":30518,"code":167135,"language":30520,"meta":169,"style":169},"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",[22,167137,167138,167146,167156,167160,167164,167174,167181,167185,167189],{"__ignoreMap":169},[252,167139,167140,167142,167144],{"class":254,"line":255},[252,167141,32087],{"class":258},[252,167143,5349],{"class":2102},[252,167145,151173],{"class":262},[252,167147,167148,167150,167152,167154],{"class":254,"line":170},[252,167149,4229],{"class":258},[252,167151,11009],{"class":262},[252,167153,744],{"class":258},[252,167155,151184],{"class":262},[252,167157,167158],{"class":254,"line":1318},[252,167159,2539],{"emptyLinePlaceholder":181},[252,167161,167162],{"class":254,"line":1333},[252,167163,2539],{"emptyLinePlaceholder":181},[252,167165,167166,167168,167171],{"class":254,"line":1339},[252,167167,32087],{"class":258},[252,167169,167170],{"class":2102}," calculate",[252,167172,167173],{"class":262},"(a, b, func):\n",[252,167175,167176,167178],{"class":254,"line":1353},[252,167177,4229],{"class":258},[252,167179,167180],{"class":262}," func(a, b)\n",[252,167182,167183],{"class":254,"line":1359},[252,167184,2539],{"emptyLinePlaceholder":181},[252,167186,167187],{"class":254,"line":1450},[252,167188,2539],{"emptyLinePlaceholder":181},[252,167190,167191,167193,167196,167198,167200,167202],{"class":254,"line":1456},[252,167192,30555],{"class":311},[252,167194,167195],{"class":262},"(calculate(",[252,167197,709],{"class":311},[252,167199,12575],{"class":262},[252,167201,963],{"class":311},[252,167203,167204],{"class":262},", add))\n",[19,167206,167207],{},"这种思想在排序、回调、框架中经常出现。",[14,167209,167211],{"id":167210},"_710-mapfiltersorted","7.10 map、filter、sorted",[224,167213,167215],{"id":167214},"_7101-map","7.10.1 map",[19,167217,167218,167220],{},[22,167219,74184],{}," 对每个元素执行函数。",[244,167222,167224],{"className":30518,"code":167223,"language":30520,"meta":169,"style":169},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[22,167225,167226,167250,167273],{"__ignoreMap":169},[252,167227,167228,167230,167232,167234,167236,167238,167240,167242,167244,167246,167248],{"class":254,"line":255},[252,167229,164180],{"class":262},[252,167231,308],{"class":258},[252,167233,52366],{"class":262},[252,167235,480],{"class":311},[252,167237,12575],{"class":262},[252,167239,340],{"class":311},[252,167241,12575],{"class":262},[252,167243,334],{"class":311},[252,167245,12575],{"class":262},[252,167247,556],{"class":311},[252,167249,33386],{"class":262},[252,167251,167252,167254,167256,167259,167261,167263,167266,167268,167270],{"class":254,"line":170},[252,167253,161386],{"class":262},[252,167255,308],{"class":258},[252,167257,167258],{"class":311}," map",[252,167260,263],{"class":262},[252,167262,166966],{"class":258},[252,167264,167265],{"class":262}," x: x ",[252,167267,718],{"class":258},[252,167269,14895],{"class":311},[252,167271,167272],{"class":262},", nums)\n",[252,167274,167275,167277,167279,167281],{"class":254,"line":1318},[252,167276,30555],{"class":311},[252,167278,263],{"class":262},[252,167280,154150],{"class":311},[252,167282,166148],{"class":262},[224,167284,167286],{"id":167285},"_7102-filter","7.10.2 filter",[19,167288,167289,167291],{},[22,167290,80190],{}," 保留满足条件的元素。",[244,167293,167295],{"className":30518,"code":167294,"language":30520,"meta":169,"style":169},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[22,167296,167297,167325,167350],{"__ignoreMap":169},[252,167298,167299,167301,167303,167305,167307,167309,167311,167313,167315,167317,167319,167321,167323],{"class":254,"line":255},[252,167300,164180],{"class":262},[252,167302,308],{"class":258},[252,167304,52366],{"class":262},[252,167306,480],{"class":311},[252,167308,12575],{"class":262},[252,167310,340],{"class":311},[252,167312,12575],{"class":262},[252,167314,334],{"class":311},[252,167316,12575],{"class":262},[252,167318,556],{"class":311},[252,167320,12575],{"class":262},[252,167322,582],{"class":311},[252,167324,33386],{"class":262},[252,167326,167327,167329,167331,167334,167336,167338,167340,167342,167344,167346,167348],{"class":254,"line":170},[252,167328,161386],{"class":262},[252,167330,308],{"class":258},[252,167332,167333],{"class":311}," filter",[252,167335,263],{"class":262},[252,167337,166966],{"class":258},[252,167339,167265],{"class":262},[252,167341,591],{"class":258},[252,167343,14895],{"class":311},[252,167345,101696],{"class":258},[252,167347,4232],{"class":311},[252,167349,167272],{"class":262},[252,167351,167352,167354,167356,167358],{"class":254,"line":1318},[252,167353,30555],{"class":311},[252,167355,263],{"class":262},[252,167357,154150],{"class":311},[252,167359,166148],{"class":262},[224,167361,167363],{"id":167362},"_7103-sorted","7.10.3 sorted",[19,167365,167366,167368],{},[22,167367,165316],{}," 返回排序后的新列表。",[244,167370,167372],{"className":30518,"code":167371,"language":30520,"meta":169,"style":169},"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",[22,167373,167374,167382,167402,167422,167442,167446,167450,167479],{"__ignoreMap":169},[252,167375,167376,167378,167380],{"class":254,"line":255},[252,167377,159796],{"class":262},[252,167379,308],{"class":258},[252,167381,55587],{"class":262},[252,167383,167384,167386,167388,167390,167392,167394,167396,167398,167400],{"class":254,"line":170},[252,167385,148465],{"class":262},[252,167387,62819],{"class":367},[252,167389,51577],{"class":262},[252,167391,149968],{"class":367},[252,167393,12575],{"class":262},[252,167395,151552],{"class":367},[252,167397,51577],{"class":262},[252,167399,1252],{"class":311},[252,167401,5069],{"class":262},[252,167403,167404,167406,167408,167410,167412,167414,167416,167418,167420],{"class":254,"line":1318},[252,167405,148465],{"class":262},[252,167407,62819],{"class":367},[252,167409,51577],{"class":262},[252,167411,151016],{"class":367},[252,167413,12575],{"class":262},[252,167415,151552],{"class":367},[252,167417,51577],{"class":262},[252,167419,1074],{"class":311},[252,167421,5069],{"class":262},[252,167423,167424,167426,167428,167430,167432,167434,167436,167438,167440],{"class":254,"line":1333},[252,167425,148465],{"class":262},[252,167427,62819],{"class":367},[252,167429,51577],{"class":262},[252,167431,159811],{"class":367},[252,167433,12575],{"class":262},[252,167435,151552],{"class":367},[252,167437,51577],{"class":262},[252,167439,669],{"class":311},[252,167441,5069],{"class":262},[252,167443,167444],{"class":254,"line":1339},[252,167445,33386],{"class":262},[252,167447,167448],{"class":254,"line":1353},[252,167449,2539],{"emptyLinePlaceholder":181},[252,167451,167452,167454,167456,167458,167461,167463,167465,167467,167469,167471,167473,167475,167477],{"class":254,"line":1359},[252,167453,161386],{"class":262},[252,167455,308],{"class":258},[252,167457,163684],{"class":311},[252,167459,167460],{"class":262},"(students, ",[252,167462,154026],{"class":5356},[252,167464,154029],{"class":258},[252,167466,154032],{"class":262},[252,167468,151552],{"class":367},[252,167470,112338],{"class":262},[252,167472,163608],{"class":5356},[252,167474,308],{"class":258},[252,167476,31616],{"class":311},[252,167478,269],{"class":262},[252,167480,167481,167483],{"class":254,"line":1450},[252,167482,30555],{"class":311},[252,167484,76725],{"class":262},[14,167486,167488],{"id":167487},"_711-闭包入门","7.11 闭包入门",[19,167490,167491],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[244,167493,167495],{"className":30518,"code":167494,"language":30520,"meta":169,"style":169},"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",[22,167496,167497,167507,167517,167528,167532,167539,167543,167547,167561],{"__ignoreMap":169},[252,167498,167499,167501,167504],{"class":254,"line":255},[252,167500,32087],{"class":258},[252,167502,167503],{"class":2102}," outer",[252,167505,167506],{"class":262},"(base):\n",[252,167508,167509,167511,167514],{"class":254,"line":170},[252,167510,30941],{"class":258},[252,167512,167513],{"class":2102}," inner",[252,167515,167516],{"class":262},"(num):\n",[252,167518,167519,167521,167524,167526],{"class":254,"line":1318},[252,167520,14892],{"class":258},[252,167522,167523],{"class":262}," base ",[252,167525,744],{"class":258},[252,167527,166659],{"class":262},[252,167529,167530],{"class":254,"line":1333},[252,167531,2539],{"emptyLinePlaceholder":181},[252,167533,167534,167536],{"class":254,"line":1339},[252,167535,4229],{"class":258},[252,167537,167538],{"class":262}," inner\n",[252,167540,167541],{"class":254,"line":1353},[252,167542,2539],{"emptyLinePlaceholder":181},[252,167544,167545],{"class":254,"line":1359},[252,167546,2539],{"emptyLinePlaceholder":181},[252,167548,167549,167552,167554,167557,167559],{"class":254,"line":1450},[252,167550,167551],{"class":262},"add_10 ",[252,167553,308],{"class":258},[252,167555,167556],{"class":262}," outer(",[252,167558,709],{"class":311},[252,167560,269],{"class":262},[252,167562,167563,167565,167568,167570],{"class":254,"line":1456},[252,167564,30555],{"class":311},[252,167566,167567],{"class":262},"(add_10(",[252,167569,582],{"class":311},[252,167571,30637],{"class":262},[19,167573,167574],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167576,167578],{"id":167577},"_712-装饰器入门","7.12 装饰器入门",[19,167580,167581],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[244,167583,167585],{"className":30518,"code":167584,"language":30520,"meta":169,"style":169},"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",[22,167586,167587,167596,167605,167616,167621,167632,167636,167643,167647,167651,167656,167664,167674,167678,167682],{"__ignoreMap":169},[252,167588,167589,167591,167593],{"class":254,"line":255},[252,167590,32087],{"class":258},[252,167592,87329],{"class":2102},[252,167594,167595],{"class":262},"(func):\n",[252,167597,167598,167600,167603],{"class":254,"line":170},[252,167599,30941],{"class":258},[252,167601,167602],{"class":2102}," wrapper",[252,167604,32093],{"class":262},[252,167606,167607,167609,167611,167614],{"class":254,"line":1318},[252,167608,32591],{"class":311},[252,167610,263],{"class":262},[252,167612,167613],{"class":367},"\"函数开始执行\"",[252,167615,269],{"class":262},[252,167617,167618],{"class":254,"line":1333},[252,167619,167620],{"class":262},"        func()\n",[252,167622,167623,167625,167627,167630],{"class":254,"line":1339},[252,167624,32591],{"class":311},[252,167626,263],{"class":262},[252,167628,167629],{"class":367},"\"函数执行结束\"",[252,167631,269],{"class":262},[252,167633,167634],{"class":254,"line":1353},[252,167635,2539],{"emptyLinePlaceholder":181},[252,167637,167638,167640],{"class":254,"line":1359},[252,167639,4229],{"class":258},[252,167641,167642],{"class":262}," wrapper\n",[252,167644,167645],{"class":254,"line":1450},[252,167646,2539],{"emptyLinePlaceholder":181},[252,167648,167649],{"class":254,"line":1456},[252,167650,2539],{"emptyLinePlaceholder":181},[252,167652,167653],{"class":254,"line":1468},[252,167654,167655],{"class":2102},"@log\n",[252,167657,167658,167660,167662],{"class":254,"line":1751},[252,167659,32087],{"class":258},[252,167661,161076],{"class":2102},[252,167663,32093],{"class":262},[252,167665,167666,167668,167670,167672],{"class":254,"line":1756},[252,167667,31439],{"class":311},[252,167669,263],{"class":262},[252,167671,5984],{"class":367},[252,167673,269],{"class":262},[252,167675,167676],{"class":254,"line":1762},[252,167677,2539],{"emptyLinePlaceholder":181},[252,167679,167680],{"class":254,"line":1767},[252,167681,2539],{"emptyLinePlaceholder":181},[252,167683,167684],{"class":254,"line":1781},[252,167685,161111],{"class":262},[19,167687,158354],{},[244,167689,167691],{"className":30518,"code":167690,"language":30520,"meta":169,"style":169},"say_hello = log(say_hello)\n",[22,167692,167693],{"__ignoreMap":169},[252,167694,167695,167698,167700],{"class":254,"line":255},[252,167696,167697],{"class":262},"say_hello ",[252,167699,308],{"class":258},[252,167701,167702],{"class":262}," log(say_hello)\n",[19,167704,167705],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167707,167709],{"id":167708},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[244,167711,167713],{"className":30518,"code":167712,"language":30520,"meta":169,"style":169},"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",[22,167714,167715,167723,167740,167750,167769,167779,167786,167790,167796,167800,167804,167808,167816,167826,167830,167834],{"__ignoreMap":169},[252,167716,167717,167719,167721],{"class":254,"line":255},[252,167718,32087],{"class":258},[252,167720,87329],{"class":2102},[252,167722,167595],{"class":262},[252,167724,167725,167727,167729,167731,167733,167736,167738],{"class":254,"line":170},[252,167726,30941],{"class":258},[252,167728,167602],{"class":2102},[252,167730,263],{"class":262},[252,167732,718],{"class":258},[252,167734,167735],{"class":262},"args, ",[252,167737,10801],{"class":258},[252,167739,166746],{"class":262},[252,167741,167742,167744,167746,167748],{"class":254,"line":1318},[252,167743,32591],{"class":311},[252,167745,263],{"class":262},[252,167747,167613],{"class":367},[252,167749,269],{"class":262},[252,167751,167752,167755,167757,167760,167762,167764,167766],{"class":254,"line":1333},[252,167753,167754],{"class":262},"        result ",[252,167756,308],{"class":258},[252,167758,167759],{"class":262}," func(",[252,167761,718],{"class":258},[252,167763,167735],{"class":262},[252,167765,10801],{"class":258},[252,167767,167768],{"class":262},"kwargs)\n",[252,167770,167771,167773,167775,167777],{"class":254,"line":1339},[252,167772,32591],{"class":311},[252,167774,263],{"class":262},[252,167776,167629],{"class":367},[252,167778,269],{"class":262},[252,167780,167781,167783],{"class":254,"line":1353},[252,167782,14892],{"class":258},[252,167784,167785],{"class":262}," result\n",[252,167787,167788],{"class":254,"line":1359},[252,167789,2539],{"emptyLinePlaceholder":181},[252,167791,167792,167794],{"class":254,"line":1450},[252,167793,4229],{"class":258},[252,167795,167642],{"class":262},[252,167797,167798],{"class":254,"line":1456},[252,167799,2539],{"emptyLinePlaceholder":181},[252,167801,167802],{"class":254,"line":1468},[252,167803,2539],{"emptyLinePlaceholder":181},[252,167805,167806],{"class":254,"line":1751},[252,167807,167655],{"class":2102},[252,167809,167810,167812,167814],{"class":254,"line":1756},[252,167811,32087],{"class":258},[252,167813,5349],{"class":2102},[252,167815,151173],{"class":262},[252,167817,167818,167820,167822,167824],{"class":254,"line":1762},[252,167819,4229],{"class":258},[252,167821,11009],{"class":262},[252,167823,744],{"class":258},[252,167825,151184],{"class":262},[252,167827,167828],{"class":254,"line":1767},[252,167829,2539],{"emptyLinePlaceholder":181},[252,167831,167832],{"class":254,"line":1781},[252,167833,2539],{"emptyLinePlaceholder":181},[252,167835,167836,167838,167840,167842,167844,167846],{"class":254,"line":1786},[252,167837,30555],{"class":311},[252,167839,166680],{"class":262},[252,167841,709],{"class":311},[252,167843,12575],{"class":262},[252,167845,963],{"class":311},[252,167847,30637],{"class":262},[19,167849,167850,167851,132,167853,167855],{},"这个写法使用 ",[22,167852,166612],{},[22,167854,166727],{}," 接收原函数的所有参数。",[14,167857,167859],{"id":167858},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,167861,123428],{},[207,167863,167864,167867,167870],{},[210,167865,167866],{},"给定一组学生数据。",[210,167868,167869],{},"封装函数，根据传入规则筛选学生。",[210,167871,167872],{},"筛选及格、优秀、未成年学生。",[19,167874,10175],{},[244,167876,167878],{"className":30518,"code":167877,"language":30520,"meta":169,"style":169},"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",[22,167879,167880,167888,167916,167944,167972,167976,167980,167984,167994,168002,168012,168019,168024,168030,168034,168038,168062,168085,168108,168112,168119,168126],{"__ignoreMap":169},[252,167881,167882,167884,167886],{"class":254,"line":255},[252,167883,159796],{"class":262},[252,167885,308],{"class":258},[252,167887,55587],{"class":262},[252,167889,167890,167892,167894,167896,167898,167900,167902,167904,167906,167908,167910,167912,167914],{"class":254,"line":170},[252,167891,148465],{"class":262},[252,167893,62819],{"class":367},[252,167895,51577],{"class":262},[252,167897,149968],{"class":367},[252,167899,12575],{"class":262},[252,167901,69264],{"class":367},[252,167903,51577],{"class":262},[252,167905,913],{"class":311},[252,167907,12575],{"class":262},[252,167909,151552],{"class":367},[252,167911,51577],{"class":262},[252,167913,1252],{"class":311},[252,167915,5069],{"class":262},[252,167917,167918,167920,167922,167924,167926,167928,167930,167932,167934,167936,167938,167940,167942],{"class":254,"line":1318},[252,167919,148465],{"class":262},[252,167921,62819],{"class":367},[252,167923,51577],{"class":262},[252,167925,151016],{"class":367},[252,167927,12575],{"class":262},[252,167929,69264],{"class":367},[252,167931,51577],{"class":262},[252,167933,888],{"class":311},[252,167935,12575],{"class":262},[252,167937,151552],{"class":367},[252,167939,51577],{"class":262},[252,167941,1074],{"class":311},[252,167943,5069],{"class":262},[252,167945,167946,167948,167950,167952,167954,167956,167958,167960,167962,167964,167966,167968,167970],{"class":254,"line":1333},[252,167947,148465],{"class":262},[252,167949,62819],{"class":367},[252,167951,51577],{"class":262},[252,167953,159811],{"class":367},[252,167955,12575],{"class":262},[252,167957,69264],{"class":367},[252,167959,51577],{"class":262},[252,167961,938],{"class":311},[252,167963,12575],{"class":262},[252,167965,151552],{"class":367},[252,167967,51577],{"class":262},[252,167969,1145],{"class":311},[252,167971,5069],{"class":262},[252,167973,167974],{"class":254,"line":1339},[252,167975,33386],{"class":262},[252,167977,167978],{"class":254,"line":1353},[252,167979,2539],{"emptyLinePlaceholder":181},[252,167981,167982],{"class":254,"line":1359},[252,167983,2539],{"emptyLinePlaceholder":181},[252,167985,167986,167988,167991],{"class":254,"line":1450},[252,167987,32087],{"class":258},[252,167989,167990],{"class":2102}," filter_students",[252,167992,167993],{"class":262},"(students, condition):\n",[252,167995,167996,167998,168000],{"class":254,"line":1456},[252,167997,161303],{"class":262},[252,167999,308],{"class":258},[252,168001,51978],{"class":262},[252,168003,168004,168006,168008,168010],{"class":254,"line":1468},[252,168005,3340],{"class":258},[252,168007,152217],{"class":262},[252,168009,26183],{"class":258},[252,168011,152222],{"class":262},[252,168013,168014,168016],{"class":254,"line":1751},[252,168015,2636],{"class":258},[252,168017,168018],{"class":262}," condition(student):\n",[252,168020,168021],{"class":254,"line":1756},[252,168022,168023],{"class":262},"            result.append(student)\n",[252,168025,168026,168028],{"class":254,"line":1762},[252,168027,4229],{"class":258},[252,168029,167785],{"class":262},[252,168031,168032],{"class":254,"line":1767},[252,168033,2539],{"emptyLinePlaceholder":181},[252,168035,168036],{"class":254,"line":1781},[252,168037,2539],{"emptyLinePlaceholder":181},[252,168039,168040,168042,168044,168047,168049,168052,168054,168056,168058,168060],{"class":254,"line":1786},[252,168041,165781],{"class":262},[252,168043,308],{"class":258},[252,168045,168046],{"class":262}," filter_students(students, ",[252,168048,166966],{"class":258},[252,168050,168051],{"class":262}," s: s[",[252,168053,151552],{"class":367},[252,168055,4582],{"class":262},[252,168057,1849],{"class":258},[252,168059,157917],{"class":311},[252,168061,269],{"class":262},[252,168063,168064,168067,168069,168071,168073,168075,168077,168079,168081,168083],{"class":254,"line":1792},[252,168065,168066],{"class":262},"excellent ",[252,168068,308],{"class":258},[252,168070,168046],{"class":262},[252,168072,166966],{"class":258},[252,168074,168051],{"class":262},[252,168076,151552],{"class":367},[252,168078,4582],{"class":262},[252,168080,1849],{"class":258},[252,168082,157868],{"class":311},[252,168084,269],{"class":262},[252,168086,168087,168090,168092,168094,168096,168098,168100,168102,168104,168106],{"class":254,"line":1813},[252,168088,168089],{"class":262},"under_age ",[252,168091,308],{"class":258},[252,168093,168046],{"class":262},[252,168095,166966],{"class":258},[252,168097,168051],{"class":262},[252,168099,69264],{"class":367},[252,168101,4582],{"class":262},[252,168103,1173],{"class":258},[252,168105,156365],{"class":311},[252,168107,269],{"class":262},[252,168109,168110],{"class":254,"line":1818},[252,168111,2539],{"emptyLinePlaceholder":181},[252,168113,168114,168116],{"class":254,"line":1832},[252,168115,30555],{"class":311},[252,168117,168118],{"class":262},"(passed)\n",[252,168120,168121,168123],{"class":254,"line":1837},[252,168122,30555],{"class":311},[252,168124,168125],{"class":262},"(excellent)\n",[252,168127,168128,168130],{"class":254,"line":1866},[252,168129,30555],{"class":311},[252,168131,168132],{"class":262},"(under_age)\n",[14,168134,168136],{"id":168135},"_715-易错点","7.15 易错点",[207,168138,168139,168142,168150,168155,168166],{},[210,168140,168141],{},"默认参数不要写可变对象。",[210,168143,168144,168146,168147,168149],{},[22,168145,166612],{}," 是元组，",[22,168148,166727],{}," 是字典。",[210,168151,168152,168154],{},[22,168153,166966],{}," 只适合简单表达式。",[210,168156,168157,132,168159,168161,168162,168165],{},[22,168158,74184],{},[22,168160,80190],{}," 的结果是迭代器，常用 ",[22,168163,168164],{},"list()"," 转换查看。",[210,168167,168168],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168170,168172],{"id":168171},"_716-本章练习","7.16 本章练习",[207,168174,168175,168182,168188,168193,168198],{},[210,168176,168177,168178,168181],{},"写函数 ",[22,168179,168180],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[210,168183,168177,168184,168187],{},[22,168185,168186],{},"print_user(**kwargs)","，输出用户所有字段。",[210,168189,104502,168190,168192],{},[22,168191,166966],{}," 对学生列表按年龄排序。",[210,168194,104502,168195,168197],{},[22,168196,80190],{}," 找出成绩不及格的学生。",[210,168199,168200],{},"写一个装饰器，统计函数执行前后的提示信息。",[5266,168202,168203],{},"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":169,"searchDepth":170,"depth":170,"links":168205},[168206,168207,168208,168209,168210,168211,168215,168216,168217,168218,168223,168224,168225,168226,168227,168228],{"id":166064,"depth":170,"text":166065},{"id":166178,"depth":170,"text":166179},{"id":166267,"depth":170,"text":166268},{"id":166329,"depth":170,"text":166330},{"id":166475,"depth":170,"text":166476},{"id":166602,"depth":170,"text":166603,"children":168212},[168213,168214],{"id":166606,"depth":1318,"text":166607},{"id":166721,"depth":1318,"text":166722},{"id":166802,"depth":170,"text":166803},{"id":166960,"depth":170,"text":166961},{"id":167128,"depth":170,"text":167129},{"id":167210,"depth":170,"text":167211,"children":168219},[168220,168221,168222],{"id":167214,"depth":1318,"text":167215},{"id":167285,"depth":1318,"text":167286},{"id":167362,"depth":1318,"text":167363},{"id":167487,"depth":170,"text":167488},{"id":167577,"depth":170,"text":167578},{"id":167708,"depth":170,"text":167709},{"id":167858,"depth":170,"text":167859},{"id":168135,"depth":170,"text":168136},{"id":168171,"depth":170,"text":168172},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166056,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168235,"title":168236,"body":168237,"description":178,"extension":179,"meta":170756,"navigation":181,"path":170757,"seo":170758,"stem":170759,"__hash__":170760},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168238,"toc":170731},[168239,168242,168246,168249,168252,168283,168287,168291,168294,168321,168325,168328,168379,168382,168397,168400,168435,168439,168441,168465,168468,168528,168532,168536,168539,168596,168599,168619,168623,168626,168689,168693,168696,168752,168759,168783,168787,168790,168853,168857,168862,168913,168916,168920,168925,168992,168995,169077,169081,169086,169137,169140,169144,169147,169150,169158,169161,169207,169210,169256,169260,169266,169310,169313,169359,169362,169402,169405,169466,169470,169473,169563,169566,169708,169711,169778,169782,169785,169788,169929,169932,170010,170013,170189,170193,170195,170206,170208,170407,170411,170655,170659,170693,170697,170728],[10,168240,168236],{"id":168241},"_8-文件操作",[14,168243,168245],{"id":168244},"_81-文件操作的意义","8.1 文件操作的意义",[19,168247,168248],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168250,168251],{},"常见文件类型：",[207,168253,168254,168260,168266,168272,168278],{},[210,168255,168256,168259],{},[22,168257,168258],{},".txt","：普通文本。",[210,168261,168262,168265],{},[22,168263,168264],{},".csv","：表格文本。",[210,168267,168268,168271],{},[22,168269,168270],{},".json","：结构化数据。",[210,168273,168274,168277],{},[22,168275,168276],{},".log","：日志文件。",[210,168279,168280,168282],{},[22,168281,146432],{},"：Python 源代码。",[14,168284,168286],{"id":168285},"_82-路径","8.2 路径",[224,168288,168290],{"id":168289},"_821-相对路径","8.2.1 相对路径",[19,168292,168293],{},"相对当前运行目录：",[244,168295,168297],{"className":30518,"code":168296,"language":30520,"meta":169,"style":169},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[22,168298,168299],{"__ignoreMap":169},[252,168300,168301,168303,168305,168307,168309,168311,168313,168315,168317,168319],{"class":254,"line":255},[252,168302,87053],{"class":311},[252,168304,263],{"class":262},[252,168306,146876],{"class":367},[252,168308,12575],{"class":262},[252,168310,146881],{"class":367},[252,168312,12575],{"class":262},[252,168314,146886],{"class":5356},[252,168316,308],{"class":258},[252,168318,146891],{"class":367},[252,168320,269],{"class":262},[224,168322,168324],{"id":168323},"_822-绝对路径","8.2.2 绝对路径",[19,168326,168327],{},"从根目录或盘符开始：",[244,168329,168331],{"className":30518,"code":168330,"language":30520,"meta":169,"style":169},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[22,168332,168333,168356],{"__ignoreMap":169},[252,168334,168335,168337,168339,168342,168344,168346,168348,168350,168352,168354],{"class":254,"line":255},[252,168336,87053],{"class":311},[252,168338,263],{"class":262},[252,168340,168341],{"class":367},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[252,168343,12575],{"class":262},[252,168345,146881],{"class":367},[252,168347,12575],{"class":262},[252,168349,146886],{"class":5356},[252,168351,308],{"class":258},[252,168353,146891],{"class":367},[252,168355,269],{"class":262},[252,168357,168358,168360,168362,168365,168367,168369,168371,168373,168375,168377],{"class":254,"line":170},[252,168359,87053],{"class":311},[252,168361,263],{"class":262},[252,168363,168364],{"class":367},"\"D:\u002Fdata\u002Fdata.txt\"",[252,168366,12575],{"class":262},[252,168368,146881],{"class":367},[252,168370,12575],{"class":262},[252,168372,146886],{"class":5356},[252,168374,308],{"class":258},[252,168376,146891],{"class":367},[252,168378,269],{"class":262},[19,168380,168381],{},"Windows 路径建议写成：",[244,168383,168385],{"className":30518,"code":168384,"language":30520,"meta":169,"style":169},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[22,168386,168387],{"__ignoreMap":169},[252,168388,168389,168392,168394],{"class":254,"line":255},[252,168390,168391],{"class":262},"path ",[252,168393,308],{"class":258},[252,168395,168396],{"class":367}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168398,168399],{},"或原始字符串：",[244,168401,168403],{"className":30518,"code":168402,"language":30520,"meta":169,"style":169},"path = r\"D:\\data\\data.txt\"\n",[22,168404,168405],{"__ignoreMap":169},[252,168406,168407,168409,168411,168413,168415,168418,168421,168424,168426,168428,168430,168433],{"class":254,"line":255},[252,168408,168391],{"class":262},[252,168410,308],{"class":258},[252,168412,17261],{"class":258},[252,168414,514],{"class":367},[252,168416,168417],{"class":48117},"D:",[252,168419,168420],{"class":311},"\\d",[252,168422,168423],{"class":48117},"ata",[252,168425,168420],{"class":311},[252,168427,168423],{"class":48117},[252,168429,821],{"class":311},[252,168431,168432],{"class":48117},"txt",[252,168434,25273],{"class":367},[14,168436,168438],{"id":168437},"_83-open函数","8.3 open函数",[19,168440,5321],{},[244,168442,168444],{"className":30518,"code":168443,"language":30520,"meta":169,"style":169},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[22,168445,168446],{"__ignoreMap":169},[252,168447,168448,168450,168452,168454,168457,168459,168461,168463],{"class":254,"line":255},[252,168449,45494],{"class":5356},[252,168451,13704],{"class":258},[252,168453,146871],{"class":311},[252,168455,168456],{"class":262},"(文件路径, 打开模式, ",[252,168458,146886],{"class":5356},[252,168460,308],{"class":258},[252,168462,146891],{"class":367},[252,168464,269],{"class":262},[19,168466,168467],{},"常见模式：",[400,168469,168470,168479],{},[403,168471,168472],{},[406,168473,168474,168477],{},[409,168475,168476],{},"模式",[409,168478,26009],{},[447,168480,168481,168490,168499,168508,168518],{},[406,168482,168483,168487],{},[452,168484,168485],{},[22,168486,933],{},[452,168488,168489],{},"只读，文件不存在会报错",[406,168491,168492,168496],{},[452,168493,168494],{},[22,168495,1058],{},[452,168497,168498],{},"只写，文件不存在会创建，存在会清空",[406,168500,168501,168505],{},[452,168502,168503],{},[22,168504,501],{},[452,168506,168507],{},"追加，文件不存在会创建",[406,168509,168510,168515],{},[452,168511,168512],{},[22,168513,168514],{},"rb",[452,168516,168517],{},"二进制只读",[406,168519,168520,168525],{},[452,168521,168522],{},[22,168523,168524],{},"wb",[452,168526,168527],{},"二进制只写",[14,168529,168531],{"id":168530},"_84-读取文件","8.4 读取文件",[224,168533,168535],{"id":168534},"_841-read","8.4.1 read",[19,168537,168538],{},"一次读取全部内容：",[244,168540,168542],{"className":30518,"code":168541,"language":30520,"meta":169,"style":169},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[22,168543,168544,168570,168582,168589],{"__ignoreMap":169},[252,168545,168546,168548,168550,168552,168554,168556,168558,168560,168562,168564,168566,168568],{"class":254,"line":255},[252,168547,45494],{"class":5356},[252,168549,13704],{"class":258},[252,168551,146871],{"class":311},[252,168553,263],{"class":262},[252,168555,146876],{"class":367},[252,168557,12575],{"class":262},[252,168559,146881],{"class":367},[252,168561,12575],{"class":262},[252,168563,146886],{"class":5356},[252,168565,308],{"class":258},[252,168567,146891],{"class":367},[252,168569,269],{"class":262},[252,168571,168572,168575,168577,168579],{"class":254,"line":170},[252,168573,168574],{"class":262},"content ",[252,168576,308],{"class":258},[252,168578,148233],{"class":5356},[252,168580,168581],{"class":262},".read()\n",[252,168583,168584,168586],{"class":254,"line":1318},[252,168585,30555],{"class":311},[252,168587,168588],{"class":262},"(content)\n",[252,168590,168591,168593],{"class":254,"line":1333},[252,168592,45494],{"class":5356},[252,168594,168595],{"class":262},".close()\n",[19,168597,168598],{},"可以指定读取字符数：",[244,168600,168602],{"className":30518,"code":168601,"language":30520,"meta":169,"style":169},"content = file.read(10)\n",[22,168603,168604],{"__ignoreMap":169},[252,168605,168606,168608,168610,168612,168615,168617],{"class":254,"line":255},[252,168607,168574],{"class":262},[252,168609,308],{"class":258},[252,168611,148233],{"class":5356},[252,168613,168614],{"class":262},".read(",[252,168616,709],{"class":311},[252,168618,269],{"class":262},[224,168620,168622],{"id":168621},"_842-readline","8.4.2 readline",[19,168624,168625],{},"一次读取一行：",[244,168627,168629],{"className":30518,"code":168628,"language":30520,"meta":169,"style":169},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[22,168630,168631,168657,168661,168672,168679,168683],{"__ignoreMap":169},[252,168632,168633,168635,168637,168639,168641,168643,168645,168647,168649,168651,168653,168655],{"class":254,"line":255},[252,168634,45494],{"class":5356},[252,168636,13704],{"class":258},[252,168638,146871],{"class":311},[252,168640,263],{"class":262},[252,168642,146876],{"class":367},[252,168644,12575],{"class":262},[252,168646,146881],{"class":367},[252,168648,12575],{"class":262},[252,168650,146886],{"class":5356},[252,168652,308],{"class":258},[252,168654,146891],{"class":367},[252,168656,269],{"class":262},[252,168658,168659],{"class":254,"line":170},[252,168660,2539],{"emptyLinePlaceholder":181},[252,168662,168663,168665,168667,168669],{"class":254,"line":1318},[252,168664,147332],{"class":262},[252,168666,308],{"class":258},[252,168668,148233],{"class":5356},[252,168670,168671],{"class":262},".readline()\n",[252,168673,168674,168676],{"class":254,"line":1333},[252,168675,30555],{"class":311},[252,168677,168678],{"class":262},"(line)\n",[252,168680,168681],{"class":254,"line":1339},[252,168682,2539],{"emptyLinePlaceholder":181},[252,168684,168685,168687],{"class":254,"line":1353},[252,168686,45494],{"class":5356},[252,168688,168595],{"class":262},[224,168690,168692],{"id":168691},"_843-readlines","8.4.3 readlines",[19,168694,168695],{},"读取所有行，返回列表：",[244,168697,168699],{"className":30518,"code":168698,"language":30520,"meta":169,"style":169},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[22,168700,168701,168727,168739,168746],{"__ignoreMap":169},[252,168702,168703,168705,168707,168709,168711,168713,168715,168717,168719,168721,168723,168725],{"class":254,"line":255},[252,168704,45494],{"class":5356},[252,168706,13704],{"class":258},[252,168708,146871],{"class":311},[252,168710,263],{"class":262},[252,168712,146876],{"class":367},[252,168714,12575],{"class":262},[252,168716,146881],{"class":367},[252,168718,12575],{"class":262},[252,168720,146886],{"class":5356},[252,168722,308],{"class":258},[252,168724,146891],{"class":367},[252,168726,269],{"class":262},[252,168728,168729,168732,168734,168736],{"class":254,"line":170},[252,168730,168731],{"class":262},"lines ",[252,168733,308],{"class":258},[252,168735,148233],{"class":5356},[252,168737,168738],{"class":262},".readlines()\n",[252,168740,168741,168743],{"class":254,"line":1318},[252,168742,30555],{"class":311},[252,168744,168745],{"class":262},"(lines)\n",[252,168747,168748,168750],{"class":254,"line":1333},[252,168749,45494],{"class":5356},[252,168751,168595],{"class":262},[19,168753,168754,168755,168758],{},"每一行通常带有换行符，可以用 ",[22,168756,168757],{},"strip()"," 去掉：",[244,168760,168762],{"className":30518,"code":168761,"language":30520,"meta":169,"style":169},"for line in lines:\n    print(line.strip())\n",[22,168763,168764,168776],{"__ignoreMap":169},[252,168765,168766,168768,168771,168773],{"class":254,"line":255},[252,168767,3164],{"class":258},[252,168769,168770],{"class":262}," line ",[252,168772,26183],{"class":258},[252,168774,168775],{"class":262}," lines:\n",[252,168777,168778,168780],{"class":254,"line":170},[252,168779,31439],{"class":311},[252,168781,168782],{"class":262},"(line.strip())\n",[224,168784,168786],{"id":168785},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,168788,168789],{},"推荐读取大文件时使用：",[244,168791,168793],{"className":30518,"code":168792,"language":30520,"meta":169,"style":169},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[22,168794,168795,168821,168825,168837,168843,168847],{"__ignoreMap":169},[252,168796,168797,168799,168801,168803,168805,168807,168809,168811,168813,168815,168817,168819],{"class":254,"line":255},[252,168798,45494],{"class":5356},[252,168800,13704],{"class":258},[252,168802,146871],{"class":311},[252,168804,263],{"class":262},[252,168806,146876],{"class":367},[252,168808,12575],{"class":262},[252,168810,146881],{"class":367},[252,168812,12575],{"class":262},[252,168814,146886],{"class":5356},[252,168816,308],{"class":258},[252,168818,146891],{"class":367},[252,168820,269],{"class":262},[252,168822,168823],{"class":254,"line":170},[252,168824,2539],{"emptyLinePlaceholder":181},[252,168826,168827,168829,168831,168833,168835],{"class":254,"line":1318},[252,168828,3164],{"class":258},[252,168830,168770],{"class":262},[252,168832,26183],{"class":258},[252,168834,148233],{"class":5356},[252,168836,3878],{"class":262},[252,168838,168839,168841],{"class":254,"line":1333},[252,168840,31439],{"class":311},[252,168842,168782],{"class":262},[252,168844,168845],{"class":254,"line":1339},[252,168846,2539],{"emptyLinePlaceholder":181},[252,168848,168849,168851],{"class":254,"line":1353},[252,168850,45494],{"class":5356},[252,168852,168595],{"class":262},[14,168854,168856],{"id":168855},"_85-with语句","8.5 with语句",[19,168858,168859,168861],{},[22,168860,107969],{}," 会自动关闭文件，推荐使用。",[244,168863,168865],{"className":30518,"code":168864,"language":30520,"meta":169,"style":169},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[22,168866,168867,168897,168907],{"__ignoreMap":169},[252,168868,168869,168871,168873,168875,168877,168879,168881,168883,168885,168887,168889,168891,168893,168895],{"class":254,"line":255},[252,168870,107969],{"class":258},[252,168872,146871],{"class":311},[252,168874,263],{"class":262},[252,168876,146876],{"class":367},[252,168878,12575],{"class":262},[252,168880,146881],{"class":367},[252,168882,12575],{"class":262},[252,168884,146886],{"class":5356},[252,168886,308],{"class":258},[252,168888,146891],{"class":367},[252,168890,13854],{"class":262},[252,168892,31523],{"class":258},[252,168894,148233],{"class":5356},[252,168896,3878],{"class":262},[252,168898,168899,168901,168903,168905],{"class":254,"line":170},[252,168900,146903],{"class":262},[252,168902,308],{"class":258},[252,168904,148233],{"class":5356},[252,168906,168581],{"class":262},[252,168908,168909,168911],{"class":254,"line":1318},[252,168910,31439],{"class":311},[252,168912,168588],{"class":262},[19,168914,168915],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,168917,168919],{"id":168918},"_86-写入文件","8.6 写入文件",[19,168921,168922,168924],{},[22,168923,1058],{}," 模式会清空原文件。",[244,168926,168928],{"className":30518,"code":168927,"language":30520,"meta":169,"style":169},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[22,168929,168930,168960,168977],{"__ignoreMap":169},[252,168931,168932,168934,168936,168938,168940,168942,168944,168946,168948,168950,168952,168954,168956,168958],{"class":254,"line":255},[252,168933,107969],{"class":258},[252,168935,146871],{"class":311},[252,168937,263],{"class":262},[252,168939,146876],{"class":367},[252,168941,12575],{"class":262},[252,168943,152056],{"class":367},[252,168945,12575],{"class":262},[252,168947,146886],{"class":5356},[252,168949,308],{"class":258},[252,168951,146891],{"class":367},[252,168953,13854],{"class":262},[252,168955,31523],{"class":258},[252,168957,148233],{"class":5356},[252,168959,3878],{"class":262},[252,168961,168962,168965,168968,168971,168973,168975],{"class":254,"line":170},[252,168963,168964],{"class":5356},"    file",[252,168966,168967],{"class":262},".write(",[252,168969,168970],{"class":367},"\"hello",[252,168972,156605],{"class":311},[252,168974,514],{"class":367},[252,168976,269],{"class":262},[252,168978,168979,168981,168983,168986,168988,168990],{"class":254,"line":1318},[252,168980,168964],{"class":5356},[252,168982,168967],{"class":262},[252,168984,168985],{"class":367},"\"python",[252,168987,156605],{"class":311},[252,168989,514],{"class":367},[252,168991,269],{"class":262},[19,168993,168994],{},"写入多行：",[244,168996,168998],{"className":30518,"code":168997,"language":30520,"meta":169,"style":169},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[22,168999,169000,169035,169039,169070],{"__ignoreMap":169},[252,169001,169002,169004,169006,169008,169011,169013,169015,169017,169020,169022,169024,169026,169029,169031,169033],{"class":254,"line":255},[252,169003,168731],{"class":262},[252,169005,308],{"class":258},[252,169007,52366],{"class":262},[252,169009,169010],{"class":367},"\"小明,18",[252,169012,156605],{"class":311},[252,169014,514],{"class":367},[252,169016,12575],{"class":262},[252,169018,169019],{"class":367},"\"小红,17",[252,169021,156605],{"class":311},[252,169023,514],{"class":367},[252,169025,12575],{"class":262},[252,169027,169028],{"class":367},"\"小刚,19",[252,169030,156605],{"class":311},[252,169032,514],{"class":367},[252,169034,33386],{"class":262},[252,169036,169037],{"class":254,"line":170},[252,169038,2539],{"emptyLinePlaceholder":181},[252,169040,169041,169043,169045,169047,169050,169052,169054,169056,169058,169060,169062,169064,169066,169068],{"class":254,"line":1318},[252,169042,107969],{"class":258},[252,169044,146871],{"class":311},[252,169046,263],{"class":262},[252,169048,169049],{"class":367},"\"students.txt\"",[252,169051,12575],{"class":262},[252,169053,152056],{"class":367},[252,169055,12575],{"class":262},[252,169057,146886],{"class":5356},[252,169059,308],{"class":258},[252,169061,146891],{"class":367},[252,169063,13854],{"class":262},[252,169065,31523],{"class":258},[252,169067,148233],{"class":5356},[252,169069,3878],{"class":262},[252,169071,169072,169074],{"class":254,"line":1333},[252,169073,168964],{"class":5356},[252,169075,169076],{"class":262},".writelines(lines)\n",[14,169078,169080],{"id":169079},"_87-追加文件","8.7 追加文件",[19,169082,169083,169085],{},[22,169084,501],{}," 模式不会清空原内容，而是在末尾追加。",[244,169087,169089],{"className":30518,"code":169088,"language":30520,"meta":169,"style":169},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[22,169090,169091,169122],{"__ignoreMap":169},[252,169092,169093,169095,169097,169099,169102,169104,169106,169108,169110,169112,169114,169116,169118,169120],{"class":254,"line":255},[252,169094,107969],{"class":258},[252,169096,146871],{"class":311},[252,169098,263],{"class":262},[252,169100,169101],{"class":367},"\"log.txt\"",[252,169103,12575],{"class":262},[252,169105,165405],{"class":367},[252,169107,12575],{"class":262},[252,169109,146886],{"class":5356},[252,169111,308],{"class":258},[252,169113,146891],{"class":367},[252,169115,13854],{"class":262},[252,169117,31523],{"class":258},[252,169119,148233],{"class":5356},[252,169121,3878],{"class":262},[252,169123,169124,169126,169128,169131,169133,169135],{"class":254,"line":170},[252,169125,168964],{"class":5356},[252,169127,168967],{"class":262},[252,169129,169130],{"class":367},"\"程序启动",[252,169132,156605],{"class":311},[252,169134,514],{"class":367},[252,169136,269],{"class":262},[19,169138,169139],{},"日志类文件常用追加模式。",[14,169141,169143],{"id":169142},"_88-文件编码","8.8 文件编码",[19,169145,169146],{},"编码决定文字如何保存为字节。",[19,169148,169149],{},"常见编码：",[207,169151,169152,169155],{},[210,169153,169154],{},"UTF-8：推荐。",[210,169156,169157],{},"GBK：部分 Windows 中文文件常见。",[19,169159,169160],{},"读取文件乱码时，可以尝试：",[244,169162,169164],{"className":30518,"code":169163,"language":30520,"meta":169,"style":169},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[22,169165,169166,169197],{"__ignoreMap":169},[252,169167,169168,169170,169172,169174,169176,169178,169180,169182,169184,169186,169189,169191,169193,169195],{"class":254,"line":255},[252,169169,107969],{"class":258},[252,169171,146871],{"class":311},[252,169173,263],{"class":262},[252,169175,146876],{"class":367},[252,169177,12575],{"class":262},[252,169179,146881],{"class":367},[252,169181,12575],{"class":262},[252,169183,146886],{"class":5356},[252,169185,308],{"class":258},[252,169187,169188],{"class":367},"\"gbk\"",[252,169190,13854],{"class":262},[252,169192,31523],{"class":258},[252,169194,148233],{"class":5356},[252,169196,3878],{"class":262},[252,169198,169199,169201,169203,169205],{"class":254,"line":170},[252,169200,146903],{"class":262},[252,169202,308],{"class":258},[252,169204,148233],{"class":5356},[252,169206,168581],{"class":262},[19,169208,169209],{},"写文件时建议统一 UTF-8：",[244,169211,169213],{"className":30518,"code":169212,"language":30520,"meta":169,"style":169},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[22,169214,169215,169245],{"__ignoreMap":169},[252,169216,169217,169219,169221,169223,169225,169227,169229,169231,169233,169235,169237,169239,169241,169243],{"class":254,"line":255},[252,169218,107969],{"class":258},[252,169220,146871],{"class":311},[252,169222,263],{"class":262},[252,169224,146876],{"class":367},[252,169226,12575],{"class":262},[252,169228,152056],{"class":367},[252,169230,12575],{"class":262},[252,169232,146886],{"class":5356},[252,169234,308],{"class":258},[252,169236,146891],{"class":367},[252,169238,13854],{"class":262},[252,169240,31523],{"class":258},[252,169242,148233],{"class":5356},[252,169244,3878],{"class":262},[252,169246,169247,169249,169251,169254],{"class":254,"line":170},[252,169248,168964],{"class":5356},[252,169250,168967],{"class":262},[252,169252,169253],{"class":367},"\"中文内容\"",[252,169255,269],{"class":262},[14,169257,169259],{"id":169258},"_89-pathlib","8.9 pathlib",[19,169261,169262,169265],{},[22,169263,169264],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[244,169267,169269],{"className":30518,"code":169268,"language":30520,"meta":169,"style":169},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[22,169270,169271,169281,169285,169303],{"__ignoreMap":169},[252,169272,169273,169275,169277,169279],{"class":254,"line":255},[252,169274,30877],{"class":258},[252,169276,108447],{"class":262},[252,169278,30532],{"class":258},[252,169280,108452],{"class":262},[252,169282,169283],{"class":254,"line":170},[252,169284,2539],{"emptyLinePlaceholder":181},[252,169286,169287,169289,169291,169293,169296,169298,169300],{"class":254,"line":1318},[252,169288,168391],{"class":262},[252,169290,308],{"class":258},[252,169292,108681],{"class":262},[252,169294,169295],{"class":367},"\"data\"",[252,169297,13854],{"class":262},[252,169299,847],{"class":258},[252,169301,169302],{"class":367}," \"students.txt\"\n",[252,169304,169305,169307],{"class":254,"line":1333},[252,169306,30555],{"class":311},[252,169308,169309],{"class":262},"(path)\n",[19,169311,169312],{},"创建目录：",[244,169314,169316],{"className":30518,"code":169315,"language":30520,"meta":169,"style":169},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[22,169317,169318,169328,169332,169345],{"__ignoreMap":169},[252,169319,169320,169322,169324,169326],{"class":254,"line":255},[252,169321,30877],{"class":258},[252,169323,108447],{"class":262},[252,169325,30532],{"class":258},[252,169327,108452],{"class":262},[252,169329,169330],{"class":254,"line":170},[252,169331,2539],{"emptyLinePlaceholder":181},[252,169333,169334,169337,169339,169341,169343],{"class":254,"line":1318},[252,169335,169336],{"class":262},"data_dir ",[252,169338,308],{"class":258},[252,169340,108681],{"class":262},[252,169342,169295],{"class":367},[252,169344,269],{"class":262},[252,169346,169347,169350,169353,169355,169357],{"class":254,"line":1333},[252,169348,169349],{"class":262},"data_dir.mkdir(",[252,169351,169352],{"class":5356},"exist_ok",[252,169354,308],{"class":258},[252,169356,31616],{"class":311},[252,169358,269],{"class":262},[19,169360,169361],{},"判断文件是否存在：",[244,169363,169365],{"className":30518,"code":169364,"language":30520,"meta":169,"style":169},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[22,169366,169367,169380,169384,169391],{"__ignoreMap":169},[252,169368,169369,169371,169373,169375,169378],{"class":254,"line":255},[252,169370,168391],{"class":262},[252,169372,308],{"class":258},[252,169374,108681],{"class":262},[252,169376,169377],{"class":367},"\"data\u002Fstudents.txt\"",[252,169379,269],{"class":262},[252,169381,169382],{"class":254,"line":170},[252,169383,2539],{"emptyLinePlaceholder":181},[252,169385,169386,169388],{"class":254,"line":1318},[252,169387,1670],{"class":258},[252,169389,169390],{"class":262}," path.exists():\n",[252,169392,169393,169395,169397,169400],{"class":254,"line":1333},[252,169394,31439],{"class":311},[252,169396,263],{"class":262},[252,169398,169399],{"class":367},"\"文件存在\"",[252,169401,269],{"class":262},[19,169403,169404],{},"读写文本：",[244,169406,169408],{"className":30518,"code":169407,"language":30520,"meta":169,"style":169},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[22,169409,169410,169422,169426,169443,169460],{"__ignoreMap":169},[252,169411,169412,169414,169416,169418,169420],{"class":254,"line":255},[252,169413,168391],{"class":262},[252,169415,308],{"class":258},[252,169417,108681],{"class":262},[252,169419,146876],{"class":367},[252,169421,269],{"class":262},[252,169423,169424],{"class":254,"line":170},[252,169425,2539],{"emptyLinePlaceholder":181},[252,169427,169428,169431,169433,169435,169437,169439,169441],{"class":254,"line":1318},[252,169429,169430],{"class":262},"path.write_text(",[252,169432,145956],{"class":367},[252,169434,12575],{"class":262},[252,169436,146886],{"class":5356},[252,169438,308],{"class":258},[252,169440,146891],{"class":367},[252,169442,269],{"class":262},[252,169444,169445,169447,169449,169452,169454,169456,169458],{"class":254,"line":1333},[252,169446,168574],{"class":262},[252,169448,308],{"class":258},[252,169450,169451],{"class":262}," path.read_text(",[252,169453,146886],{"class":5356},[252,169455,308],{"class":258},[252,169457,146891],{"class":367},[252,169459,269],{"class":262},[252,169461,169462,169464],{"class":254,"line":1339},[252,169463,30555],{"class":311},[252,169465,168588],{"class":262},[14,169467,169469],{"id":169468},"_810-json文件","8.10 JSON文件",[19,169471,169472],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[244,169474,169476],{"className":30518,"code":169475,"language":30520,"meta":169,"style":169},"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",[22,169477,169478,169484,169488,169496,169506,169516,169524,169528,169532,169557],{"__ignoreMap":169},[252,169479,169480,169482],{"class":254,"line":255},[252,169481,30532],{"class":258},[252,169483,147171],{"class":262},[252,169485,169486],{"class":254,"line":170},[252,169487,2539],{"emptyLinePlaceholder":181},[252,169489,169490,169492,169494],{"class":254,"line":1318},[252,169491,149561],{"class":262},[252,169493,308],{"class":258},[252,169495,15712],{"class":262},[252,169497,169498,169500,169502,169504],{"class":254,"line":1333},[252,169499,147100],{"class":367},[252,169501,51577],{"class":262},[252,169503,149968],{"class":367},[252,169505,31606],{"class":262},[252,169507,169508,169510,169512,169514],{"class":254,"line":1339},[252,169509,164617],{"class":367},[252,169511,51577],{"class":262},[252,169513,913],{"class":311},[252,169515,31606],{"class":262},[252,169517,169518,169520,169522],{"class":254,"line":1353},[252,169519,164628],{"class":367},[252,169521,51577],{"class":262},[252,169523,164633],{"class":311},[252,169525,169526],{"class":254,"line":1359},[252,169527,1704],{"class":262},[252,169529,169530],{"class":254,"line":1450},[252,169531,2539],{"emptyLinePlaceholder":181},[252,169533,169534,169536,169538,169541,169543,169545,169547,169549,169551,169553,169555],{"class":254,"line":1456},[252,169535,156524],{"class":262},[252,169537,308],{"class":258},[252,169539,169540],{"class":262}," json.dumps(student, ",[252,169542,147217],{"class":5356},[252,169544,308],{"class":258},[252,169546,34127],{"class":311},[252,169548,12575],{"class":262},[252,169550,152092],{"class":5356},[252,169552,308],{"class":258},[252,169554,340],{"class":311},[252,169556,269],{"class":262},[252,169558,169559,169561],{"class":254,"line":1468},[252,169560,30555],{"class":311},[252,169562,164151],{"class":262},[19,169564,169565],{},"写入 JSON 文件：",[244,169567,169569],{"className":30518,"code":169568,"language":30520,"meta":169,"style":169},"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",[22,169570,169571,169577,169581,169589,169617,169645,169649,169653,169683],{"__ignoreMap":169},[252,169572,169573,169575],{"class":254,"line":255},[252,169574,30532],{"class":258},[252,169576,147171],{"class":262},[252,169578,169579],{"class":254,"line":170},[252,169580,2539],{"emptyLinePlaceholder":181},[252,169582,169583,169585,169587],{"class":254,"line":1318},[252,169584,159796],{"class":262},[252,169586,308],{"class":258},[252,169588,55587],{"class":262},[252,169590,169591,169593,169595,169597,169599,169601,169603,169605,169607,169609,169611,169613,169615],{"class":254,"line":1333},[252,169592,148465],{"class":262},[252,169594,62819],{"class":367},[252,169596,51577],{"class":262},[252,169598,149968],{"class":367},[252,169600,12575],{"class":262},[252,169602,69264],{"class":367},[252,169604,51577],{"class":262},[252,169606,913],{"class":311},[252,169608,12575],{"class":262},[252,169610,151552],{"class":367},[252,169612,51577],{"class":262},[252,169614,1252],{"class":311},[252,169616,5069],{"class":262},[252,169618,169619,169621,169623,169625,169627,169629,169631,169633,169635,169637,169639,169641,169643],{"class":254,"line":1339},[252,169620,148465],{"class":262},[252,169622,62819],{"class":367},[252,169624,51577],{"class":262},[252,169626,151016],{"class":367},[252,169628,12575],{"class":262},[252,169630,69264],{"class":367},[252,169632,51577],{"class":262},[252,169634,888],{"class":311},[252,169636,12575],{"class":262},[252,169638,151552],{"class":367},[252,169640,51577],{"class":262},[252,169642,1074],{"class":311},[252,169644,5069],{"class":262},[252,169646,169647],{"class":254,"line":1353},[252,169648,33386],{"class":262},[252,169650,169651],{"class":254,"line":1359},[252,169652,2539],{"emptyLinePlaceholder":181},[252,169654,169655,169657,169659,169661,169663,169665,169667,169669,169671,169673,169675,169677,169679,169681],{"class":254,"line":1450},[252,169656,107969],{"class":258},[252,169658,146871],{"class":311},[252,169660,263],{"class":262},[252,169662,151911],{"class":367},[252,169664,12575],{"class":262},[252,169666,152056],{"class":367},[252,169668,12575],{"class":262},[252,169670,146886],{"class":5356},[252,169672,308],{"class":258},[252,169674,146891],{"class":367},[252,169676,13854],{"class":262},[252,169678,31523],{"class":258},[252,169680,148233],{"class":5356},[252,169682,3878],{"class":262},[252,169684,169685,169688,169690,169692,169694,169696,169698,169700,169702,169704,169706],{"class":254,"line":1456},[252,169686,169687],{"class":262},"    json.dump(students, ",[252,169689,45494],{"class":5356},[252,169691,12575],{"class":262},[252,169693,147217],{"class":5356},[252,169695,308],{"class":258},[252,169697,34127],{"class":311},[252,169699,12575],{"class":262},[252,169701,152092],{"class":5356},[252,169703,308],{"class":258},[252,169705,340],{"class":311},[252,169707,269],{"class":262},[19,169709,169710],{},"读取 JSON 文件：",[244,169712,169714],{"className":30518,"code":169713,"language":30520,"meta":169,"style":169},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[22,169715,169716,169722,169726,169756,169768,169772],{"__ignoreMap":169},[252,169717,169718,169720],{"class":254,"line":255},[252,169719,30532],{"class":258},[252,169721,147171],{"class":262},[252,169723,169724],{"class":254,"line":170},[252,169725,2539],{"emptyLinePlaceholder":181},[252,169727,169728,169730,169732,169734,169736,169738,169740,169742,169744,169746,169748,169750,169752,169754],{"class":254,"line":1318},[252,169729,107969],{"class":258},[252,169731,146871],{"class":311},[252,169733,263],{"class":262},[252,169735,151911],{"class":367},[252,169737,12575],{"class":262},[252,169739,146881],{"class":367},[252,169741,12575],{"class":262},[252,169743,146886],{"class":5356},[252,169745,308],{"class":258},[252,169747,146891],{"class":367},[252,169749,13854],{"class":262},[252,169751,31523],{"class":258},[252,169753,148233],{"class":5356},[252,169755,3878],{"class":262},[252,169757,169758,169760,169762,169764,169766],{"class":254,"line":1333},[252,169759,153117],{"class":262},[252,169761,308],{"class":258},[252,169763,148244],{"class":262},[252,169765,45494],{"class":5356},[252,169767,269],{"class":262},[252,169769,169770],{"class":254,"line":1339},[252,169771,2539],{"emptyLinePlaceholder":181},[252,169773,169774,169776],{"class":254,"line":1353},[252,169775,30555],{"class":311},[252,169777,165075],{"class":262},[14,169779,169781],{"id":169780},"_811-csv文件","8.11 CSV文件",[19,169783,169784],{},"CSV 是逗号分隔值，常用于表格数据。",[19,169786,169787],{},"写入 CSV：",[244,169789,169791],{"className":30518,"code":169790,"language":30520,"meta":169,"style":169},"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",[22,169792,169793,169800,169804,169812,169830,169846,169862,169866,169870,169910,169924],{"__ignoreMap":169},[252,169794,169795,169797],{"class":254,"line":255},[252,169796,30532],{"class":258},[252,169798,169799],{"class":262}," csv\n",[252,169801,169802],{"class":254,"line":170},[252,169803,2539],{"emptyLinePlaceholder":181},[252,169805,169806,169808,169810],{"class":254,"line":1318},[252,169807,159796],{"class":262},[252,169809,308],{"class":258},[252,169811,55587],{"class":262},[252,169813,169814,169817,169819,169821,169823,169825,169828],{"class":254,"line":1333},[252,169815,169816],{"class":262},"    [",[252,169818,73239],{"class":367},[252,169820,12575],{"class":262},[252,169822,73272],{"class":367},[252,169824,12575],{"class":262},[252,169826,169827],{"class":367},"\"成绩\"",[252,169829,87974],{"class":262},[252,169831,169832,169834,169836,169838,169840,169842,169844],{"class":254,"line":1339},[252,169833,169816],{"class":262},[252,169835,149968],{"class":367},[252,169837,12575],{"class":262},[252,169839,913],{"class":311},[252,169841,12575],{"class":262},[252,169843,1252],{"class":311},[252,169845,87974],{"class":262},[252,169847,169848,169850,169852,169854,169856,169858,169860],{"class":254,"line":1353},[252,169849,169816],{"class":262},[252,169851,151016],{"class":367},[252,169853,12575],{"class":262},[252,169855,888],{"class":311},[252,169857,12575],{"class":262},[252,169859,1074],{"class":311},[252,169861,87974],{"class":262},[252,169863,169864],{"class":254,"line":1359},[252,169865,33386],{"class":262},[252,169867,169868],{"class":254,"line":1450},[252,169869,2539],{"emptyLinePlaceholder":181},[252,169871,169872,169874,169876,169878,169881,169883,169885,169887,169889,169891,169893,169895,169898,169900,169902,169904,169906,169908],{"class":254,"line":1456},[252,169873,107969],{"class":258},[252,169875,146871],{"class":311},[252,169877,263],{"class":262},[252,169879,169880],{"class":367},"\"students.csv\"",[252,169882,12575],{"class":262},[252,169884,152056],{"class":367},[252,169886,12575],{"class":262},[252,169888,146886],{"class":5356},[252,169890,308],{"class":258},[252,169892,146891],{"class":367},[252,169894,12575],{"class":262},[252,169896,169897],{"class":5356},"newline",[252,169899,308],{"class":258},[252,169901,7792],{"class":367},[252,169903,13854],{"class":262},[252,169905,31523],{"class":258},[252,169907,148233],{"class":5356},[252,169909,3878],{"class":262},[252,169911,169912,169915,169917,169920,169922],{"class":254,"line":1468},[252,169913,169914],{"class":262},"    writer ",[252,169916,308],{"class":258},[252,169918,169919],{"class":262}," csv.writer(",[252,169921,45494],{"class":5356},[252,169923,269],{"class":262},[252,169925,169926],{"class":254,"line":1751},[252,169927,169928],{"class":262},"    writer.writerows(students)\n",[19,169930,169931],{},"读取 CSV：",[244,169933,169935],{"className":30518,"code":169934,"language":30520,"meta":169,"style":169},"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",[22,169936,169937,169943,169947,169977,169991,170003],{"__ignoreMap":169},[252,169938,169939,169941],{"class":254,"line":255},[252,169940,30532],{"class":258},[252,169942,169799],{"class":262},[252,169944,169945],{"class":254,"line":170},[252,169946,2539],{"emptyLinePlaceholder":181},[252,169948,169949,169951,169953,169955,169957,169959,169961,169963,169965,169967,169969,169971,169973,169975],{"class":254,"line":1318},[252,169950,107969],{"class":258},[252,169952,146871],{"class":311},[252,169954,263],{"class":262},[252,169956,169880],{"class":367},[252,169958,12575],{"class":262},[252,169960,146881],{"class":367},[252,169962,12575],{"class":262},[252,169964,146886],{"class":5356},[252,169966,308],{"class":258},[252,169968,146891],{"class":367},[252,169970,13854],{"class":262},[252,169972,31523],{"class":258},[252,169974,148233],{"class":5356},[252,169976,3878],{"class":262},[252,169978,169979,169982,169984,169987,169989],{"class":254,"line":1333},[252,169980,169981],{"class":262},"    reader ",[252,169983,308],{"class":258},[252,169985,169986],{"class":262}," csv.reader(",[252,169988,45494],{"class":5356},[252,169990,269],{"class":262},[252,169992,169993,169995,169998,170000],{"class":254,"line":1339},[252,169994,3340],{"class":258},[252,169996,169997],{"class":262}," row ",[252,169999,26183],{"class":258},[252,170001,170002],{"class":262}," reader:\n",[252,170004,170005,170007],{"class":254,"line":1353},[252,170006,32591],{"class":311},[252,170008,170009],{"class":262},"(row)\n",[19,170011,170012],{},"使用字典写入：",[244,170014,170016],{"className":30518,"code":170015,"language":30520,"meta":169,"style":169},"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",[22,170017,170018,170024,170028,170036,170064,170092,170096,170100,170138,170159,170180,170185],{"__ignoreMap":169},[252,170019,170020,170022],{"class":254,"line":255},[252,170021,30532],{"class":258},[252,170023,169799],{"class":262},[252,170025,170026],{"class":254,"line":170},[252,170027,2539],{"emptyLinePlaceholder":181},[252,170029,170030,170032,170034],{"class":254,"line":1318},[252,170031,159796],{"class":262},[252,170033,308],{"class":258},[252,170035,55587],{"class":262},[252,170037,170038,170040,170042,170044,170046,170048,170050,170052,170054,170056,170058,170060,170062],{"class":254,"line":1333},[252,170039,148465],{"class":262},[252,170041,62819],{"class":367},[252,170043,51577],{"class":262},[252,170045,149968],{"class":367},[252,170047,12575],{"class":262},[252,170049,69264],{"class":367},[252,170051,51577],{"class":262},[252,170053,913],{"class":311},[252,170055,12575],{"class":262},[252,170057,151552],{"class":367},[252,170059,51577],{"class":262},[252,170061,1252],{"class":311},[252,170063,5069],{"class":262},[252,170065,170066,170068,170070,170072,170074,170076,170078,170080,170082,170084,170086,170088,170090],{"class":254,"line":1339},[252,170067,148465],{"class":262},[252,170069,62819],{"class":367},[252,170071,51577],{"class":262},[252,170073,151016],{"class":367},[252,170075,12575],{"class":262},[252,170077,69264],{"class":367},[252,170079,51577],{"class":262},[252,170081,888],{"class":311},[252,170083,12575],{"class":262},[252,170085,151552],{"class":367},[252,170087,51577],{"class":262},[252,170089,1074],{"class":311},[252,170091,5069],{"class":262},[252,170093,170094],{"class":254,"line":1353},[252,170095,33386],{"class":262},[252,170097,170098],{"class":254,"line":1359},[252,170099,2539],{"emptyLinePlaceholder":181},[252,170101,170102,170104,170106,170108,170110,170112,170114,170116,170118,170120,170122,170124,170126,170128,170130,170132,170134,170136],{"class":254,"line":1450},[252,170103,107969],{"class":258},[252,170105,146871],{"class":311},[252,170107,263],{"class":262},[252,170109,169880],{"class":367},[252,170111,12575],{"class":262},[252,170113,152056],{"class":367},[252,170115,12575],{"class":262},[252,170117,146886],{"class":5356},[252,170119,308],{"class":258},[252,170121,146891],{"class":367},[252,170123,12575],{"class":262},[252,170125,169897],{"class":5356},[252,170127,308],{"class":258},[252,170129,7792],{"class":367},[252,170131,13854],{"class":262},[252,170133,31523],{"class":258},[252,170135,148233],{"class":5356},[252,170137,3878],{"class":262},[252,170139,170140,170143,170145,170147,170149,170151,170153,170155,170157],{"class":254,"line":1456},[252,170141,170142],{"class":262},"    fieldnames ",[252,170144,308],{"class":258},[252,170146,52366],{"class":262},[252,170148,62819],{"class":367},[252,170150,12575],{"class":262},[252,170152,69264],{"class":367},[252,170154,12575],{"class":262},[252,170156,151552],{"class":367},[252,170158,33386],{"class":262},[252,170160,170161,170163,170165,170168,170170,170172,170175,170177],{"class":254,"line":1468},[252,170162,169914],{"class":262},[252,170164,308],{"class":258},[252,170166,170167],{"class":262}," csv.DictWriter(",[252,170169,45494],{"class":5356},[252,170171,12575],{"class":262},[252,170173,170174],{"class":5356},"fieldnames",[252,170176,308],{"class":258},[252,170178,170179],{"class":262},"fieldnames)\n",[252,170181,170182],{"class":254,"line":1751},[252,170183,170184],{"class":262},"    writer.writeheader()\n",[252,170186,170187],{"class":254,"line":1756},[252,170188,169928],{"class":262},[14,170190,170192],{"id":170191},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170194,123428],{},[207,170196,170197,170200,170203],{},[210,170198,170199],{},"读取文本文件。",[210,170201,170202],{},"统计每个单词出现次数。",[210,170204,170205],{},"输出出现次数最多的前 10 个单词。",[19,170207,10175],{},[244,170209,170211],{"className":30518,"code":170210,"language":30520,"meta":169,"style":169},"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",[22,170212,170213,170223,170227,170240,170256,170260,170270,170279,170283,170295,170315,170324,170328,170346,170350,170380,170384,170400],{"__ignoreMap":169},[252,170214,170215,170217,170219,170221],{"class":254,"line":255},[252,170216,30877],{"class":258},[252,170218,108447],{"class":262},[252,170220,30532],{"class":258},[252,170222,108452],{"class":262},[252,170224,170225],{"class":254,"line":170},[252,170226,2539],{"emptyLinePlaceholder":181},[252,170228,170229,170231,170233,170235,170238],{"class":254,"line":1318},[252,170230,168391],{"class":262},[252,170232,308],{"class":258},[252,170234,108681],{"class":262},[252,170236,170237],{"class":367},"\"article.txt\"",[252,170239,269],{"class":262},[252,170241,170242,170244,170246,170248,170250,170252,170254],{"class":254,"line":1333},[252,170243,168574],{"class":262},[252,170245,308],{"class":258},[252,170247,169451],{"class":262},[252,170249,146886],{"class":5356},[252,170251,308],{"class":258},[252,170253,146891],{"class":367},[252,170255,269],{"class":262},[252,170257,170258],{"class":254,"line":1339},[252,170259,2539],{"emptyLinePlaceholder":181},[252,170261,170262,170265,170267],{"class":254,"line":1353},[252,170263,170264],{"class":262},"words ",[252,170266,308],{"class":258},[252,170268,170269],{"class":262}," content.lower().split()\n",[252,170271,170272,170275,170277],{"class":254,"line":1359},[252,170273,170274],{"class":262},"counter ",[252,170276,308],{"class":258},[252,170278,88006],{"class":262},[252,170280,170281],{"class":254,"line":1450},[252,170282,2539],{"emptyLinePlaceholder":181},[252,170284,170285,170287,170290,170292],{"class":254,"line":1456},[252,170286,3164],{"class":258},[252,170288,170289],{"class":262}," word ",[252,170291,26183],{"class":258},[252,170293,170294],{"class":262}," words:\n",[252,170296,170297,170300,170302,170305,170308,170310,170313],{"class":254,"line":1468},[252,170298,170299],{"class":262},"    word ",[252,170301,308],{"class":258},[252,170303,170304],{"class":262}," word.strip(",[252,170306,170307],{"class":367},"\".,!?;:",[252,170309,156575],{"class":311},[252,170311,170312],{"class":367},"'()[]\"",[252,170314,269],{"class":262},[252,170316,170317,170319,170321],{"class":254,"line":1751},[252,170318,3240],{"class":258},[252,170320,39070],{"class":258},[252,170322,170323],{"class":262}," word:\n",[252,170325,170326],{"class":254,"line":1756},[252,170327,148592],{"class":258},[252,170329,170330,170333,170335,170338,170340,170342,170344],{"class":254,"line":1762},[252,170331,170332],{"class":262},"    counter[word] ",[252,170334,308],{"class":258},[252,170336,170337],{"class":262}," counter.get(word, ",[252,170339,454],{"class":311},[252,170341,13854],{"class":262},[252,170343,744],{"class":258},[252,170345,55839],{"class":311},[252,170347,170348],{"class":254,"line":1767},[252,170349,2539],{"emptyLinePlaceholder":181},[252,170351,170352,170355,170357,170359,170362,170364,170366,170368,170370,170372,170374,170376,170378],{"class":254,"line":1781},[252,170353,170354],{"class":262},"items ",[252,170356,308],{"class":258},[252,170358,163684],{"class":311},[252,170360,170361],{"class":262},"(counter.items(), ",[252,170363,154026],{"class":5356},[252,170365,154029],{"class":258},[252,170367,154032],{"class":262},[252,170369,480],{"class":311},[252,170371,112338],{"class":262},[252,170373,163608],{"class":5356},[252,170375,308],{"class":258},[252,170377,31616],{"class":311},[252,170379,269],{"class":262},[252,170381,170382],{"class":254,"line":1786},[252,170383,2539],{"emptyLinePlaceholder":181},[252,170385,170386,170388,170391,170393,170396,170398],{"class":254,"line":1792},[252,170387,3164],{"class":258},[252,170389,170390],{"class":262}," word, count ",[252,170392,26183],{"class":258},[252,170394,170395],{"class":262}," items[:",[252,170397,709],{"class":311},[252,170399,165835],{"class":262},[252,170401,170402,170404],{"class":254,"line":1813},[252,170403,31439],{"class":311},[252,170405,170406],{"class":262},"(word, count)\n",[14,170408,170410],{"id":170409},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[244,170412,170414],{"className":30518,"code":170413,"language":30520,"meta":169,"style":169},"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",[22,170415,170416,170422,170432,170436,170448,170452,170456,170464,170474,170480,170484,170514,170524,170528,170532,170540,170570,170594,170598,170602,170610,170639,170644],{"__ignoreMap":169},[252,170417,170418,170420],{"class":254,"line":255},[252,170419,30532],{"class":258},[252,170421,147171],{"class":262},[252,170423,170424,170426,170428,170430],{"class":254,"line":170},[252,170425,30877],{"class":258},[252,170427,108447],{"class":262},[252,170429,30532],{"class":258},[252,170431,108452],{"class":262},[252,170433,170434],{"class":254,"line":1318},[252,170435,2539],{"emptyLinePlaceholder":181},[252,170437,170438,170440,170442,170444,170446],{"class":254,"line":1333},[252,170439,151904],{"class":311},[252,170441,13704],{"class":258},[252,170443,108681],{"class":262},[252,170445,151911],{"class":367},[252,170447,269],{"class":262},[252,170449,170450],{"class":254,"line":1339},[252,170451,2539],{"emptyLinePlaceholder":181},[252,170453,170454],{"class":254,"line":1353},[252,170455,2539],{"emptyLinePlaceholder":181},[252,170457,170458,170460,170462],{"class":254,"line":1359},[252,170459,32087],{"class":258},[252,170461,151928],{"class":2102},[252,170463,32093],{"class":262},[252,170465,170466,170468,170470,170472],{"class":254,"line":1450},[252,170467,3240],{"class":258},[252,170469,39070],{"class":258},[252,170471,151939],{"class":311},[252,170473,151942],{"class":262},[252,170475,170476,170478],{"class":254,"line":1456},[252,170477,14892],{"class":258},[252,170479,51978],{"class":262},[252,170481,170482],{"class":254,"line":1468},[252,170483,2539],{"emptyLinePlaceholder":181},[252,170485,170486,170488,170490,170492,170494,170496,170498,170500,170502,170504,170506,170508,170510,170512],{"class":254,"line":1751},[252,170487,34318],{"class":258},[252,170489,146871],{"class":311},[252,170491,263],{"class":262},[252,170493,151904],{"class":311},[252,170495,12575],{"class":262},[252,170497,146881],{"class":367},[252,170499,12575],{"class":262},[252,170501,146886],{"class":5356},[252,170503,308],{"class":258},[252,170505,146891],{"class":367},[252,170507,13854],{"class":262},[252,170509,31523],{"class":258},[252,170511,148233],{"class":5356},[252,170513,3878],{"class":262},[252,170515,170516,170518,170520,170522],{"class":254,"line":1756},[252,170517,14892],{"class":258},[252,170519,148244],{"class":262},[252,170521,45494],{"class":5356},[252,170523,269],{"class":262},[252,170525,170526],{"class":254,"line":1762},[252,170527,2539],{"emptyLinePlaceholder":181},[252,170529,170530],{"class":254,"line":1767},[252,170531,2539],{"emptyLinePlaceholder":181},[252,170533,170534,170536,170538],{"class":254,"line":1781},[252,170535,32087],{"class":258},[252,170537,152038],{"class":2102},[252,170539,152041],{"class":262},[252,170541,170542,170544,170546,170548,170550,170552,170554,170556,170558,170560,170562,170564,170566,170568],{"class":254,"line":1786},[252,170543,34318],{"class":258},[252,170545,146871],{"class":311},[252,170547,263],{"class":262},[252,170549,151904],{"class":311},[252,170551,12575],{"class":262},[252,170553,152056],{"class":367},[252,170555,12575],{"class":262},[252,170557,146886],{"class":5356},[252,170559,308],{"class":258},[252,170561,146891],{"class":367},[252,170563,13854],{"class":262},[252,170565,31523],{"class":258},[252,170567,148233],{"class":5356},[252,170569,3878],{"class":262},[252,170571,170572,170574,170576,170578,170580,170582,170584,170586,170588,170590,170592],{"class":254,"line":1792},[252,170573,152077],{"class":262},[252,170575,45494],{"class":5356},[252,170577,12575],{"class":262},[252,170579,147217],{"class":5356},[252,170581,308],{"class":258},[252,170583,34127],{"class":311},[252,170585,12575],{"class":262},[252,170587,152092],{"class":5356},[252,170589,308],{"class":258},[252,170591,340],{"class":311},[252,170593,269],{"class":262},[252,170595,170596],{"class":254,"line":1813},[252,170597,2539],{"emptyLinePlaceholder":181},[252,170599,170600],{"class":254,"line":1818},[252,170601,2539],{"emptyLinePlaceholder":181},[252,170603,170604,170606,170608],{"class":254,"line":1832},[252,170605,159796],{"class":262},[252,170607,308],{"class":258},[252,170609,153122],{"class":262},[252,170611,170612,170615,170617,170619,170621,170623,170625,170627,170629,170631,170633,170635,170637],{"class":254,"line":1837},[252,170613,170614],{"class":262},"students.append({",[252,170616,62819],{"class":367},[252,170618,51577],{"class":262},[252,170620,149968],{"class":367},[252,170622,12575],{"class":262},[252,170624,69264],{"class":367},[252,170626,51577],{"class":262},[252,170628,913],{"class":311},[252,170630,12575],{"class":262},[252,170632,151552],{"class":367},[252,170634,51577],{"class":262},[252,170636,1252],{"class":311},[252,170638,165232],{"class":262},[252,170640,170641],{"class":254,"line":1866},[252,170642,170643],{"class":262},"save_students(students)\n",[252,170645,170646,170648,170650,170653],{"class":254,"line":1871},[252,170647,30555],{"class":311},[252,170649,263],{"class":262},[252,170651,170652],{"class":367},"\"保存成功\"",[252,170654,269],{"class":262},[14,170656,170658],{"id":170657},"_814-易错点","8.14 易错点",[207,170660,170661,170665,170671,170676,170683,170690],{},[210,170662,170663,168924],{},[22,170664,1058],{},[210,170666,170667,170668,28525],{},"读写中文要指定 ",[22,170669,170670],{},"encoding=\"utf-8\"",[210,170672,170673,170674,28525],{},"打开文件后要关闭，推荐使用 ",[22,170675,107969],{},[210,170677,170678,170679,170682],{},"读取大文件不要直接 ",[22,170680,170681],{},"read()"," 全部内容。",[210,170684,170685,170686,170689],{},"Windows 写 CSV 时建议加 ",[22,170687,170688],{},"newline=\"\"","，避免空行。",[210,170691,170692],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170694,170696],{"id":170695},"_815-本章练习","8.15 本章练习",[207,170698,170699,170706,170711,170714,170717],{},[210,170700,170701,170702,170705],{},"写入一个 ",[22,170703,170704],{},"students.txt","，每行保存一个学生姓名。",[210,170707,104491,170708,170710],{},[22,170709,170704],{}," 并输出所有学生。",[210,170712,170713],{},"把学生列表保存为 JSON 文件。",[210,170715,170716],{},"从 JSON 文件读取学生数据，计算平均分。",[210,170718,170719,170720,170723,170724,170727],{},"写一个日志函数 ",[22,170721,170722],{},"write_log(message)","，每次调用向 ",[22,170725,170726],{},"app.log"," 追加一行。",[5266,170729,170730],{},"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":169,"searchDepth":170,"depth":170,"links":170732},[170733,170734,170738,170739,170745,170746,170747,170748,170749,170750,170751,170752,170753,170754,170755],{"id":168244,"depth":170,"text":168245},{"id":168285,"depth":170,"text":168286,"children":170735},[170736,170737],{"id":168289,"depth":1318,"text":168290},{"id":168323,"depth":1318,"text":168324},{"id":168437,"depth":170,"text":168438},{"id":168530,"depth":170,"text":168531,"children":170740},[170741,170742,170743,170744],{"id":168534,"depth":1318,"text":168535},{"id":168621,"depth":1318,"text":168622},{"id":168691,"depth":1318,"text":168692},{"id":168785,"depth":1318,"text":168786},{"id":168855,"depth":170,"text":168856},{"id":168918,"depth":170,"text":168919},{"id":169079,"depth":170,"text":169080},{"id":169142,"depth":170,"text":169143},{"id":169258,"depth":170,"text":169259},{"id":169468,"depth":170,"text":169469},{"id":169780,"depth":170,"text":169781},{"id":170191,"depth":170,"text":170192},{"id":170409,"depth":170,"text":170410},{"id":170657,"depth":170,"text":170658},{"id":170695,"depth":170,"text":170696},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168236,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170762,"title":170763,"body":170764,"description":178,"extension":179,"meta":172950,"navigation":181,"path":172951,"seo":172952,"stem":172953,"__hash__":172954},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170765,"toc":172917},[170766,170769,170773,170776,170779,170871,170873,170892,170897,170901,170904,170907,170936,170943,170946,170950,170953,170982,170984,171036,171042,171095,171099,171197,171200,171267,171271,171328,171330,171336,171340,171345,171351,171442,171447,171451,171454,171532,171535,171573,171577,171695,171698,171702,171705,171750,171753,171757,171762,171768,171818,171821,171852,171856,171860,171890,171894,171929,171933,171968,172008,172012,172028,172031,172035,172039,172118,172122,172163,172167,172222,172226,172260,172264,172294,172303,172310,172316,172373,172376,172384,172387,172391,172398,172401,172407,172410,172427,172432,172436,172442,172455,172458,172495,172498,172509,172512,172526,172529,172543,172547,172554,172587,172590,172592,172598,172601,172605,172607,172613,172618,172791,172795,172858,172862,172886,172890,172914],[10,170767,170763],{"id":170768},"_9-异常模块与包",[14,170770,170772],{"id":170771},"_91-什么是异常","9.1 什么是异常",[19,170774,170775],{},"异常是程序运行过程中出现的错误。",[19,170777,170778],{},"常见异常：",[400,170780,170781,170790],{},[403,170782,170783],{},[406,170784,170785,170788],{},[409,170786,170787],{},"异常",[409,170789,26009],{},[447,170791,170792,170802,170812,170821,170831,170841,170851,170861],{},[406,170793,170794,170799],{},[452,170795,170796],{},[22,170797,170798],{},"NameError",[452,170800,170801],{},"使用了未定义变量",[406,170803,170804,170809],{},[452,170805,170806],{},[22,170807,170808],{},"TypeError",[452,170810,170811],{},"类型不匹配",[406,170813,170814,170818],{},[452,170815,170816],{},[22,170817,154914],{},[452,170819,170820],{},"值不合法",[406,170822,170823,170828],{},[452,170824,170825],{},[22,170826,170827],{},"IndexError",[452,170829,170830],{},"列表索引越界",[406,170832,170833,170838],{},[452,170834,170835],{},[22,170836,170837],{},"KeyError",[452,170839,170840],{},"字典 key 不存在",[406,170842,170843,170848],{},[452,170844,170845],{},[22,170846,170847],{},"FileNotFoundError",[452,170849,170850],{},"文件不存在",[406,170852,170853,170858],{},[452,170854,170855],{},[22,170856,170857],{},"ZeroDivisionError",[452,170859,170860],{},"除数为 0",[406,170862,170863,170868],{},[452,170864,170865],{},[22,170866,170867],{},"ImportError",[452,170869,170870],{},"导入失败",[19,170872,15275],{},[244,170874,170876],{"className":30518,"code":170875,"language":30520,"meta":169,"style":169},"num = int(\"abc\")\n",[22,170877,170878],{"__ignoreMap":169},[252,170879,170880,170882,170884,170886,170888,170890],{"class":254,"line":255},[252,170881,155867],{"class":262},[252,170883,308],{"class":258},[252,170885,2521],{"class":311},[252,170887,263],{"class":262},[252,170889,155960],{"class":367},[252,170891,269],{"class":262},[19,170893,170894,170895,28525],{},"会触发 ",[22,170896,154914],{},[14,170898,170900],{"id":170899},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,170902,170903],{},"如果不处理异常，程序会直接终止。",[19,170905,170906],{},"例如用户输入年龄：",[244,170908,170910],{"className":30518,"code":170909,"language":30520,"meta":169,"style":169},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[22,170911,170912,170930],{"__ignoreMap":169},[252,170913,170914,170916,170918,170920,170922,170924,170926,170928],{"class":254,"line":255},[252,170915,146626],{"class":262},[252,170917,308],{"class":258},[252,170919,2521],{"class":311},[252,170921,263],{"class":262},[252,170923,53961],{"class":311},[252,170925,263],{"class":262},[252,170927,152474],{"class":367},[252,170929,30637],{"class":262},[252,170931,170932,170934],{"class":254,"line":170},[252,170933,30555],{"class":311},[252,170935,155841],{"class":262},[19,170937,170938,170939,170942],{},"用户输入 ",[22,170940,170941],{},"abc","，程序就会报错退出。",[19,170944,170945],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,170947,170949],{"id":170948},"_93-try-except","9.3 try except",[19,170951,170952],{},"基础语法：",[244,170954,170956],{"className":30518,"code":170955,"language":30520,"meta":169,"style":169},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[22,170957,170958,170965,170970,170977],{"__ignoreMap":169},[252,170959,170960,170963],{"class":254,"line":255},[252,170961,170962],{"class":258},"try",[252,170964,3878],{"class":262},[252,170966,170967],{"class":254,"line":170},[252,170968,170969],{"class":262},"    可能出错的代码\n",[252,170971,170972,170975],{"class":254,"line":1318},[252,170973,170974],{"class":258},"except",[252,170976,3878],{"class":262},[252,170978,170979],{"class":254,"line":1333},[252,170980,170981],{"class":262},"    出错后的处理代码\n",[19,170983,15275],{},[244,170985,170987],{"className":30518,"code":170986,"language":30520,"meta":169,"style":169},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[22,170988,170989,170995,171013,171019,171025],{"__ignoreMap":169},[252,170990,170991,170993],{"class":254,"line":255},[252,170992,170962],{"class":258},[252,170994,3878],{"class":262},[252,170996,170997,170999,171001,171003,171005,171007,171009,171011],{"class":254,"line":170},[252,170998,152466],{"class":262},[252,171000,308],{"class":258},[252,171002,2521],{"class":311},[252,171004,263],{"class":262},[252,171006,53961],{"class":311},[252,171008,263],{"class":262},[252,171010,152474],{"class":367},[252,171012,30637],{"class":262},[252,171014,171015,171017],{"class":254,"line":1318},[252,171016,31439],{"class":311},[252,171018,155841],{"class":262},[252,171020,171021,171023],{"class":254,"line":1333},[252,171022,170974],{"class":258},[252,171024,3878],{"class":262},[252,171026,171027,171029,171031,171034],{"class":254,"line":1339},[252,171028,31439],{"class":311},[252,171030,263],{"class":262},[252,171032,171033],{"class":367},"\"年龄必须是数字\"",[252,171035,269],{"class":262},[19,171037,171038,171039,171041],{},"不建议裸写 ",[22,171040,170974],{},"，最好指定异常类型。",[244,171043,171045],{"className":30518,"code":171044,"language":30520,"meta":169,"style":169},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[22,171046,171047,171053,171071,171077,171085],{"__ignoreMap":169},[252,171048,171049,171051],{"class":254,"line":255},[252,171050,170962],{"class":258},[252,171052,3878],{"class":262},[252,171054,171055,171057,171059,171061,171063,171065,171067,171069],{"class":254,"line":170},[252,171056,152466],{"class":262},[252,171058,308],{"class":258},[252,171060,2521],{"class":311},[252,171062,263],{"class":262},[252,171064,53961],{"class":311},[252,171066,263],{"class":262},[252,171068,152474],{"class":367},[252,171070,30637],{"class":262},[252,171072,171073,171075],{"class":254,"line":1318},[252,171074,31439],{"class":311},[252,171076,155841],{"class":262},[252,171078,171079,171081,171083],{"class":254,"line":1333},[252,171080,170974],{"class":258},[252,171082,152306],{"class":311},[252,171084,3878],{"class":262},[252,171086,171087,171089,171091,171093],{"class":254,"line":1339},[252,171088,31439],{"class":311},[252,171090,263],{"class":262},[252,171092,171033],{"class":367},[252,171094,269],{"class":262},[14,171096,171098],{"id":171097},"_94-捕获多个异常","9.4 捕获多个异常",[244,171100,171102],{"className":30518,"code":171101,"language":30520,"meta":169,"style":169},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[22,171103,171104,171110,171131,171151,171158,171166,171177,171186],{"__ignoreMap":169},[252,171105,171106,171108],{"class":254,"line":255},[252,171107,170962],{"class":258},[252,171109,3878],{"class":262},[252,171111,171112,171115,171117,171119,171121,171123,171125,171127,171129],{"class":254,"line":170},[252,171113,171114],{"class":262},"    nums ",[252,171116,308],{"class":258},[252,171118,52366],{"class":262},[252,171120,480],{"class":311},[252,171122,12575],{"class":262},[252,171124,340],{"class":311},[252,171126,12575],{"class":262},[252,171128,334],{"class":311},[252,171130,33386],{"class":262},[252,171132,171133,171136,171138,171140,171142,171144,171146,171149],{"class":254,"line":1318},[252,171134,171135],{"class":262},"    index ",[252,171137,308],{"class":258},[252,171139,2521],{"class":311},[252,171141,263],{"class":262},[252,171143,53961],{"class":311},[252,171145,263],{"class":262},[252,171147,171148],{"class":367},"\"请输入索引:\"",[252,171150,30637],{"class":262},[252,171152,171153,171155],{"class":254,"line":1333},[252,171154,31439],{"class":311},[252,171156,171157],{"class":262},"(nums[index])\n",[252,171159,171160,171162,171164],{"class":254,"line":1339},[252,171161,170974],{"class":258},[252,171163,152306],{"class":311},[252,171165,3878],{"class":262},[252,171167,171168,171170,171172,171175],{"class":254,"line":1353},[252,171169,31439],{"class":311},[252,171171,263],{"class":262},[252,171173,171174],{"class":367},"\"索引必须是整数\"",[252,171176,269],{"class":262},[252,171178,171179,171181,171184],{"class":254,"line":1359},[252,171180,170974],{"class":258},[252,171182,171183],{"class":311}," IndexError",[252,171185,3878],{"class":262},[252,171187,171188,171190,171192,171195],{"class":254,"line":1450},[252,171189,31439],{"class":311},[252,171191,263],{"class":262},[252,171193,171194],{"class":367},"\"索引越界\"",[252,171196,269],{"class":262},[19,171198,171199],{},"多个异常使用相同处理逻辑：",[244,171201,171203],{"className":30518,"code":171202,"language":30520,"meta":169,"style":169},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[22,171204,171205,171211,171229,171242,171256],{"__ignoreMap":169},[252,171206,171207,171209],{"class":254,"line":255},[252,171208,170962],{"class":258},[252,171210,3878],{"class":262},[252,171212,171213,171215,171217,171219,171221,171223,171225,171227],{"class":254,"line":170},[252,171214,45733],{"class":262},[252,171216,308],{"class":258},[252,171218,2521],{"class":311},[252,171220,263],{"class":262},[252,171222,53961],{"class":311},[252,171224,263],{"class":262},[252,171226,155876],{"class":367},[252,171228,30637],{"class":262},[252,171230,171231,171233,171235,171237,171239],{"class":254,"line":1318},[252,171232,31439],{"class":311},[252,171234,263],{"class":262},[252,171236,709],{"class":311},[252,171238,156126],{"class":258},[252,171240,171241],{"class":262}," num)\n",[252,171243,171244,171246,171248,171250,171252,171254],{"class":254,"line":1333},[252,171245,170974],{"class":258},[252,171247,1797],{"class":262},[252,171249,154914],{"class":311},[252,171251,12575],{"class":262},[252,171253,170857],{"class":311},[252,171255,30926],{"class":262},[252,171257,171258,171260,171262,171265],{"class":254,"line":1339},[252,171259,31439],{"class":311},[252,171261,263],{"class":262},[252,171263,171264],{"class":367},"\"输入不合法\"",[252,171266,269],{"class":262},[14,171268,171270],{"id":171269},"_95-获取异常信息","9.5 获取异常信息",[244,171272,171274],{"className":30518,"code":171273,"language":30520,"meta":169,"style":169},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[22,171275,171276,171282,171296,171307],{"__ignoreMap":169},[252,171277,171278,171280],{"class":254,"line":255},[252,171279,170962],{"class":258},[252,171281,3878],{"class":262},[252,171283,171284,171286,171288,171290,171292,171294],{"class":254,"line":170},[252,171285,45733],{"class":262},[252,171287,308],{"class":258},[252,171289,2521],{"class":311},[252,171291,263],{"class":262},[252,171293,155960],{"class":367},[252,171295,269],{"class":262},[252,171297,171298,171300,171302,171304],{"class":254,"line":1318},[252,171299,170974],{"class":258},[252,171301,152306],{"class":311},[252,171303,64744],{"class":258},[252,171305,171306],{"class":262}," e:\n",[252,171308,171309,171311,171313,171315,171318,171320,171322,171324,171326],{"class":254,"line":1333},[252,171310,31439],{"class":311},[252,171312,263],{"class":262},[252,171314,315],{"class":258},[252,171316,171317],{"class":367},"\"出错了:",[252,171319,1159],{"class":311},[252,171321,337],{"class":262},[252,171323,1209],{"class":311},[252,171325,514],{"class":367},[252,171327,269],{"class":262},[19,171329,146537],{},[244,171331,171334],{"className":171332,"code":171333,"language":5327,"meta":169},[5325],"出错了:invalid literal for int() with base 10: 'abc'\n",[22,171335,171333],{"__ignoreMap":169},[14,171337,171339],{"id":171338},"_96-else和finally","9.6 else和finally",[19,171341,171342,171344],{},[22,171343,1840],{},"：没有异常时执行。",[19,171346,171347,171350],{},[22,171348,171349],{},"finally","：无论是否异常都会执行。",[244,171352,171354],{"className":30518,"code":171353,"language":30520,"meta":169,"style":169},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[22,171355,171356,171362,171380,171388,171398,171404,171425,171431],{"__ignoreMap":169},[252,171357,171358,171360],{"class":254,"line":255},[252,171359,170962],{"class":258},[252,171361,3878],{"class":262},[252,171363,171364,171366,171368,171370,171372,171374,171376,171378],{"class":254,"line":170},[252,171365,45733],{"class":262},[252,171367,308],{"class":258},[252,171369,2521],{"class":311},[252,171371,263],{"class":262},[252,171373,53961],{"class":311},[252,171375,263],{"class":262},[252,171377,155876],{"class":367},[252,171379,30637],{"class":262},[252,171381,171382,171384,171386],{"class":254,"line":1318},[252,171383,170974],{"class":258},[252,171385,152306],{"class":311},[252,171387,3878],{"class":262},[252,171389,171390,171392,171394,171396],{"class":254,"line":1333},[252,171391,31439],{"class":311},[252,171393,263],{"class":262},[252,171395,153294],{"class":367},[252,171397,269],{"class":262},[252,171399,171400,171402],{"class":254,"line":1339},[252,171401,1840],{"class":258},[252,171403,3878],{"class":262},[252,171405,171406,171408,171410,171412,171415,171417,171419,171421,171423],{"class":254,"line":1353},[252,171407,31439],{"class":311},[252,171409,263],{"class":262},[252,171411,315],{"class":258},[252,171413,171414],{"class":367},"\"输入正确:",[252,171416,1159],{"class":311},[252,171418,1804],{"class":262},[252,171420,1209],{"class":311},[252,171422,514],{"class":367},[252,171424,269],{"class":262},[252,171426,171427,171429],{"class":254,"line":1359},[252,171428,171349],{"class":258},[252,171430,3878],{"class":262},[252,171432,171433,171435,171437,171440],{"class":254,"line":1450},[252,171434,31439],{"class":311},[252,171436,263],{"class":262},[252,171438,171439],{"class":367},"\"程序结束\"",[252,171441,269],{"class":262},[19,171443,171444,171446],{},[22,171445,171349],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171448,171450],{"id":171449},"_97-抛出异常","9.7 抛出异常",[19,171452,171453],{},"程序可以主动抛出异常。",[244,171455,171457],{"className":30518,"code":171456,"language":30520,"meta":169,"style":169},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[22,171458,171459,171468,171480,171493,171513,171517,171521],{"__ignoreMap":169},[252,171460,171461,171463,171466],{"class":254,"line":255},[252,171462,32087],{"class":258},[252,171464,171465],{"class":2102}," set_age",[252,171467,161495],{"class":262},[252,171469,171470,171472,171474,171476,171478],{"class":254,"line":170},[252,171471,3240],{"class":258},[252,171473,15847],{"class":262},[252,171475,1173],{"class":258},[252,171477,4232],{"class":311},[252,171479,3878],{"class":262},[252,171481,171482,171484,171486,171488,171491],{"class":254,"line":1318},[252,171483,103568],{"class":258},[252,171485,152306],{"class":311},[252,171487,263],{"class":262},[252,171489,171490],{"class":367},"\"年龄不能为负数\"",[252,171492,269],{"class":262},[252,171494,171495,171497,171499,171501,171503,171505,171507,171509,171511],{"class":254,"line":1333},[252,171496,31439],{"class":311},[252,171498,263],{"class":262},[252,171500,315],{"class":258},[252,171502,162063],{"class":367},[252,171504,1159],{"class":311},[252,171506,70361],{"class":262},[252,171508,1209],{"class":311},[252,171510,514],{"class":367},[252,171512,269],{"class":262},[252,171514,171515],{"class":254,"line":1339},[252,171516,2539],{"emptyLinePlaceholder":181},[252,171518,171519],{"class":254,"line":1353},[252,171520,2539],{"emptyLinePlaceholder":181},[252,171522,171523,171526,171528,171530],{"class":254,"line":1359},[252,171524,171525],{"class":262},"set_age(",[252,171527,795],{"class":258},[252,171529,480],{"class":311},[252,171531,269],{"class":262},[19,171533,171534],{},"调用者可以捕获：",[244,171536,171538],{"className":30518,"code":171537,"language":30520,"meta":169,"style":169},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[22,171539,171540,171546,171557,171567],{"__ignoreMap":169},[252,171541,171542,171544],{"class":254,"line":255},[252,171543,170962],{"class":258},[252,171545,3878],{"class":262},[252,171547,171548,171551,171553,171555],{"class":254,"line":170},[252,171549,171550],{"class":262},"    set_age(",[252,171552,795],{"class":258},[252,171554,480],{"class":311},[252,171556,269],{"class":262},[252,171558,171559,171561,171563,171565],{"class":254,"line":1318},[252,171560,170974],{"class":258},[252,171562,152306],{"class":311},[252,171564,64744],{"class":258},[252,171566,171306],{"class":262},[252,171568,171569,171571],{"class":254,"line":1333},[252,171570,31439],{"class":311},[252,171572,67139],{"class":262},[14,171574,171576],{"id":171575},"_98-自定义异常","9.8 自定义异常",[244,171578,171580],{"className":30518,"code":171579,"language":30520,"meta":169,"style":169},"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",[22,171581,171582,171596,171600,171604,171608,171616,171626,171637,171647,171651,171655,171661,171678,171689],{"__ignoreMap":169},[252,171583,171584,171586,171589,171591,171594],{"class":254,"line":255},[252,171585,14834],{"class":258},[252,171587,171588],{"class":2102}," BalanceNotEnoughError",[252,171590,263],{"class":262},[252,171592,171593],{"class":311},"Exception",[252,171595,30926],{"class":262},[252,171597,171598],{"class":254,"line":170},[252,171599,149617],{"class":258},[252,171601,171602],{"class":254,"line":1318},[252,171603,2539],{"emptyLinePlaceholder":181},[252,171605,171606],{"class":254,"line":1333},[252,171607,2539],{"emptyLinePlaceholder":181},[252,171609,171610,171612,171614],{"class":254,"line":1339},[252,171611,32087],{"class":258},[252,171613,150266],{"class":2102},[252,171615,162892],{"class":262},[252,171617,171618,171620,171622,171624],{"class":254,"line":1353},[252,171619,3240],{"class":258},[252,171621,150222],{"class":262},[252,171623,1223],{"class":258},[252,171625,162669],{"class":262},[252,171627,171628,171630,171633,171635],{"class":254,"line":1359},[252,171629,103568],{"class":258},[252,171631,171632],{"class":262}," BalanceNotEnoughError(",[252,171634,150317],{"class":367},[252,171636,269],{"class":262},[252,171638,171639,171641,171643,171645],{"class":254,"line":1450},[252,171640,4229],{"class":258},[252,171642,162899],{"class":262},[252,171644,795],{"class":258},[252,171646,150255],{"class":262},[252,171648,171649],{"class":254,"line":1456},[252,171650,2539],{"emptyLinePlaceholder":181},[252,171652,171653],{"class":254,"line":1468},[252,171654,2539],{"emptyLinePlaceholder":181},[252,171656,171657,171659],{"class":254,"line":1751},[252,171658,170962],{"class":258},[252,171660,3878],{"class":262},[252,171662,171663,171665,171667,171670,171672,171674,171676],{"class":254,"line":1756},[252,171664,162570],{"class":262},[252,171666,308],{"class":258},[252,171668,171669],{"class":262}," withdraw(",[252,171671,574],{"class":311},[252,171673,12575],{"class":262},[252,171675,1861],{"class":311},[252,171677,269],{"class":262},[252,171679,171680,171682,171685,171687],{"class":254,"line":1762},[252,171681,170974],{"class":258},[252,171683,171684],{"class":262}," BalanceNotEnoughError ",[252,171686,31523],{"class":258},[252,171688,171306],{"class":262},[252,171690,171691,171693],{"class":254,"line":1767},[252,171692,31439],{"class":311},[252,171694,67139],{"class":262},[19,171696,171697],{},"入门阶段大多数情况使用内置异常即可。",[14,171699,171701],{"id":171700},"_99-traceback","9.9 traceback",[19,171703,171704],{},"调试时可以输出完整异常堆栈。",[244,171706,171708],{"className":30518,"code":171707,"language":30520,"meta":169,"style":169},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[22,171709,171710,171717,171721,171727,171737,171745],{"__ignoreMap":169},[252,171711,171712,171714],{"class":254,"line":255},[252,171713,30532],{"class":258},[252,171715,171716],{"class":262}," traceback\n",[252,171718,171719],{"class":254,"line":170},[252,171720,2539],{"emptyLinePlaceholder":181},[252,171722,171723,171725],{"class":254,"line":1318},[252,171724,170962],{"class":258},[252,171726,3878],{"class":262},[252,171728,171729,171731,171733,171735],{"class":254,"line":1333},[252,171730,2124],{"class":311},[252,171732,263],{"class":262},[252,171734,155960],{"class":367},[252,171736,269],{"class":262},[252,171738,171739,171741,171743],{"class":254,"line":1339},[252,171740,170974],{"class":258},[252,171742,152306],{"class":311},[252,171744,3878],{"class":262},[252,171746,171747],{"class":254,"line":1353},[252,171748,171749],{"class":262},"    traceback.print_exc()\n",[19,171751,171752],{},"日志系统中常把异常堆栈记录到文件。",[14,171754,171756],{"id":171755},"_910-什么是模块","9.10 什么是模块",[19,171758,171759,171760,126118],{},"模块就是一个 ",[22,171761,146432],{},[19,171763,171764,171765,24758],{},"例如创建 ",[22,171766,171767],{},"my_math.py",[244,171769,171771],{"className":30518,"code":171770,"language":30520,"meta":169,"style":169},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[22,171772,171773,171781,171791,171795,171799,171808],{"__ignoreMap":169},[252,171774,171775,171777,171779],{"class":254,"line":255},[252,171776,32087],{"class":258},[252,171778,5349],{"class":2102},[252,171780,151173],{"class":262},[252,171782,171783,171785,171787,171789],{"class":254,"line":170},[252,171784,4229],{"class":258},[252,171786,11009],{"class":262},[252,171788,744],{"class":258},[252,171790,151184],{"class":262},[252,171792,171793],{"class":254,"line":1318},[252,171794,2539],{"emptyLinePlaceholder":181},[252,171796,171797],{"class":254,"line":1333},[252,171798,2539],{"emptyLinePlaceholder":181},[252,171800,171801,171803,171806],{"class":254,"line":1339},[252,171802,32087],{"class":258},[252,171804,171805],{"class":2102}," sub",[252,171807,151173],{"class":262},[252,171809,171810,171812,171814,171816],{"class":254,"line":1353},[252,171811,4229],{"class":258},[252,171813,11009],{"class":262},[252,171815,795],{"class":258},[252,171817,151184],{"class":262},[19,171819,171820],{},"在另一个文件中导入：",[244,171822,171824],{"className":30518,"code":171823,"language":30520,"meta":169,"style":169},"import my_math\n\nprint(my_math.add(1, 2))\n",[22,171825,171826,171833,171837],{"__ignoreMap":169},[252,171827,171828,171830],{"class":254,"line":255},[252,171829,30532],{"class":258},[252,171831,171832],{"class":262}," my_math\n",[252,171834,171835],{"class":254,"line":170},[252,171836,2539],{"emptyLinePlaceholder":181},[252,171838,171839,171841,171844,171846,171848,171850],{"class":254,"line":1318},[252,171840,30555],{"class":311},[252,171842,171843],{"class":262},"(my_math.add(",[252,171845,480],{"class":311},[252,171847,12575],{"class":262},[252,171849,340],{"class":311},[252,171851,30637],{"class":262},[14,171853,171855],{"id":171854},"_911-import导入","9.11 import导入",[224,171857,171859],{"id":171858},"_9111-导入模块","9.11.1 导入模块",[244,171861,171863],{"className":30518,"code":171862,"language":30520,"meta":169,"style":169},"import random\n\nprint(random.randint(1, 10))\n",[22,171864,171865,171871,171875],{"__ignoreMap":169},[252,171866,171867,171869],{"class":254,"line":255},[252,171868,30532],{"class":258},[252,171870,45468],{"class":262},[252,171872,171873],{"class":254,"line":170},[252,171874,2539],{"emptyLinePlaceholder":181},[252,171876,171877,171879,171882,171884,171886,171888],{"class":254,"line":1318},[252,171878,30555],{"class":311},[252,171880,171881],{"class":262},"(random.randint(",[252,171883,480],{"class":311},[252,171885,12575],{"class":262},[252,171887,709],{"class":311},[252,171889,30637],{"class":262},[224,171891,171893],{"id":171892},"_9112-导入指定内容","9.11.2 导入指定内容",[244,171895,171897],{"className":30518,"code":171896,"language":30520,"meta":169,"style":169},"from random import randint\n\nprint(randint(1, 10))\n",[22,171898,171899,171910,171914],{"__ignoreMap":169},[252,171900,171901,171903,171905,171907],{"class":254,"line":255},[252,171902,30877],{"class":258},[252,171904,57936],{"class":262},[252,171906,30532],{"class":258},[252,171908,171909],{"class":262}," randint\n",[252,171911,171912],{"class":254,"line":170},[252,171913,2539],{"emptyLinePlaceholder":181},[252,171915,171916,171918,171921,171923,171925,171927],{"class":254,"line":1318},[252,171917,30555],{"class":311},[252,171919,171920],{"class":262},"(randint(",[252,171922,480],{"class":311},[252,171924,12575],{"class":262},[252,171926,709],{"class":311},[252,171928,30637],{"class":262},[224,171930,171932],{"id":171931},"_9113-起别名","9.11.3 起别名",[244,171934,171936],{"className":30518,"code":171935,"language":30520,"meta":169,"style":169},"import random as rd\n\nprint(rd.randint(1, 10))\n",[22,171937,171938,171949,171953],{"__ignoreMap":169},[252,171939,171940,171942,171944,171946],{"class":254,"line":255},[252,171941,30532],{"class":258},[252,171943,57936],{"class":262},[252,171945,31523],{"class":258},[252,171947,171948],{"class":262}," rd\n",[252,171950,171951],{"class":254,"line":170},[252,171952,2539],{"emptyLinePlaceholder":181},[252,171954,171955,171957,171960,171962,171964,171966],{"class":254,"line":1318},[252,171956,30555],{"class":311},[252,171958,171959],{"class":262},"(rd.randint(",[252,171961,480],{"class":311},[252,171963,12575],{"class":262},[252,171965,709],{"class":311},[252,171967,30637],{"class":262},[244,171969,171971],{"className":30518,"code":171970,"language":30520,"meta":169,"style":169},"from random import randint as rint\n\nprint(rint(1, 10))\n",[22,171972,171973,171989,171993],{"__ignoreMap":169},[252,171974,171975,171977,171979,171981,171984,171986],{"class":254,"line":255},[252,171976,30877],{"class":258},[252,171978,57936],{"class":262},[252,171980,30532],{"class":258},[252,171982,171983],{"class":262}," randint ",[252,171985,31523],{"class":258},[252,171987,171988],{"class":262}," rint\n",[252,171990,171991],{"class":254,"line":170},[252,171992,2539],{"emptyLinePlaceholder":181},[252,171994,171995,171997,172000,172002,172004,172006],{"class":254,"line":1318},[252,171996,30555],{"class":311},[252,171998,171999],{"class":262},"(rint(",[252,172001,480],{"class":311},[252,172003,12575],{"class":262},[252,172005,709],{"class":311},[252,172007,30637],{"class":262},[224,172009,172011],{"id":172010},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[244,172013,172015],{"className":30518,"code":172014,"language":30520,"meta":169,"style":169},"from random import *\n",[22,172016,172017],{"__ignoreMap":169},[252,172018,172019,172021,172023,172025],{"class":254,"line":255},[252,172020,30877],{"class":258},[252,172022,57936],{"class":262},[252,172024,30532],{"class":258},[252,172026,172027],{"class":258}," *\n",[19,172029,172030],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172032,172034],{"id":172033},"_912-常用内置模块","9.12 常用内置模块",[224,172036,172038],{"id":172037},"_9121-random","9.12.1 random",[244,172040,172042],{"className":30518,"code":172041,"language":30520,"meta":169,"style":169},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[22,172043,172044,172050,172054,172068,172087],{"__ignoreMap":169},[252,172045,172046,172048],{"class":254,"line":255},[252,172047,30532],{"class":258},[252,172049,45468],{"class":262},[252,172051,172052],{"class":254,"line":170},[252,172053,2539],{"emptyLinePlaceholder":181},[252,172055,172056,172058,172060,172062,172064,172066],{"class":254,"line":1318},[252,172057,30555],{"class":311},[252,172059,171881],{"class":262},[252,172061,480],{"class":311},[252,172063,12575],{"class":262},[252,172065,709],{"class":311},[252,172067,30637],{"class":262},[252,172069,172070,172072,172075,172077,172079,172081,172083,172085],{"class":254,"line":1333},[252,172071,30555],{"class":311},[252,172073,172074],{"class":262},"(random.choice([",[252,172076,149968],{"class":367},[252,172078,12575],{"class":262},[252,172080,151016],{"class":367},[252,172082,12575],{"class":262},[252,172084,159811],{"class":367},[252,172086,33283],{"class":262},[252,172088,172089,172091,172094,172096,172098,172100,172102,172104,172106,172108,172110,172112,172114,172116],{"class":254,"line":1339},[252,172090,30555],{"class":311},[252,172092,172093],{"class":262},"(random.sample([",[252,172095,480],{"class":311},[252,172097,12575],{"class":262},[252,172099,340],{"class":311},[252,172101,12575],{"class":262},[252,172103,334],{"class":311},[252,172105,12575],{"class":262},[252,172107,556],{"class":311},[252,172109,12575],{"class":262},[252,172111,582],{"class":311},[252,172113,112338],{"class":262},[252,172115,340],{"class":311},[252,172117,30637],{"class":262},[224,172119,172121],{"id":172120},"_9122-time","9.12.2 time",[244,172123,172125],{"className":30518,"code":172124,"language":30520,"meta":169,"style":169},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[22,172126,172127,172133,172137,172144,172152],{"__ignoreMap":169},[252,172128,172129,172131],{"class":254,"line":255},[252,172130,30532],{"class":258},[252,172132,31969],{"class":262},[252,172134,172135],{"class":254,"line":170},[252,172136,2539],{"emptyLinePlaceholder":181},[252,172138,172139,172141],{"class":254,"line":1318},[252,172140,30555],{"class":311},[252,172142,172143],{"class":262},"(time.time())\n",[252,172145,172146,172148,172150],{"class":254,"line":1333},[252,172147,95209],{"class":262},[252,172149,480],{"class":311},[252,172151,269],{"class":262},[252,172153,172154,172156,172158,172161],{"class":254,"line":1339},[252,172155,30555],{"class":311},[252,172157,263],{"class":262},[252,172159,172160],{"class":367},"\"1秒后执行\"",[252,172162,269],{"class":262},[224,172164,172166],{"id":172165},"_9123-datetime","9.12.3 datetime",[244,172168,172170],{"className":30518,"code":172169,"language":30520,"meta":169,"style":169},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[22,172171,172172,172184,172188,172198,172205],{"__ignoreMap":169},[252,172173,172174,172176,172179,172181],{"class":254,"line":255},[252,172175,30877],{"class":258},[252,172177,172178],{"class":262}," datetime ",[252,172180,30532],{"class":258},[252,172182,172183],{"class":262}," datetime\n",[252,172185,172186],{"class":254,"line":170},[252,172187,2539],{"emptyLinePlaceholder":181},[252,172189,172190,172193,172195],{"class":254,"line":1318},[252,172191,172192],{"class":262},"now ",[252,172194,308],{"class":258},[252,172196,172197],{"class":262}," datetime.now()\n",[252,172199,172200,172202],{"class":254,"line":1333},[252,172201,30555],{"class":311},[252,172203,172204],{"class":262},"(now)\n",[252,172206,172207,172209,172212,172215,172217,172220],{"class":254,"line":1339},[252,172208,30555],{"class":311},[252,172210,172211],{"class":262},"(now.strftime(",[252,172213,172214],{"class":367},"\"%Y-%m-",[252,172216,156771],{"class":311},[252,172218,172219],{"class":367}," %H:%M:%S\"",[252,172221,30637],{"class":262},[224,172223,172225],{"id":172224},"_9124-os","9.12.4 os",[244,172227,172229],{"className":30518,"code":172228,"language":30520,"meta":169,"style":169},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[22,172230,172231,172237,172241,172248],{"__ignoreMap":169},[252,172232,172233,172235],{"class":254,"line":255},[252,172234,30532],{"class":258},[252,172236,45445],{"class":262},[252,172238,172239],{"class":254,"line":170},[252,172240,2539],{"emptyLinePlaceholder":181},[252,172242,172243,172245],{"class":254,"line":1318},[252,172244,30555],{"class":311},[252,172246,172247],{"class":262},"(os.getcwd())\n",[252,172249,172250,172252,172255,172258],{"class":254,"line":1333},[252,172251,30555],{"class":311},[252,172253,172254],{"class":262},"(os.listdir(",[252,172256,172257],{"class":367},"\".\"",[252,172259,30637],{"class":262},[224,172261,172263],{"id":172262},"_9125-sys","9.12.5 sys",[244,172265,172267],{"className":30518,"code":172266,"language":30520,"meta":169,"style":169},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[22,172268,172269,172276,172280,172287],{"__ignoreMap":169},[252,172270,172271,172273],{"class":254,"line":255},[252,172272,30532],{"class":258},[252,172274,172275],{"class":262}," sys\n",[252,172277,172278],{"class":254,"line":170},[252,172279,2539],{"emptyLinePlaceholder":181},[252,172281,172282,172284],{"class":254,"line":1318},[252,172283,30555],{"class":311},[252,172285,172286],{"class":262},"(sys.version)\n",[252,172288,172289,172291],{"class":254,"line":1333},[252,172290,30555],{"class":311},[252,172292,172293],{"class":262},"(sys.path)\n",[14,172295,172297,172298,172300,172301,514],{"id":172296},"_913-if-name-main","9.13 if ",[412,172299,79949],{}," == \"",[412,172302,102195],{},[19,172304,172305,172306,172309],{},"模块被直接运行和被导入时，",[22,172307,172308],{},"__name__"," 的值不同。",[19,172311,172312,172313,24758],{},"创建 ",[22,172314,172315],{},"my_module.py",[244,172317,172319],{"className":30518,"code":172318,"language":30520,"meta":169,"style":169},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[22,172320,172321,172329,172339,172343,172347,172359],{"__ignoreMap":169},[252,172322,172323,172325,172327],{"class":254,"line":255},[252,172324,32087],{"class":258},[252,172326,5349],{"class":2102},[252,172328,151173],{"class":262},[252,172330,172331,172333,172335,172337],{"class":254,"line":170},[252,172332,4229],{"class":258},[252,172334,11009],{"class":262},[252,172336,744],{"class":258},[252,172338,151184],{"class":262},[252,172340,172341],{"class":254,"line":1318},[252,172342,2539],{"emptyLinePlaceholder":181},[252,172344,172345],{"class":254,"line":1333},[252,172346,2539],{"emptyLinePlaceholder":181},[252,172348,172349,172351,172353,172355,172357],{"class":254,"line":1339},[252,172350,1670],{"class":258},[252,172352,31360],{"class":311},[252,172354,101696],{"class":258},[252,172356,101699],{"class":367},[252,172358,3878],{"class":262},[252,172360,172361,172363,172365,172367,172369,172371],{"class":254,"line":1353},[252,172362,31439],{"class":311},[252,172364,166680],{"class":262},[252,172366,480],{"class":311},[252,172368,12575],{"class":262},[252,172370,340],{"class":311},[252,172372,30637],{"class":262},[19,172374,172375],{},"作用：",[207,172377,172378,172381],{},[210,172379,172380],{},"直接运行该文件时，执行测试代码。",[210,172382,172383],{},"被其他文件导入时，不执行测试代码。",[19,172385,172386],{},"这是写模块时很常用的习惯。",[14,172388,172390],{"id":172389},"_914-包","9.14 包",[19,172392,172393,172394,172397],{},"包是包含 ",[22,172395,172396],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172399,172400],{},"目录结构：",[244,172402,172405],{"className":172403,"code":172404,"language":5327,"meta":169},[5325],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[22,172406,172404],{"__ignoreMap":169},[19,172408,172409],{},"导入：",[244,172411,172413],{"className":30518,"code":172412,"language":30520,"meta":169,"style":169},"from utils.file_utils import read_file\n",[22,172414,172415],{"__ignoreMap":169},[252,172416,172417,172419,172422,172424],{"class":254,"line":255},[252,172418,30877],{"class":258},[252,172420,172421],{"class":262}," utils.file_utils ",[252,172423,30532],{"class":258},[252,172425,172426],{"class":262}," read_file\n",[19,172428,172429,172431],{},[22,172430,172396],{}," 可以为空，也可以写包初始化逻辑。",[14,172433,172435],{"id":172434},"_915-第三方包","9.15 第三方包",[19,172437,172438,172439,172441],{},"第三方包通过 ",[22,172440,23970],{}," 安装。",[244,172443,172445],{"className":23961,"code":172444,"language":23963,"meta":169,"style":169},"pip install requests\n",[22,172446,172447],{"__ignoreMap":169},[252,172448,172449,172451,172453],{"class":254,"line":255},[252,172450,23970],{"class":2102},[252,172452,23973],{"class":367},[252,172454,146178],{"class":367},[19,172456,172457],{},"使用：",[244,172459,172461],{"className":30518,"code":172460,"language":30520,"meta":169,"style":169},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[22,172462,172463,172469,172473,172488],{"__ignoreMap":169},[252,172464,172465,172467],{"class":254,"line":255},[252,172466,30532],{"class":258},[252,172468,146178],{"class":262},[252,172470,172471],{"class":254,"line":170},[252,172472,2539],{"emptyLinePlaceholder":181},[252,172474,172475,172478,172480,172483,172486],{"class":254,"line":1318},[252,172476,172477],{"class":262},"response ",[252,172479,308],{"class":258},[252,172481,172482],{"class":262}," requests.get(",[252,172484,172485],{"class":367},"\"https:\u002F\u002Fwww.example.com\"",[252,172487,269],{"class":262},[252,172489,172490,172492],{"class":254,"line":1333},[252,172491,30555],{"class":311},[252,172493,172494],{"class":262},"(response.status_code)\n",[19,172496,172497],{},"查看已安装包：",[244,172499,172501],{"className":23961,"code":172500,"language":23963,"meta":169,"style":169},"pip list\n",[22,172502,172503],{"__ignoreMap":169},[252,172504,172505,172507],{"class":254,"line":255},[252,172506,23970],{"class":2102},[252,172508,119091],{"class":367},[19,172510,172511],{},"导出项目依赖：",[244,172513,172514],{"className":23961,"code":146373,"language":23963,"meta":169,"style":169},[22,172515,172516],{"__ignoreMap":169},[252,172517,172518,172520,172522,172524],{"class":254,"line":255},[252,172519,23970],{"class":2102},[252,172521,146382],{"class":367},[252,172523,26362],{"class":258},[252,172525,146387],{"class":367},[19,172527,172528],{},"安装项目依赖：",[244,172530,172531],{"className":23961,"code":146393,"language":23963,"meta":169,"style":169},[22,172532,172533],{"__ignoreMap":169},[252,172534,172535,172537,172539,172541],{"class":254,"line":255},[252,172536,23970],{"class":2102},[252,172538,23973],{"class":367},[252,172540,119775],{"class":311},[252,172542,146387],{"class":367},[14,172544,172546],{"id":172545},"_916-模块搜索路径","9.16 模块搜索路径",[19,172548,172549,172550,172553],{},"Python 导入模块时会在 ",[22,172551,172552],{},"sys.path"," 中查找。",[244,172555,172557],{"className":30518,"code":172556,"language":30520,"meta":169,"style":169},"import sys\n\nfor path in sys.path:\n    print(path)\n",[22,172558,172559,172565,172569,172581],{"__ignoreMap":169},[252,172560,172561,172563],{"class":254,"line":255},[252,172562,30532],{"class":258},[252,172564,172275],{"class":262},[252,172566,172567],{"class":254,"line":170},[252,172568,2539],{"emptyLinePlaceholder":181},[252,172570,172571,172573,172576,172578],{"class":254,"line":1318},[252,172572,3164],{"class":258},[252,172574,172575],{"class":262}," path ",[252,172577,26183],{"class":258},[252,172579,172580],{"class":262}," sys.path:\n",[252,172582,172583,172585],{"class":254,"line":1333},[252,172584,31439],{"class":311},[252,172586,169309],{"class":262},[19,172588,172589],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172591,157703],{},[244,172593,172596],{"className":172594,"code":172595,"language":5327,"meta":169},[5325],"random.py\njson.py\ntime.py\n",[22,172597,172595],{"__ignoreMap":169},[19,172599,172600],{},"这些文件名可能导致导入异常。",[14,172602,172604],{"id":172603},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172606,172400],{},[244,172608,172611],{"className":172609,"code":172610,"language":5327,"meta":169},[5325],"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",[22,172612,172610],{"__ignoreMap":169},[19,172614,172615,24758],{},[22,172616,172617],{},"utils\u002Ffile_utils.py",[244,172619,172621],{"className":30518,"code":172620,"language":30520,"meta":169,"style":169},"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",[22,172622,172623,172629,172639,172643,172647,172657,172667,172675,172681,172685,172712,172722,172726,172730,172740,172766],{"__ignoreMap":169},[252,172624,172625,172627],{"class":254,"line":255},[252,172626,30532],{"class":258},[252,172628,147171],{"class":262},[252,172630,172631,172633,172635,172637],{"class":254,"line":170},[252,172632,30877],{"class":258},[252,172634,108447],{"class":262},[252,172636,30532],{"class":258},[252,172638,108452],{"class":262},[252,172640,172641],{"class":254,"line":1318},[252,172642,2539],{"emptyLinePlaceholder":181},[252,172644,172645],{"class":254,"line":1333},[252,172646,2539],{"emptyLinePlaceholder":181},[252,172648,172649,172651,172654],{"class":254,"line":1339},[252,172650,32087],{"class":258},[252,172652,172653],{"class":2102}," read_json",[252,172655,172656],{"class":262},"(path):\n",[252,172658,172659,172662,172664],{"class":254,"line":1353},[252,172660,172661],{"class":262},"    path ",[252,172663,308],{"class":258},[252,172665,172666],{"class":262}," Path(path)\n",[252,172668,172669,172671,172673],{"class":254,"line":1359},[252,172670,3240],{"class":258},[252,172672,39070],{"class":258},[252,172674,169390],{"class":262},[252,172676,172677,172679],{"class":254,"line":1450},[252,172678,14892],{"class":258},[252,172680,51978],{"class":262},[252,172682,172683],{"class":254,"line":1456},[252,172684,2539],{"emptyLinePlaceholder":181},[252,172686,172687,172689,172691,172694,172696,172698,172700,172702,172704,172706,172708,172710],{"class":254,"line":1468},[252,172688,34318],{"class":258},[252,172690,146871],{"class":311},[252,172692,172693],{"class":262},"(path, ",[252,172695,146881],{"class":367},[252,172697,12575],{"class":262},[252,172699,146886],{"class":5356},[252,172701,308],{"class":258},[252,172703,146891],{"class":367},[252,172705,13854],{"class":262},[252,172707,31523],{"class":258},[252,172709,148233],{"class":5356},[252,172711,3878],{"class":262},[252,172713,172714,172716,172718,172720],{"class":254,"line":1751},[252,172715,14892],{"class":258},[252,172717,148244],{"class":262},[252,172719,45494],{"class":5356},[252,172721,269],{"class":262},[252,172723,172724],{"class":254,"line":1756},[252,172725,2539],{"emptyLinePlaceholder":181},[252,172727,172728],{"class":254,"line":1762},[252,172729,2539],{"emptyLinePlaceholder":181},[252,172731,172732,172734,172737],{"class":254,"line":1767},[252,172733,32087],{"class":258},[252,172735,172736],{"class":2102}," write_json",[252,172738,172739],{"class":262},"(path, data):\n",[252,172741,172742,172744,172746,172748,172750,172752,172754,172756,172758,172760,172762,172764],{"class":254,"line":1781},[252,172743,34318],{"class":258},[252,172745,146871],{"class":311},[252,172747,172693],{"class":262},[252,172749,152056],{"class":367},[252,172751,12575],{"class":262},[252,172753,146886],{"class":5356},[252,172755,308],{"class":258},[252,172757,146891],{"class":367},[252,172759,13854],{"class":262},[252,172761,31523],{"class":258},[252,172763,148233],{"class":5356},[252,172765,3878],{"class":262},[252,172767,172768,172771,172773,172775,172777,172779,172781,172783,172785,172787,172789],{"class":254,"line":1786},[252,172769,172770],{"class":262},"        json.dump(data, ",[252,172772,45494],{"class":5356},[252,172774,12575],{"class":262},[252,172776,147217],{"class":5356},[252,172778,308],{"class":258},[252,172780,34127],{"class":311},[252,172782,12575],{"class":262},[252,172784,152092],{"class":5356},[252,172786,308],{"class":258},[252,172788,340],{"class":311},[252,172790,269],{"class":262},[19,172792,172793,24758],{},[22,172794,154687],{},[244,172796,172798],{"className":30518,"code":172797,"language":30520,"meta":169,"style":169},"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",[22,172799,172800,172811,172815,172828,172848],{"__ignoreMap":169},[252,172801,172802,172804,172806,172808],{"class":254,"line":255},[252,172803,30877],{"class":258},[252,172805,172421],{"class":262},[252,172807,30532],{"class":258},[252,172809,172810],{"class":262}," read_json, write_json\n",[252,172812,172813],{"class":254,"line":170},[252,172814,2539],{"emptyLinePlaceholder":181},[252,172816,172817,172819,172821,172824,172826],{"class":254,"line":1318},[252,172818,159796],{"class":262},[252,172820,308],{"class":258},[252,172822,172823],{"class":262}," read_json(",[252,172825,151911],{"class":367},[252,172827,269],{"class":262},[252,172829,172830,172832,172834,172836,172838,172840,172842,172844,172846],{"class":254,"line":1333},[252,172831,170614],{"class":262},[252,172833,62819],{"class":367},[252,172835,51577],{"class":262},[252,172837,149968],{"class":367},[252,172839,12575],{"class":262},[252,172841,151552],{"class":367},[252,172843,51577],{"class":262},[252,172845,1252],{"class":311},[252,172847,165232],{"class":262},[252,172849,172850,172853,172855],{"class":254,"line":1339},[252,172851,172852],{"class":262},"write_json(",[252,172854,151911],{"class":367},[252,172856,172857],{"class":262},", students)\n",[14,172859,172861],{"id":172860},"_918-易错点","9.18 易错点",[207,172863,172864,172867,172872,172877,172880,172883],{},[210,172865,172866],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[210,172868,172869,172870,28525],{},"能指定异常类型就不要裸写 ",[22,172871,170974],{},[210,172873,172874,172876],{},[22,172875,171349],{}," 无论是否出错都会执行。",[210,172878,172879],{},"模块文件名不要和标准库重名。",[210,172881,172882],{},"导入自己写的模块时，要注意运行目录。",[210,172884,172885],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172887,172889],{"id":172888},"_919-本章练习","9.19 本章练习",[207,172891,172892,172895,172898,172904,172911],{},[210,172893,172894],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[210,172896,172897],{},"写函数读取文件，如果文件不存在则返回空字符串。",[210,172899,172312,172900,172903],{},[22,172901,172902],{},"math_utils.py","，实现加减乘除函数并导入使用。",[210,172905,172906,172907,172910],{},"创建一个 ",[22,172908,172909],{},"utils"," 包，把 JSON 读写函数放进去。",[210,172912,172913],{},"写一个程序，捕获除零异常和输入格式异常。",[5266,172915,172916],{},"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":169,"searchDepth":170,"depth":170,"links":172918},[172919,172920,172921,172922,172923,172924,172925,172926,172927,172928,172929,172935,172942,172944,172945,172946,172947,172948,172949],{"id":170771,"depth":170,"text":170772},{"id":170899,"depth":170,"text":170900},{"id":170948,"depth":170,"text":170949},{"id":171097,"depth":170,"text":171098},{"id":171269,"depth":170,"text":171270},{"id":171338,"depth":170,"text":171339},{"id":171449,"depth":170,"text":171450},{"id":171575,"depth":170,"text":171576},{"id":171700,"depth":170,"text":171701},{"id":171755,"depth":170,"text":171756},{"id":171854,"depth":170,"text":171855,"children":172930},[172931,172932,172933,172934],{"id":171858,"depth":1318,"text":171859},{"id":171892,"depth":1318,"text":171893},{"id":171931,"depth":1318,"text":171932},{"id":172010,"depth":1318,"text":172011},{"id":172033,"depth":170,"text":172034,"children":172936},[172937,172938,172939,172940,172941],{"id":172037,"depth":1318,"text":172038},{"id":172120,"depth":1318,"text":172121},{"id":172165,"depth":1318,"text":172166},{"id":172224,"depth":1318,"text":172225},{"id":172262,"depth":1318,"text":172263},{"id":172296,"depth":170,"text":172943},"9.13 if name == \"main\"",{"id":172389,"depth":170,"text":172390},{"id":172434,"depth":170,"text":172435},{"id":172545,"depth":170,"text":172546},{"id":172603,"depth":170,"text":172604},{"id":172860,"depth":170,"text":172861},{"id":172888,"depth":170,"text":172889},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170763,"description":178},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172956,"title":172957,"body":172958,"description":173121,"extension":179,"meta":173122,"navigation":181,"path":173123,"seo":173124,"stem":173125,"__hash__":173126},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172959,"toc":173116},[172960,172963,172966,172969,172980,172982,173056,173059,173062,173065,173068,173071,173074,173077,173080,173083,173086],[10,172961,172957],{"id":172962},"python教程",[19,172964,172965],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,172967,172968],{},"建议学习环境：",[207,172970,172971,172974,172977],{},[210,172972,172973],{},"Python 版本：Python 3.10 及以上。",[210,172975,172976],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[210,172978,172979],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,172981,117214],{"id":117214},[207,172983,172984,172990,172996,173002,173008,173014,173020,173026,173032,173038,173044,173050],{},[210,172985,172986],{},[501,172987,172989],{"href":172988},".\u002Fch1-Python","Python环境与第一个程序",[210,172991,172992],{},[501,172993,172995],{"href":172994},".\u002Fch2","基础语法、变量与字符串",[210,172997,172998],{},[501,172999,173001],{"href":173000},".\u002Fch3","判断语句",[210,173003,173004],{},[501,173005,173007],{"href":173006},".\u002Fch4","循环语句",[210,173009,173010],{},[501,173011,173013],{"href":173012},".\u002Fch5","函数基础",[210,173015,173016],{},[501,173017,173019],{"href":173018},".\u002Fch6","数据容器",[210,173021,173022],{},[501,173023,173025],{"href":173024},".\u002Fch7","函数进阶",[210,173027,173028],{},[501,173029,173031],{"href":173030},".\u002Fch8","文件操作",[210,173033,173034],{},[501,173035,173037],{"href":173036},".\u002Fch9","异常、模块与包",[210,173039,173040],{},[501,173041,173043],{"href":173042},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[210,173045,173046],{},[501,173047,173049],{"href":173048},".\u002Fch11","面向对象基础",[210,173051,173052],{},[501,173053,173055],{"href":173054},".\u002Fch12","综合案例与复习路线",[14,173057,173058],{"id":173058},"学习路线",[19,173060,173061],{},"第一阶段：能运行程序。",[19,173063,173064],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173066,173067],{},"第二阶段：能组织数据。",[19,173069,173070],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173072,173073],{},"第三阶段：能封装逻辑。",[19,173075,173076],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173078,173079],{},"第四阶段：能做小项目。",[19,173081,173082],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173084,173085],{"id":173085},"参考资料",[207,173087,173088,173095,173102,173109],{},[210,173089,173090,173091],{},"黑马程序员 Python 入门教程推荐：",[501,173092,173093],{"href":173093,"rel":173094},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24004],[210,173096,173097,173098],{},"Python 官方中文教程：",[501,173099,173100],{"href":173100,"rel":173101},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24004],[210,173103,173104,173105],{},"Python 标准库文档：",[501,173106,173107],{"href":173107,"rel":173108},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24004],[210,173110,173111,173112],{},"pyecharts 文档：",[501,173113,173114],{"href":173114,"rel":173115},"https:\u002F\u002Fpyecharts.org\u002F",[24004],{"title":169,"searchDepth":170,"depth":170,"links":173117},[173118,173119,173120],{"id":117214,"depth":170,"text":117214},{"id":173058,"depth":170,"text":173058},{"id":173085,"depth":170,"text":173085},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23517},"\u002Fwiki\u002F2024-10-10-python",{"title":172957,"description":173121},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331426800]